Arama butonu
Bu konudaki kullanıcılar: 1 misafir
4171
Cevap
168714
Tıklama
3
Öne Çıkarma
Cevap: C/C++/C# Sorularınız Buraya. . .(GÜNCEL) (124. sayfa)
E
12 yıl
Binbaşı

Yazmayı unutmuşum ikinci soruda array kullanılmayacak sadece recursion fonksiyonla olacak.


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @4kalan
N
12 yıl
Çavuş

Herkese iyi çalışmalar, satranc yapmaya çalışıyorum ve kodun başlarında bi sorunlar karşılaştım umarım yardımcı olabilirsiniz.
İnitialize deyip *board[8]'ı fonksiyona soktuğumda fonksiyon işlevini yerine getiriyor fakat fonksiyon biter bitmez gönderme hatası alıyorm ve program kapanıyor. Codeblocks'da ve devc++ da denedim aynı sonucu aldım. Kodda bi yanlışlık var mı bi göz atabilirseniz sevinirim.


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void initialize(char *[]);
void showmoves (char []);
int main()
{
char move[5];
char initialize1[11];
char showmoves1[10];
char firstlocation[3];
char lastlocation[3];
char x1[24]={'R','1',' ','N','1',' ','B','1',' ','Q','U',' ','K','I',' ','B','2',' ','N','2',' ','R','2','\0'};
char x2[24]={'P','1',' ','P','2',' ','P','3',' ','P','4',' ','P','5',' ','P','6',' ','P','7',' ','P','8','\0'};
char x3[24]={' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','\0'};
char x4[24]={' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','\0'};
char x5[24]={' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','\0'};
char x6[24]={' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','\0'};
char x7[24]={'p','1',' ','p','2',' ','p','3',' ','p','4',' ','p','5',' ','p','6',' ','p','7',' ','p','8','\0'};
char x8[24]={'r','1',' ','n','1',' ','b','1',' ','q','u',' ','k','i',' ','b','2',' ','n','2',' ','r','2','\0'};
char *board[8]={x1,x2,x3,x4,x5,x6,x7,x8};

scanf("%s",initialize1);
if(strcmp("initialize",initialize1)==0)
initialize(board);
else
printf("Failed!\n");

scanf("%s%s",showmoves1,firstlocation);
if(strcmp("showmoves",showmoves1)==0)
showmoves(firstlocation);
else
printf("Failed!\n");

return 0;
}

void initialize(char *a[]){
int i;
for(i=0; i<9; i++)
printf("%s\n",*(a+i));

}
void showmoves(char a[]){
if (strcmp("a2",a)==0)
printf("\na3");


}



T
12 yıl
Yarbay

quote:

Orijinalden alıntı: El nino9

Yazmayı unutmuşum ikinci soruda array kullanılmayacak sadece recursion fonksiyonla olacak.


Arraysiz veya pointersiz bu soruyu C de cozmek imkansiz. Cunku C de string denilen bir kavram yok.

Pointerli cozum:
 
void disprev(const char *str)
{
if (*str == '\0') { return;}
disprev(str+1);
printf("%c", *str);
}

int main(void) {
char *str = malloc(100);
printf("Yaziyi giriniz : ");
fgets(str, 100, stdin);
disprev(str);
return 0;
}





< Bu mesaj bu kişi tarafından değiştirildi ThisisaNightmare -- 10 Aralık 2013; 16:16:09 >
Bu mesaja 1 cevap geldi.
S
12 yıl
Teğmen

quote:

Orijinalden alıntı: ThisisaNightmare

quote:

Orijinalden alıntı: El nino9

Yazmayı unutmuşum ikinci soruda array kullanılmayacak sadece recursion fonksiyonla olacak.


Arraysiz veya pointersiz bu soruyu C de cozmek imkansiz. Cunku C de string denilen bir kavram yok.

Pointerli cozum:
 
void disprev(const char *str)
{
if (*str == '\0') { return;}
disprev(str+1);
printf("%c", *str);
}

