Rastgele zar atma

Başlatan Nirvana4, 13 Ocak 2016 - 21:06:15

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

Nirvana4

Merhaba arkadaşlar. Rastgele zar atmak sistemi yazmak istedim ama garip bir sıkıntısı var
kod :
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main(){
printf("******************RASGTELE ZAR******************");
int sayi;
printf("\nAtılmasını istediğiniz zar sayısını giriniz.\n"); //istenen zar sayısı
scanf ("%i",&sayi);

bool bitti = false; //tüm zarların eşit olup olmadığını kontrol eden değişken
while (bitti=false){
int var[sayi]; // zarların depolandığı yer
for (int b=0; b<sayi;b++){ // rastgele zar değeri oluşturma
int r = random() %7;
printf("%i",r);
var[b] = r;
}
for (int sahte = 0; sahte<sayi;sahte++){ //tüm değerler birbirine eşit mi diye kontrol et
for (int sahte2=sahte+1;sahte2<sayi;sahte2++){
if (var[sahte]==var[sahte2]){ //eşitse bitir
bitti=true;
}
}
}
printf("\n");
return 0;
}
}


yapmak istediğim şey şu;
Kullanıcıya kaç zar atması istediği sorulacak. Kaç zar seçerse o kadar zar yan yana atılacak ve tüm zarlar birbirine eşit gelene kadar devam edecek. Nasıl yapabilirim?

ShangriLa

bool bitti = false;
C'de bool turu yoktur.

while (bitti=false)
Her while dongusunde bitti yi false'e esitliyorsun, bu dongu sonsuza kadar calisir.

int var[sayi];
C de dinamik olarak bu sekilde bellek ayiramazsin.
Ubuntu Mate Trusty

7hr33l3t73r

Alıntı yapılan: ShangriLa - 13 Ocak 2016 - 22:19:42
bool bitti = false;
C'de bool turu yoktur.
man stdbool.h
Biraz daha acabilirmisin!
dc -e '[q]sa[ln0=aln256%Pln256/snlbx]sb207356256404211981204295703670388snlbxq'
https://www.getgnu.org/gnulinux/gnulinux-ipuclari/nasil-akillica-soru-sorulur.html

ShangriLa

#3
Alıntı yapılan: 8100d1r0n - 13 Ocak 2016 - 22:47:05
Biraz daha acabilirmisin!
O header c99 ile birlikte eklendi. gcc 5.2 sürümüne kadar varsayilan olarak gnu89 (c89 standarti ve gnu eklentileri) dialectini kullaniyordu. Artık c11 standart, yine de ben aliskin olmadigimdan bool kullanmiyorum diyelim :-)

edit: s/c90/c99/
Ubuntu Mate Trusty

Reverser

Oooo bu konu uzar gider, C üzerinde ben de bool kullanıyorum. En azından pratikte işe yarıyor Debug kısmında biraz daha farklı olabilir tabii.


/* (>-_-)> BOOLEAN <(-_-<) */
typedef int bool;
#define true 1
#define false 0

XFCE ROCKS !
Powered by Thunar & XFWM4



7hr33l3t73r

Alıntı yapılan: ShangriLa - 13 Ocak 2016 - 23:38:59
Alıntı yapılan: 8100d1r0n - 13 Ocak 2016 - 22:47:05
Biraz daha acabilirmisin!
O header c90 ile birlikte eklendi. gcc 5.2 sürümüne kadar varsayilan olarak gnu89 (c89 standarti ve gnu eklentileri) dialectini kullaniyordu. Artık c11 standart, yine de ben aliskin olmadigimdan bool kullanmiyorum diyelim :-)
Ben mi? yanlis hatirliyorum.C99 olmasin!
Biz kullanabiliriz o zaman. :)
dc -e '[q]sa[ln0=aln256%Pln256/snlbx]sb207356256404211981204295703670388snlbxq'
https://www.getgnu.org/gnulinux/gnulinux-ipuclari/nasil-akillica-soru-sorulur.html

ShangriLa

Ha c99 diyecektim 9 basmamis :p

Ayrica sunu da belirteyim gcc 5.2 de varsayilan dialect her ne kadar c11 olsa da, Debian ve tum turevlerinde hala varsayilan standart c89.

c89 da bool yoktur yani (cevir kazi yanmasin haha):D
Ubuntu Mate Trusty

Nirvana4

Alıntı yapılan: ShangriLa - 13 Ocak 2016 - 22:19:42
bool bitti = false;
C'de bool turu yoktur.

while (bitti=false)
Her while dongusunde bitti yi false'e esitliyorsun, bu dongu sonsuza kadar calisir.

int var[sayi];
C de dinamik olarak bu sekilde bellek ayiramazsin.

for (int sahte = 0; sahte<sayi;sahte++){ //tüm değerler birbirine eşit mi diye kontrol et
for (int sahte2=sahte+1;sahte2<sayi;sahte2++){
if (var[sahte]==var[sahte2]){ //eşitse bitir
bitti=true;
}
}


burda bitti'yi true ya eşitlemiştim. Neden sonsuza dek gidiyor ki?
Belleği nasıl ayırlamıydım?

bugra9

= işareti atama operatörü, == işareti karşılaştırma operatörüdür.
Sizin asıl yapmak istediğinizi while (bitti == false) yazarak karşılaştırma ile yapmalısınız.
while (bitti=false) yazdığınızda her döngü öncesi bitti değişkenine false atamak isteyecek ve bunu her defasında başaracağı için her seferinde sonsuz döngüye girecek.