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

quote:

Orijinalden alıntı: garui

quote:

Orijinalden alıntı: aytzey

merhaba, c de yanyana yazılan bir işlemi hesaplayan bir program yapmaya çalışıyorum (örneğin 5469*9856-9625+6985 gibi) ama sadece tek bir + işareti için bile denediğimde ilk sayının çıktısını alamadım, yardımcı olursanız sevinirim

quote:

#include <stdio.h>
#include <stdlib.h>
#define A 200


long int usalan(long int sayi,long int us)
{
long int a,i;
a=sayi;
i=1;
while (i<us)
{
i++;
sayi=a*sayi;
}
return sayi;
}

int main()
{
int sayac,a,t,ilksayi,ikincisayi,k,l,m;

char sayi[A];
sayi[A]="555665+65456";
for(sayac=0; sayi[sayac] != '\0'; sayac++)
{ m=sayac-1;
t=sayac;
k=t-2;
if (sayi[sayac]=='+')
{

while (a<m)
{


l=sayi[a]*usalan(10,k);
ilksayi=ilksayi+l;
k--;
a++;

}
}
}
printf ("%d",ilksayi);
}


Sayilari elde etmen o kadar basit degil. char arraya o sekilde veri giremezsin. senin icin biraz ornekliyim

quote:


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define A 200

int main()
{
int i;
long int ilksayi,ikincisayi;

char sayilar[A];
char *locationSayi;

strncpy(sayilar,"555665+65456",sizeof(sayilar));

locationSayi = strtok(sayilar,"+-/*"); //1.sayi icin
ilksayi = atol(locationSayi);
locationSayi = strtok (NULL, "+-/*"); //2.sayi icin
ikincisayi = atol(locationSayi);

printf("Sayilar : %d %d\n",ilksayi,ikincisayi);

return 0;
}


quote:


Sayilar : 555665 65456


Alıntıları Göster

Sayilari elde etmen o kadar basit degil. char arraya o sekilde veri giremezsin. senin icin biraz ornekliyim


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define A 200

int main()
{
int i;
long int ilksayi,ikincisayi;

char sayilar[A];
char *locationSayi;

strncpy(sayilar,"555665+65456",sizeof(sayilar));

locationSayi = strtok(sayilar,"+-/*"); //1.sayi icin
ilksayi = atol(locationSayi);
locationSayi = strtok (NULL, "+-/*"); //2.sayi icin
ikincisayi = atol(locationSayi);

printf("Sayilar : %d %d\n",ilksayi,ikincisayi);

return 0;
}



Sayilar : 555665 65456



Hocam çok teşekkür ederim, burda sayıyı kullanıcıdan aldığımızda onun kaç sayı girdiğini ve araya kaç artı koyduğunu bilmezsek yine aynı yolu izleyerek sonuca varabilir miyiz (örneğin kullanıcı 2+3-5565767546+32*8762 girdi), bir de strok atol ve strncopy fonksiyonlarını açıklayabilir misiniz





< Bu mesaj bu kişi tarafından değiştirildi aytzey -- 22 Aralık 2012; 17:38:41 >

A
13 yıl
Er

cevap icin tesekkurler. peki pointer ile nasıl yapabalirim?


Bu mesaja 1 cevap geldi.
S
13 yıl
Binbaşı

Merhabalar zamansızlıktan uğrayamıyorum diye üzülüyordum saolsun C proje ödeviyle baya burada kalıcam gibi .

Yapmaya çalışacağım şey verilen sayılar ile istenilen 4 işlem kullanılarak hedef sayıya ulaşmak. Süreyi kısaltmaya çalışmaya başlamadan önce bütün seçenekleri deneyen bir kod oluşturma düşüncesindeyim yani

a+b+c , a+b*c, a+b/c şeklinde giderek bütün seçenekleri deneyecek. Verilen sayıların sayısı değişken olabiliyor en çok zorlayacak yer bu olacak heralde , kalansız bölme işlemleri yapılabiliyor sadece .

Hoca direk bu projeyi seçmeyin dedi ama deniycem en azından , sormak istediğim bütün olasılıkların denenmesi çok mu uzun sürer ? Bu projeye başlamadan önce ilk önce şu örnekleri yaparsan kafanda daha iyi oturur diyebileceğiniz sorular var mı ?