int main(void) {
char *str = malloc(100);
printf("Yaziyi giriniz : ");
fgets(str, 100, stdin);
disprev(str);
return 0;
}


recursive fonksiyon ile
 

void reverse()
{
char c;
if((c=getchar())!='\n') reverse();
if(c!='\n') putchar(c);
}
int main()
{
reverse();
}





< Bu mesaj bu kişi tarafından değiştirildi Seikatsu -- 10 Aralık 2013; 12:47:51 >
Bu mesaja 3 cevap geldi.
C
12 yıl
Er

postfix ifadesinin klavyeden girileceğini ve her sayı ve işlem arasında en az 1 boşluk karakteri olacağını varsayınız. Yazacağınız program son-takı ifadesinin hesaplanabilmesi için yığın veri modelini kullanmalı ve 500 karakter’e kadar girilen ifadeleri doğru bir şeklide hesaplayabilmelidir. Eğer girilen ifadede hata varsa, uygun hata mesajını ekranda gösterebilmelidir.



Örneğin, aşağıdaki postfix ifadesi

12 2 * 4 + 3 /



((12 * 2) + 4) / 3 şeklinde hesaplanmalıdır. Bu amaçla alınan her sayı yığına eklenmeli, bir işlem görüldüğünde yığından ilk 2 sayı alınıp, işlem hesaplanıp, sonuç tekrar yığına eklenmelidir. Eğer ekleme ve alma işlemlerinde hata olursa, uygun hata mesajları ekranda gösterilmelidir.



12 2 4 + * – şeklinde verilen bir son-takı ifadesi (12 * (2 + 4)) – şeklinde hesaplanacağından – işleminde gerekli olan ikinci sayı verilmediğinden hata mesajı verilmelidir.



Yığın yapısı için dizi ya da bağlı liste kullanılabilir.
Bu soruda kodu yazmaya çalıştım fakat pek başarılı olamadım.Yardımcı olursanız c kodu hakkında seviniirim.



T
12 yıl
Yarbay

quote:

Orijinalden alıntı: Seikatsu

quote:

Orijinalden alıntı: ThisisaNightmare

quote:

Orijinalden alıntı: El nino9

Yazmayı unutmuşum ikinci soruda array kullanılmayacak sadece recursion fonksiyonla olacak.


Arraysiz veya pointersiz bu soruyu C de cozmek imkansiz. Cunku C de string denilen bir kavram yok.

Pointerli cozum:
 
void disprev(const char *str)
{
if (*str == '\0') { return;}
disprev(str+1);
printf("%c", *str);
}

int main(void) {
char *str = malloc(100);
printf("Yaziyi giriniz : ");
fgets(str, 100, stdin);
disprev(str);
return 0;
}


recursive fonksiyon ile
 

void reverse()
{
char c;
if((c=getchar())!='\n') reverse();
if(c!='\n') putchar(c);
}
int main()
{
reverse();
}


Mantik guzelde, ben genede bir satiri okumak icin fgets kullanmayi tercih ederim.



E
12 yıl
Binbaşı

recursive ile olan fonksiyonu netten bulmuştum yaptım fakat mantığını tam olarak bilmiyorum onuda yazar mısın ?


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @Seikatsu
S
12 yıl
Teğmen

quote:

Orijinalden alıntı: El nino9

recursive ile olan fonksiyonu netten bulmuştum yaptım fakat mantığını tam olarak bilmiyorum onuda yazar mısın ?

fonksiyon kendini bosluk karakterini bulana kadar tekrar cagırıyor boylece harf harf karakterleri almıs oluyor(bufferdan)
daha sonra icten dışa doğru yazdırıyor



M
12 yıl
Er

