PDA

Tam Sürümünü Görmek İçin : c de hangi döngüyü kullanmalıyım


xsee
06/01/2008, 01:17
mrb

ben random fonksiyonuyla 20x20 lik ve tüm elemanları 0 olan bir matrisin elemanlarını birer birer arttirmaya dayali bir ödev üzerinde çalısıyorum
baya bi ilerledim kendimce 20x20 lik matrisı ve tüm elemanlarinı 0 yaptım .
kullanıcıdanda scanf le bir x ve y noktalari aldım bu x ve y yi matris[x][y]=1 dedim de şimdi randomu kurmaya baslayacagim.
random matris[x][y] ini birer kare komsularını sece sece arttşracak ama nasısl randomu kurucam ve hangi döngünün içinde olacak ?
matriste 0 olan eleman kalmadıgını nasıl denetliyecek?
ve random koseye kadar geldiyse ordan sonra 1 er arttirma deil azaltarak ordann cıkacagini yani if--- else denetimlerini nereye koyacagim ?

örnegin

0000
0000
0000
0000

matrisimiz olsun kullanıcıdan bi terimi ilsteyelim oda matris[x][y] olsun onu 1 yapalim mesela

0000
0000
0010
0000

şimdi random bu 1 in cevresindeki ve kendisi de dail 9 terimden birini secip 1 arttircak mesela sol üstü seçmiş olsun

0000
0100
0010
0000

bu şekilde butun 0ları yok edene kadar donecek
takildigim nokta
random u nasıl kurmaliyim ?
if else denetimlerini ( kosedemi kenara mi geldi ) nerede kurmaliyim
ve asil problemim HANGİ DÖNGÜYÜ KULLANMALİYİM ?
benim aklima

do
{
if else denetimleri
random fonk kullanım
}
while ( )
geldi ama burda while nin içinde nasıl matrisi taratip hiç 0 eleman kalmayinca domgüden cık dicek
while içinde for düngüsü kullanılırmı?


choldax
06/01/2008, 01:37
http://forum.ceviz.net/rand-fonksiyonunda-ayni-degeri-bir-daha-atamama-t51715.html

acehreli
06/01/2008, 20:06
xsee, bir yanlis anlama var galiba; cunku "random'i kurmak" bir sey ifade etmiyor.

C kutuphanesinde, <stdlib.h> basliginda bildirilen rand() adinda bir fonksiyon var. Onu cagirdiginda sana rastgele bir sayi uretir. choldax'in gosterdigi gibi bir yontem kullanarak o rastgele sayiyi kendi istedigin bir araliga indirgeyebilirsin. rand() [0,RAND_MAX] araliginda bir sayi uretir; sen onu ornegin [0,19] araligina ingirgeyeceksin. (Bunun yollarindan birisi rand()%20 demektir.)

Sen aslinda bu duzlem icinde hayali bir gezgin yaziyorsun. Sekiz komsu oldugu halde "dokuz" diyorsun. Belki de bazen oldugu yerde duracak.

rand()%9 ile bir davranis belirleyebilirsin. Boylece [0,8] araliginda bir deger elde edersin. Bu degerlerden her birisi bir yon belirleyebilir. Ornegin 1, sol yukari olabilir. Sonra da gidip dizideki o degeri bir arttirirsin.

Isin bitip bitmedigini anlamanin birden fazla yolu olabilir:

1) Her adimda butun diziyi denetleyerek dizide en az bir tane 0 olup olmadigina bakmak

2) Her adimda o adimdaki degerin 0'dan arttirilip arttirilmadigina bakmak. Toplam 400 tane deger olduguna gore, bu is 400 kere olduysa is bitmis demektir

3) ?

Ali

xsee
06/01/2008, 20:50
8 yün fikri çok mantikli geliyo bu gece onu bi deneyeyim çok tşk ler