Bu mesaja 1 cevap geldi.
C
13 yıl
Onbaşı

quote:

Orijinalden alıntı: MrOwl

quote:

Orijinalden alıntı: chipagat

bir sayı tahmin oyunu progamladım c de dogru sayı dogru yer için +1 dogru sayı yanlış yer için -1 koyacak 4 basamaklı sayılar için ancak -,+l degerler 5,6,7 gibi degerler geliyo napabilirim
edit :

#include <stdio.h>

void diziyeAktar(int sayi,int dizi[]);

int main(void)
{
int gizliSayi[3],tahmin[3],sayi1,sayi2,i,dogruTahmin=0,yanlisTahmin=1;

printf("Gizli Sayiyi Giriniz X=?\n");
scanf("%d",&sayi1);

if(sayi1<1000 || sayi1>9999)
{
printf("Girdi Uygun Degil\n");
return -1;
}

diziyeAktar(sayi1,gizliSayi);

while(sayi1 != sayi2)
{
printf("Tahmininizi Giriniz Y=?\n");
scanf("%d",&sayi2);

if(sayi2<1000 || sayi2>9999)
{
printf("Girdi Uygun Degil\n");
return -1;
}

diziyeAktar(sayi2,tahmin);

for(i=0;i<3;i++)
{
if(gizliSayi == tahmin)
{
dogruTahmin += 1;
}
else if(gizliSayi != tahmin)
{
yanlisTahmin += 1;
}


}
if(sayi1 == sayi2)
{
printf("Tebrikler Sayiyi Buldunuz\n");
scanf("%d",&i); /* programin hemen kapanmasini onler */
return -1;
}
printf("+%d\n",dogruTahmin);
printf("-%d\n",yanlisTahmin);
dogruTahmin = 0;
yanlisTahmin = 1;


}


scanf("%d",&i); /* Derleyici olarak Dev C++ ý kullanarak yazdým bu scanfin amaci programin hemen kapanmasini onlemek */

return 0;



}


/* Bu fonksiyon gelen integer sayiyi uzunluðu 4 olan bir boyutlu bir diziye atar */

void diziyeAktar(int sayi,int dizi[])
{
int temp=0,bolen=10,i=0,carpan=1;



for(i=0;i<4;i++)
{
temp = (sayi%bolen) / carpan;
sayi = sayi - (temp*carpan);
dizi[3-i] = temp;
bolen *= 10;
carpan *= 10;
}





}

Bu oyunu çok severim, çocukluğumdan beri hala daha oynarım :) Her basamak için olanını yazmıştım(seçenekli değil, algoritma otomatik olarak ayarlıyor). Yarın müsait vaktim olursa paylaşacağım.

eyvallah



C
13 yıl
Onbaşı

quote:

Orijinalden alıntı: MrOwl

quote:

Orijinalden alıntı: chipagat

bir sayı tahmin oyunu progamladım c de dogru sayı dogru yer için +1 dogru sayı yanlış yer için -1 koyacak 4 basamaklı sayılar için ancak -,+l degerler 5,6,7 gibi degerler geliyo napabilirim
edit :

#include <stdio.h>

void diziyeAktar(int sayi,int dizi[]);

int main(void)
{
int gizliSayi[3],tahmin[3],sayi1,sayi2,i,dogruTahmin=0,yanlisTahmin=1;

printf("Gizli Sayiyi Giriniz X=?\n");
scanf("%d",&sayi1);

if(sayi1<1000 || sayi1>9999)
{
printf("Girdi Uygun Degil\n");
return -1;
}

diziyeAktar(sayi1,gizliSayi);

while(sayi1 != sayi2)
{
printf("Tahmininizi Giriniz Y=?\n");
scanf("%d",&sayi2);

if(sayi2<1000 || sayi2>9999)
{
printf("Girdi Uygun Degil\n");
return -1;
}

diziyeAktar(sayi2,tahmin);

for(i=0;i<3;i++)
{
if(gizliSayi == tahmin)
{
dogruTahmin += 1;
}
else if(gizliSayi != tahmin)
{
yanlisTahmin += 1;
}


}
if(sayi1 == sayi2)
{
printf("Tebrikler Sayiyi Buldunuz\n");
scanf("%d",&i); /* programin hemen kapanmasini onler */
return -1;
}
printf("+%d\n",dogruTahmin);
printf("-%d\n",yanlisTahmin);
dogruTahmin = 0;
yanlisTahmin = 1;


}


scanf("%d",&i); /* Derleyici olarak Dev C++ ý kullanarak yazdým bu scanfin amaci programin hemen kapanmasini onlemek */

return 0;



}