kullanıcı pozitif tamsayı girecek, program bu sayının bütün asal çarpanlarını bulup, diziye atayacak
SORUMA YARDIMCI OLABİLİR MİSİNİZ? :((


Bu mesaja 1 cevap geldi.
Ö
12 yıl
Yüzbaşı

quote:

Orijinalden alıntı: mntkrstknt

kullanıcı pozitif tamsayı girecek, program bu sayının bütün asal çarpanlarını bulup, diziye atayacak
SORUMA YARDIMCI OLABİLİR MİSİNİZ? :((

Merhaba,

Yapamadığınız kısım neresi, orayı yazarsanız o şekilde yardımcı olalım. Yoksa direkt bizim yapıp size kod vermemiz size bi'şey kazandırmaz.


Bu mesaja 1 cevap geldi.
L
12 yıl
Teğmen

Kardeşim burada senin sorunun python ile gerçeklemesi var. Fikir edinmek için bakabilirsin.

 
class Stack():
def __init__(self):
self.items=[]

def isEmpty(self):
return self.items==[]

def push(self,item):
self.items.append(item)

def pop(self,n=None):
if self.isEmpty():
return None
if n==None:
return self.items.pop()
else:
return self.items.pop(n)

def peek(self,n=None):
if self.isEmpty():
return None
if n==None:
return self.items[len(self.items)-1]
else:
return self.items[n]

def size(self):
return len(self.items)

def show(self, title=""):
print title,
for i in self.items:
print i,
print


def postfixEval(postfixExpr):

operandStack = Stack()

tokenList = postfixExpr.split()

for token in tokenList:
if token in "0123456789":
operandStack.push(int(token))
else:
operand2 = operandStack.pop()
operand1 = operandStack.pop()
result = doMath(token,operand1,operand2)
operandStack.push(result)

return operandStack.pop()

def doMath(op, op1, op2):
if op == "*":
return op1 * op2
else:
if op == "/":
return op1 / op2
else:
if op == "+":
return op1 + op2
else:
return op1 - op2




Bu mesajda bahsedilenler: @ca123ner
H
12 yıl
Binbaşı

integera atadığımız sayıyı geçersiz kılıp tekrar scanf ile değer almak için ne önerirsiniz ?

bir menü yazıyorum c ile 0 1 2 3 4 den birini girecek kullanıcı switch case kullanıyorum. default içine goto ile döndürme yapıyorum ama sürekli yazıyor çünkü en başta girilen değeri silmeden o satıra geliyor ne önerirsiniz?


Bu mesaja 1 cevap geldi.
T
12 yıl
Yarbay

quote:

Orijinalden alıntı: hayvan arkadas

integera atadığımız sayıyı geçersiz kılıp tekrar scanf ile değer almak için ne önerirsiniz ?

bir menü yazıyorum c ile 0 1 2 3 4 den birini girecek kullanıcı switch case kullanıyorum. default içine goto ile döndürme yapıyorum ama sürekli yazıyor çünkü en başta girilen değeri silmeden o satıra geliyor ne önerirsiniz?

Oncelikle goto kullanmayin, 1970 yilindan once kullanilan birsey o.

Onun yerine while kullan.

Atiyorum
char girdi;
while(1) {
girdi = getchar();
//Switch burda

if (girdi == CIKIS) { break;}
}

CIKIS ile bahsettigim cikis yapilcak girdi yani atiyorum 0 ile cikis yapiyorsan '0' yazmalisin.


Bu mesaja 2 cevap geldi.
H
12 yıl
Binbaşı

quote:

Orijinalden alıntı: ThisisaNightmare

quote:

Orijinalden alıntı: hayvan arkadas

integera atadığımız sayıyı geçersiz kılıp tekrar scanf ile değer almak için ne önerirsiniz ?

bir menü yazıyorum c ile 0 1 2 3 4 den birini girecek kullanıcı switch case kullanıyorum. default içine goto ile döndürme yapıyorum ama sürekli yazıyor çünkü en başta girilen değeri silmeden o satıra geliyor ne önerirsiniz?

Oncelikle goto kullanmayin, 1970 yilindan once kullanilan birsey o.

Onun yerine while kullan.

Atiyorum
char girdi;
while(1) {
girdi = getchar();
//Switch burda

if (girdi == CIKIS) { break;}
}

CIKIS ile bahsettigim cikis yapilcak girdi yani atiyorum 0 ile cikis yapiyorsan '0' yazmalisin.

fflush() ile yaptim orayi ama su anda vaska bir sorunum var

case icinde case yazarak yes or no y/n ile cikis veya devam etme yapmam lazim yes dersem cikacak no dersem goto ile donecek, goto yerine naparim burda

case icinde case surekli hata veriyor


mobilim yarin detaylica sorucam sagolun



< Bu ileti mobil sürüm kullanılarak atıldı >
Bu mesaja 1 cevap geldi.
T
12 yıl
Yarbay

quote:

Orijinalden alıntı: hayvan arkadas


quote:

Orijinalden alıntı: ThisisaNightmare

quote:

Orijinalden alıntı: hayvan arkadas

integera atadığımız sayıyı geçersiz kılıp tekrar scanf ile değer almak için ne önerirsiniz ?

bir menü yazıyorum c ile 0 1 2 3 4 den birini girecek kullanıcı switch case kullanıyorum. default içine goto ile döndürme yapıyorum ama sürekli yazıyor çünkü en başta girilen değeri silmeden o satıra geliyor ne önerirsiniz?

Oncelikle goto kullanmayin, 1970 yilindan once kullanilan birsey o.

Onun yerine while kullan.

Atiyorum
char girdi;
while(1) {
girdi = getchar();
//Switch burda

if (girdi == CIKIS) { break;}
}

CIKIS ile bahsettigim cikis yapilcak girdi yani atiyorum 0 ile cikis yapiyorsan '0' yazmalisin.

fflush() ile yaptim orayi ama su anda vaska bir sorunum var

case icinde case yazarak yes or no y/n ile cikis veya devam etme yapmam lazim yes dersem cikacak no dersem goto ile donecek, goto yerine naparim burda

case icinde case surekli hata veriyor


mobilim yarin detaylica sorucam sagolun

Ilk mesajimda yazdigim gibi, goto yerine while loop kullanabilirsin.

case icinde case yazilmaz. Switch kullaniyorsan caseler sade birsey olmali. Eger sade degilse, if else vs kullanmalisin.



4
12 yıl
Teğmen

goto hala kullanılıyor, ve kullanılması gereken yerde sırf kulaktan doğma "goto kullanmayın" dendiği için kullanmamak saçma.
Tamam mümkün olduğunca kullanmamak gerekir ama "goto kullanmayin, 1970 lerden önce kullanılan birşey" demek de yanlış.

for (;;)
for (;;)
for(;;)
if (....)
break; // Bütün döngülerden çıkmak istiyorum. Bir sürü flag mi tutacağım?


if (p1 = malloc...) {
...
if (p2 = malloc...)
goto BIR;
if (p3 = malloc...)
goto IKI;
if (p4 = malloc...)
goto UC;
.
.
.
//en son yer tahsisi başarısız olursa öncekileri free etmek gerekir. Tipik go to nun kullanıldığı durumlardan bir başkası.

UC:
free p3;
IKI:
free p2;
BIR:
free p1;





< Bu mesaj bu kişi tarafından değiştirildi 4kalan -- 11 Aralık 2013; 13:26:07 >
Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @ThisisaNightmare
M
12 yıl
Er

quote:

Orijinalden alıntı: m3RsiN´´

quote:

Orijinalden alıntı: -Source-

quote:

Orijinalden alıntı: m3RsiN´´

Arkadaslar ben su anda yurd disinda okuyorum ve grafik programlama dersinden donem odevi aldim. Benden istenilen

C++ ta basit bir kus cizip bu kus u ekranda capraz sekilde sag ust koseden sol atl koseye dogru gidip gelmesi..

Yardimci olabilcek arkadaslar bi yonlendirme yaparsa sevinirm cunku anlayamiyorum dersleri ve nasil yapicagim konusunda bi fikrim yok...

Grafik programlama için hangi api kullanıyorsunuz OpenGL mi? Direct3D mi?
Kuş 2d sprite mı olacak yoksa 3d model mi?

Soru sorarken lütfen tüm ayrıntıları yazın tekrar sormak zorunda kalmayalım. Burada soru soranların çoğu aynı şeyi yapıyor yarım yamalak soru sorup cevap bekliyorlar.

Dev C grafik kutuphanesi ile yaziyoruz 2d olucak OpenGL Kusuruma bakmayin ilk kez bi soru soruyorum.. Tekrar tesekkurler

Yardim edebilcek yol gosterebilicek kimse yok mu arkadaslar ?


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @-Source-
V
12 yıl
Onbaşı

goto hala kullanılıyor olabilir ama bu hatalı olduğu gerçeğini değiştirmez. Çok ilkel kodlarda kullanılmış ve günümüze kadar gelmiş ama şu anda tam bir acemi işi goto.

O içiçe for örneğinde o kısmın ayrı bir işlem olduğu ve başka bir fonksiyona taşınması gerektiği anlaşılıyor. Yani çıkma işini return ile yapacaksın.
Bellek tahsisi olayında da eminim daha iyi yöntemler bulunur. Tabi isteyen kullansın ama ben her zaman alternatif yöntemlerden yanayım.


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @4kalan
4
12 yıl
Teğmen

goto kullanmanın hata olduğunu düşünmüyorum. Yeni yazılan kodlarda da gördüm eskilerde de. Başka örnekler verilebilir ama yazdığım örneklere cevap verdiğiniz için bana da söz hakkı doğdu
Döngülerde ayrı bir işlem olsa bile döngü çıkışında başka işlemler yapılabilir, ayrı fonksiyona taşınmayabilir... gibi gibi

Tekrar söylemek gerekir örneklerden de anlaşılacağı gibi kullanımı kısıtlı ama kullanılmasının tavsiye edildiği ya da okunabilirlik açısından yanlış kabul edilmediği yerler de var.
Kullanmamak gerekir ama kullanılmasının gerektiği yerlerde de kullanmamak bana göre yanlış.





< Bu mesaj bu kişi tarafından değiştirildi 4kalan -- 11 Aralık 2013; 14:21:20 >
Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @Vandenesse
T
12 yıl
Yarbay

quote:

Orijinalden alıntı: 4kalan

goto hala kullanılıyor, ve kullanılması gereken yerde sırf kulaktan doğma "goto kullanmayın" dendiği için kullanmamak saçma.
Tamam mümkün olduğunca kullanmamak gerekir ama "goto kullanmayin, 1970 lerden önce kullanılan birşey" demek de yanlış.

for (;;)
for (;;)
for(;;)
if (....)
break; // Bütün döngülerden çıkmak istiyorum. Bir sürü flag mi tutacağım?


if (p1 = malloc...) {
...
if (p2 = malloc...)
goto BIR;
if (p3 = malloc...)
goto IKI;
if (p4 = malloc...)
goto UC;
.
.
.
//en son yer tahsisi başarısız olursa öncekileri free etmek gerekir. Tipik go to nun kullanıldığı durumlardan bir başkası.

UC:
free p3;
IKI:
free p2;
BIR:
free p1;



for (;;) 
for (;;)
for(;;)
if (....)
break; // Bütün döngülerden çıkmak istiyorum. Bir sürü flag mi tutacağım?


Hayir, hatta bazi kod style larinda break bile yasak olabilir. Ben her zaman sunu yaparim:

for (i=0;i<5;i++) 
for (j=0;j<10;j++)
for(k=10;k>0;k--)
if (....)
i=5;j=10;k=0


gordugun gibi flaga falan gerek yok, e kodun geri kalaninin calismasini istemiyorum dersen ardina bir tane else koyarsin olur biter.

Ikinci ornegini tam anlamadim, if in icindeki malloc hata donerse, geriden mi free ederiz mantigi var? Eger durum boyleyse bunlari en basitinden bir arrayde tutup en son eklenenden geriye free ederiz(aklima ilk gelen bu)


Bu mesaja 1 cevap geldi.