/* Bu fonksiyon gelen integer sayiyi uzunluðu 4 olan bir boyutlu bir diziye atar */

void diziyeAktar(int sayi,int dizi[])
{
int temp=0,bolen=10,i=0,carpan=1;



for(i=0;i<4;i++)
{
temp = (sayi%bolen) / carpan;
sayi = sayi - (temp*carpan);
dizi[3-i] = temp;
bolen *= 10;
carpan *= 10;
}





}

Bu oyunu çok severim, çocukluğumdan beri hala daha oynarım :) Her basamak için olanını yazmıştım(seçenekli değil, algoritma otomatik olarak ayarlıyor). Yarın müsait vaktim olursa paylaşacağım.

bir arkadaş else yerine else if kullan dedi ama zaten else if li problem başka bi yerde ama bulamadım bi turlu


Bu mesaja 1 cevap geldi.
C
13 yıl
Onbaşı

arkadaşlar derleyici olarak visual studio 2012 kullanıyorum bir program esnasında "unable to start program " diye hata verdi bilenler yardım ederse sevinirim şimdiden teşekkurler



E
13 yıl
Er

merhaba.benim c# dan proje ödevim var.c# da yeniyim.hesap makinası yapayım dedim hocamız basit buldu.yani aklınıza yapabilceğim bir proje geliyormu?netten araştırdım ama farklı bişeyler olsun istiyorum.umarım yardımcı olursunuz:)


Bu mesaja 1 cevap geldi.
M
13 yıl
Onbaşı

Arkadaşlar yardımcı olabileceğinizi düşünerek C++ yardımı istiyorum. Vb bilgim iyidir ancak bilgisayarımda sorun olduğundan C++ 'ta yazmak zorundayım.Programda olmasını istediklerim şu şekilde;

1-Kullancı adı ve şifre girişi olucak
2-Ben proje yayınlıyacağım programı indirenler bu projeye dahil olup görüşlerini bildirecekler.
3-Bunlar internet destekli olacak ve ben bilgisayarımdan yöneteceğim.

Kısaca bunlar tabi ben bunu geliştireceğim. Sizden istediğim C++ ile database oluşturma, Yazacağımız Programı internet yoluyla diğer kullanıcıların kullanımını görmek. Onların programa dahil olması ve benim kendi bilgisayarımdan program hareketlerini takip edebilmem ile alakalı yardım olucaktır. Emeğinize ellerinize şimdiden sağlık şifa olsun :)



T
13 yıl
Er

slm arkadaşlar sizlere 1 tane sru soracam cevabını bekliyorm sizlerden

klavyeden girilen 10 adet sayıdan kaç tane daha ilk girilen sayıya eşit oldugunu bulan prog.
ör:3,5,7,3,2,4,3,3,2,7 sonuc=4 tane girilmiştir


Bu mesaja 1 cevap geldi.
M
13 yıl
Yüzbaşı

quote:

Orijinalden alıntı: burhanettin38

slm arkadaşlar sizlere 1 tane sru soracam cevabını bekliyorm sizlerden

klavyeden girilen 10 adet sayıdan kaç tane daha ilk girilen sayıya eşit oldugunu bulan prog.
ör:3,5,7,3,2,4,3,3,2,7 sonuc=4 tane girilmiştir

int ilksayi,sayi,i,sayici=0;

scanf("%d",&sayi);

for(i=1;i<=10;i++)
{
if(i==1)
ilksayi=sayi;
if(sayi==ilksayi)
sayici++;
}



M
13 yıl
Yüzbaşı

quote:

Orijinalden alıntı: strahd_von_zarovich

Merhabalar zamansızlıktan uğrayamıyorum diye üzülüyordum saolsun C proje ödeviyle baya burada kalıcam gibi .

Yapmaya çalışacağım şey verilen sayılar ile istenilen 4 işlem kullanılarak hedef sayıya ulaşmak. Süreyi kısaltmaya çalışmaya başlamadan önce bütün seçenekleri deneyen bir kod oluşturma düşüncesindeyim yani

a+b+c , a+b*c, a+b/c şeklinde giderek bütün seçenekleri deneyecek. Verilen sayıların sayısı değişken olabiliyor en çok zorlayacak yer bu olacak heralde , kalansız bölme işlemleri yapılabiliyor sadece .

Hoca direk bu projeyi seçmeyin dedi ama deniycem en azından , sormak istediğim bütün olasılıkların denenmesi çok mu uzun sürer ? Bu projeye başlamadan önce ilk önce şu örnekleri yaparsan kafanda daha iyi oturur diyebileceğiniz sorular var mı ?

Beğendim ödevi yapabiliriz bunu. Çok zor değil, birkaç matematiksel hesapla işlem süresini düşürebiliriz. Bugün içinde bir şeyler yapmaya çalışacağım, şuanda kısa bir vaktim var cevaplayamıyorum.

İyi çalışmalar



M
13 yıl
Yüzbaşı

quote:

Orijinalden alıntı: chipagat

quote:

Orijinalden alıntı: MrOwl

quote:

Orijinalden alıntı: chipagat

bir sayı tahmin oyunu progamladım c de dogru sayı dogru yer için +1 dogru sayı yanlış yer için -1 koyacak 4 basamaklı sayılar için ancak -,+l degerler 5,6,7 gibi degerler geliyo napabilirim
edit :

#include <stdio.h>

void diziyeAktar(int sayi,int dizi[]);

int main(void)
{
int gizliSayi[3],tahmin[3],sayi1,sayi2,i,dogruTahmin=0,yanlisTahmin=1;

printf("Gizli Sayiyi Giriniz X=?\n");
scanf("%d",&sayi1);

if(sayi1<1000 || sayi1>9999)
{
printf("Girdi Uygun Degil\n");
return -1;
}

diziyeAktar(sayi1,gizliSayi);

while(sayi1 != sayi2)
{
printf("Tahmininizi Giriniz Y=?\n");
scanf("%d",&sayi2);

if(sayi2<1000 || sayi2>9999)
{
printf("Girdi Uygun Degil\n");
return -1;
}

diziyeAktar(sayi2,tahmin);

for(i=0;i<3;i++)
{
if(gizliSayi == tahmin)
{
dogruTahmin += 1;
}
else if(gizliSayi != tahmin)
{
yanlisTahmin += 1;
}


}
if(sayi1 == sayi2)
{
printf("Tebrikler Sayiyi Buldunuz\n");
scanf("%d",&i); /* programin hemen kapanmasini onler */
return -1;
}
printf("+%d\n",dogruTahmin);
printf("-%d\n",yanlisTahmin);
dogruTahmin = 0;
yanlisTahmin = 1;


}


scanf("%d",&i); /* Derleyici olarak Dev C++ ý kullanarak yazdým bu scanfin amaci programin hemen kapanmasini onlemek */

return 0;



}


/* Bu fonksiyon gelen integer sayiyi uzunluðu 4 olan bir boyutlu bir diziye atar */

void diziyeAktar(int sayi,int dizi[])
{
int temp=0,bolen=10,i=0,carpan=1;



for(i=0;i<4;i++)
{
temp = (sayi%bolen) / carpan;
sayi = sayi - (temp*carpan);
dizi[3-i] = temp;
bolen *= 10;
carpan *= 10;
}





}

Bu oyunu çok severim, çocukluğumdan beri hala daha oynarım :) Her basamak için olanını yazmıştım(seçenekli değil, algoritma otomatik olarak ayarlıyor). Yarın müsait vaktim olursa paylaşacağım.

bir arkadaş else yerine else if kullan dedi ama zaten else if li problem başka bi yerde ama bulamadım bi turlu

Bir şey fark etmiyor ki else, else if. Sadece yapıları farklı. Aynı işlemleri ikisiyle de yaparsınız.

Sorunuza gelince, bugün cevaplayacağım.

Ek: Yalnız gizli sayı girdisini bizim girmemizin bir anlamı yok. Random fonksiyonu ile PC'ye seçtirelim.





< Bu mesaj bu kişi tarafından değiştirildi MrOwl -- 24 Aralık 2012; 10:37:41 >
Bu mesaja 2 cevap geldi.
0
13 yıl
Er

Selemün Aleyküm abiler benim bir ödevimvar bunu bir bulun C/C++/C# bu programda

(Klavyaden girilen (ç,ğ,ı,ü,ş) harflerini (c,g,i,u,s) harflerine dönüştüren bir program yaza bilirmisiniz.)

ben yazdım ama bir tane virgül yüzünden çalışmadı.



C
13 yıl
Yüzbaşı

Merhaba arkadaşlar random değer atamalarında sorun yaşıyorum farklı labellara farklı değişkenlerle random değer atıyorum ve bu değerlerle laberlleri timer aracılığı ile hareket ettiriyorum fakat farklı timer tickerinin içindeki farklı değişkenlere atamış olduğum değerler aynı çıkıyor(labellar aynı hızda hareket ediyor)
Kodlarım şu şekilde
  private void button1_Click(object sender, EventArgs e) 
{
timer1.Enabled = true;
timer2.Enabled = true;
timer3.Enabled = true;
timer4.Enabled = true;
timer5.Enabled = true;
timer6.Enabled = true;
timer7.Enabled = true;
timer8.Enabled = true;
timer9.Enabled = true;
}

private void timer1_Tick(object sender, EventArgs e)
{

if (label1.Left < 400)
{

Random deg1 = new Random();
int bir;
bir = deg1.Next(1, 30);
label1.Left = label1.Left + bir;
label11.Text=bir.ToString();
}
else if (label1.Left >= 400)
{
timer2.Enabled = false;
timer3.Enabled = false;
timer4.Enabled = false;
timer5.Enabled = false;
timer6.Enabled = false;
timer7.Enabled = false;
timer8.Enabled = false;
timer9.Enabled = false;
label1.ForeColor = Color.Red;

}


}

private void timer2_Tick(object sender, EventArgs e)
{

if (label2.Left < 400)
{
label2.Text = label2.Left.ToString();
int iki;
Random deg2 = new Random();
iki = deg2.Next(1, 30);

label2.Left = label2.Left + iki;
label12.Text = iki.ToString();
}
else if (label2.Left >= 400)
{

timer1.Enabled = false;
timer3.Enabled = false;
timer4.Enabled = false;
timer5.Enabled = false;
timer6.Enabled = false;
timer7.Enabled = false;
timer8.Enabled = false;
timer9.Enabled = false;
label2.ForeColor = Color.Red;
}
}

private void timer3_Tick(object sender, EventArgs e)
{

if (label3.Left < 400)
{
label3.Text = label3.Left.ToString();

Random deg3 = new Random();
int uc;
uc = deg3.Next(1, 30);
label3.Left = label3.Left + uc;
}
else if (label3.Left >= 400)
{
timer2.Enabled = false;
timer1.Enabled = false;
timer4.Enabled = false;
timer5.Enabled = false;
timer6.Enabled = false;
timer7.Enabled = false;
timer8.Enabled = false;
timer9.Enabled = false;
label3.ForeColor = Color.Red;
}
}




}
}




Not: Timer ın invertal değerine random dediğim zaman uygulama istediğim gibi çalışıyor ama böyleyken farklı değişkenlerle farklı timerlarda atadığım rastgele değerler niye hep aynı oluyor kafama takıldı yardım lütfen... Teşekkürler





< Bu mesaj bu kişi tarafından değiştirildi converttoint32 -- 24 Aralık 2012; 12:35:17 >

C
13 yıl
Onbaşı

quote:

Orijinalden alıntı: MrOwl

quote:

Orijinalden alıntı: chipagat

quote:

Orijinalden alıntı: MrOwl

quote:

Orijinalden alıntı: chipagat

bir sayı tahmin oyunu progamladım c de dogru sayı dogru yer için +1 dogru sayı yanlış yer için -1 koyacak 4 basamaklı sayılar için ancak -,+l degerler 5,6,7 gibi degerler geliyo napabilirim
edit :

#include <stdio.h>

void diziyeAktar(int sayi,int dizi[]);

int main(void)
{
int gizliSayi[3],tahmin[3],sayi1,sayi2,i,dogruTahmin=0,yanlisTahmin=1;

printf("Gizli Sayiyi Giriniz X=?\n");
scanf("%d",&sayi1);

if(sayi1<1000 || sayi1>9999)
{
printf("Girdi Uygun Degil\n");
return -1;
}

diziyeAktar(sayi1,gizliSayi);

while(sayi1 != sayi2)
{
printf("Tahmininizi Giriniz Y=?\n");
scanf("%d",&sayi2);

if(sayi2<1000 || sayi2>9999)
{
printf("Girdi Uygun Degil\n");
return -1;
}

diziyeAktar(sayi2,tahmin);

for(i=0;i<3;i++)
{
if(gizliSayi == tahmin)
{
dogruTahmin += 1;
}
else if(gizliSayi != tahmin)
{
yanlisTahmin += 1;
}


}
if(sayi1 == sayi2)
{
printf("Tebrikler Sayiyi Buldunuz\n");
scanf("%d",&i); /* programin hemen kapanmasini onler */
return -1;
}
printf("+%d\n",dogruTahmin);
printf("-%d\n",yanlisTahmin);
dogruTahmin = 0;
yanlisTahmin = 1;


}


scanf("%d",&i); /* Derleyici olarak Dev C++ ý kullanarak yazdým bu scanfin amaci programin hemen kapanmasini onlemek */

return 0;



}


/* Bu fonksiyon gelen integer sayiyi uzunluðu 4 olan bir boyutlu bir diziye atar */

void diziyeAktar(int sayi,int dizi[])
{
int temp=0,bolen=10,i=0,carpan=1;



for(i=0;i<4;i++)
{
temp = (sayi%bolen) / carpan;
sayi = sayi - (temp*carpan);
dizi[3-i] = temp;
bolen *= 10;
carpan *= 10;
}





}

Bu oyunu çok severim, çocukluğumdan beri hala daha oynarım :) Her basamak için olanını yazmıştım(seçenekli değil, algoritma otomatik olarak ayarlıyor). Yarın müsait vaktim olursa paylaşacağım.

bir arkadaş else yerine else if kullan dedi ama zaten else if li problem başka bi yerde ama bulamadım bi turlu

Bir şey fark etmiyor ki else, else if. Sadece yapıları farklı. Aynı işlemleri ikisiyle de yaparsınız.

Sorunuza gelince, bugün cevaplayacağım.

Ek: Yalnız gizli sayı girdisini bizim girmemizin bir anlamı yok. Random fonksiyonu ile PC'ye seçtirelim.

odevi verdim çalışmayan haliyle ama merak ediyourm

bir de istenen kendi sayımızdı ama random olması daha iyi olur :D


Bu mesaja 2 cevap geldi.
P
13 yıl
Teğmen

Arkadaşlar bana bir atın ya şurada bir sıkıntı var

private void bağlantı (object b)
{
IRDPSRAPIAttendee a = b;

Bu hata kodu b nin altı kırmızı ile çizili

Cannot implicitly convert type 'object' to 'RDPCOMAPILib.IRDPSRAPIAttendee'. An explicit conversion exists (are you missing a cast?)


Bu mesaja 1 cevap geldi.
G
13 yıl
Yüzbaşı

quote:

Orijinalden alıntı: PrensDestan007

Arkadaşlar bana bir atın ya şurada bir sıkıntı var

private void bağlantı (object b)
{
IRDPSRAPIAttendee a = b;

Bu hata kodu b nin altı kırmızı ile çizili

Cannot implicitly convert type 'object' to 'RDPCOMAPILib.IRDPSRAPIAttendee'. An explicit conversion exists (are you missing a cast?)


object ile IRDPSRAPIAttendee ayni sey degil diyor. Gizliden gizliye ben otomatik cast yapamam bu veri tipleri icin diyor.

Eger ki kabul ederse IRDPSRAPIAttendee a = (IRDPSRAPIAttendee) b; gibi birsey istiyor. Tabi bu duruma gore (koddaki yapilara gore) degisebilir. static dynamic cast gerekebilir duruma gore. Veya birsey yanlis yapiliyor olabilir, bunlari gercekte hic kast etmemen de gerekiyor olabilir.



M
13 yıl
Yüzbaşı

quote:

Orijinalden alıntı: chipagat

quote:

Orijinalden alıntı: MrOwl

quote:

Orijinalden alıntı: chipagat

quote:

Orijinalden alıntı: MrOwl

quote:

Orijinalden alıntı: chipagat

bir sayı tahmin oyunu progamladım c de dogru sayı dogru yer için +1 dogru sayı yanlış yer için -1 koyacak 4 basamaklı sayılar için ancak -,+l degerler 5,6,7 gibi degerler geliyo napabilirim
edit :

#include <stdio.h>

void diziyeAktar(int sayi,int dizi[]);

int main(void)
{
int gizliSayi[3],tahmin[3],sayi1,sayi2,i,dogruTahmin=0,yanlisTahmin=1;

printf("Gizli Sayiyi Giriniz X=?\n");
scanf("%d",&sayi1);

if(sayi1<1000 || sayi1>9999)
{
printf("Girdi Uygun Degil\n");
return -1;
}

diziyeAktar(sayi1,gizliSayi);

while(sayi1 != sayi2)
{
printf("Tahmininizi Giriniz Y=?\n");
scanf("%d",&sayi2);

if(sayi2<1000 || sayi2>9999)
{
printf("Girdi Uygun Degil\n");
return -1;
}

diziyeAktar(sayi2,tahmin);

for(i=0;i<3;i++)
{
if(gizliSayi == tahmin)
{
dogruTahmin += 1;
}
else if(gizliSayi != tahmin)
{
yanlisTahmin += 1;
}


}
if(sayi1 == sayi2)
{
printf("Tebrikler Sayiyi Buldunuz\n");
scanf("%d",&i); /* programin hemen kapanmasini onler */
return -1;
}
printf("+%d\n",dogruTahmin);
printf("-%d\n",yanlisTahmin);
dogruTahmin = 0;
yanlisTahmin = 1;


}


scanf("%d",&i); /* Derleyici olarak Dev C++ ý kullanarak yazdým bu scanfin amaci programin hemen kapanmasini onlemek */

return 0;



}


/* Bu fonksiyon gelen integer sayiyi uzunluðu 4 olan bir boyutlu bir diziye atar */

void diziyeAktar(int sayi,int dizi[])
{
int temp=0,bolen=10,i=0,carpan=1;



for(i=0;i<4;i++)
{
temp = (sayi%bolen) / carpan;
sayi = sayi - (temp*carpan);
dizi[3-i] = temp;
bolen *= 10;
carpan *= 10;
}





}

Bu oyunu çok severim, çocukluğumdan beri hala daha oynarım :) Her basamak için olanını yazmıştım(seçenekli değil, algoritma otomatik olarak ayarlıyor). Yarın müsait vaktim olursa paylaşacağım.

bir arkadaş else yerine else if kullan dedi ama zaten else if li problem başka bi yerde ama bulamadım bi turlu

Bir şey fark etmiyor ki else, else if. Sadece yapıları farklı. Aynı işlemleri ikisiyle de yaparsınız.

Sorunuza gelince, bugün cevaplayacağım.

Ek: Yalnız gizli sayı girdisini bizim girmemizin bir anlamı yok. Random fonksiyonu ile PC'ye seçtirelim.

odevi verdim çalışmayan haliyle ama merak ediyourm

bir de istenen kendi sayımızdı ama random olması daha iyi olur :D

Dosyayı bulamadım tekrardan yazacağım. Grip geçsin, bu baş ağrısıyla bir şeyler yapamıyorum. Pseuducode ları ekleyeyim, yazacağım bugün dedim. Boş geçmek istemiyorum.

Aşağıda sayının basamaklara ayırma işlemi var. Gizli sayıya bu işlemi yapıp bir diziye aktarıyoruz. Tahmini sayıya da her girişte bu işlemi yapıp onu da bir diziye aktarıyoruz. Ve bu iki dizi elemanları arasında kıyaslama yapıyoruz. Eğer dizinin aynı basamağındaki elemanlar aynı ise artılara bir değer ekliyor, eğer dizinin bir basamağındaki eleman diğer basamağındaki elemanlarla aynı ise eksilere bir ekliyoruz(tercihe göre çıkartadabilirsin, ben artı yaptıydım değeri gösterirken -%d şeklinde print ediyordum).


//a= basamak sayısı-1 için: 

for(i=0;i<=a;i++)
{
gb[i]=gizli_sayi%10; // Burada elde ettiğimiz sonuç sayının en son rakamı
gizli_sayi=gizli_sayi/10; // Sayıdan bir basamak atıyoruz ve sonraki mod işleminde sondaki rakamı alıyoruz
}

// Yukarıda yapılan işlem 1234 sayısı için:
// 1234%10=4 dizi[0}=4;
// 1234/10=123 * küsürat alınmıyor int tipi olduğu için, bundan faydalanıyoruz
// 123%10=3 dizi[1]=3;
// 123/10=12
// 12%10=2 dizi[2]=2;
// 12/10=1
// 1 dizi[3]


Bu oyunda şöyle bir olay var. Rakamları farklı veya aynı olma durumu. Buna göre farklı algoritma yazalım, bendeki rakamları farklı için olandı fakat bulamadım. Ona göre karşılaştırmaları da algoritma haline dökeriz. Eğer basamak sayısı kişinin tercihine göre belirlenecekse algoritma halinde yapılmalı misal:

//gsb[i] gizli sayının basamaklarını tutan dizi, tsk[i] tahmin edilen sayının basamaklarını tutan dizi olsun. 
//a yine basamak sayısı-1 için:

for(i=0;i<=a;i++)
{
if(gsb[i]==tsk[i])
artı++;
}



Gibi... Burada da ek olarak

if(gsb==tsk[i+1])

gibi bir ifade ekleyebiliriz. Burada sorun bunu bir döngüye halletmek. Basamak sayısının kullanıcı tercihine göre belirlenmesi olayı biraz sıkıntıya sokuyor. Halledilemeyecek bir şey değil elbette, imkan olursa yarın onu da ekleyeceğim :)

Keşke yetişmesi gerektiğine dikkat etseydim, hasta masta daha iyi sonuç verirdik.


Bu mesaja 1 cevap geldi.
_
13 yıl
Er

Programdaki hatayi cozemedim yardim edecek birisi olursa sevinirim ..

#include <stdio.h>
#include <conio.h>

float faktoriyel(int x)
{
int y;
float z=1;
for(y=1 ;y<=z ;y++)
z *= y;
return z;
}
void main(void)
{
int n,r;
float f1,f2,f3,sonuc;
printf("n =");
scanf("%d",&n);
printf("r =");
scanf("%d",&r);
f1 = faktoriyel(n);
f2 = faktoriyel(r);
f3 = faktoriyel(n-r);
sonuc = f1/(f2*f3);
printf("\nsonuc =%0.2f\n\n",sonuc);
system("PAUSE");
return 0;
}


Bu mesaja 1 cevap geldi.
C
13 yıl
Yüzbaşı

quote:

Orijinalden alıntı: _JamesCarter_

Programdaki hatayi cozemedim yardim edecek birisi olursa sevinirim ..

#include <stdio.h>
#include <conio.h>

float faktoriyel(int x)
{
int y;
float z=1;
for(y=1 ;y<=z ;y++)
z *= y;
return z;
}
void main(void)
{
int n,r;
float f1,f2,f3,sonuc;
printf("n =");
scanf("%d",&n);
printf("r =");
scanf("%d",&r);
f1 = faktoriyel(n);
f2 = faktoriyel(r);
f3 = faktoriyel(n-r);
sonuc = f1/(f2*f3);
printf("\nsonuc =%0.2f\n\n",sonuc);
system("PAUSE");
return 0;
}


main in return türü void ama programın sonunda return 0; var.
"void main(void)" satırını "int main(void)" ile değiştir.

system("PAUSE"); kullanabilmen için #include <stdlib.h> eklemen gerekir. Sen #include <conio.h> eklemişsin burada da getch() ı kullanabilirsin aynı iş için.
"system("PAUSE");" satırını "getch();" ile değiştir.


Bu mesaja 1 cevap geldi.