Tam Sürümünü Görmek İçin : rand() fonksiyonunda aynı değeri bir daha atamama
================================================== ================
#include <stdio.h>
#include <time.h>
int main()
{
int x,y;
srand(time(NULL));
x=rand()%50;
y=rand()%10;
printf("(%d,%d)\n", x,y);
return 0;
}
================================================== ================
bu kodu çalıştırdığımda, örneğin (35,4) ikilisinin karşıma bir kez çıkmasını, değerler tükenince de programdan çıkmayı istiyorum. bunun bir fonksiyonu var mıdır acaba?
veya çıkan her değeri bir array'in içine atıp yeni gelen her değer için o array'le karşılaştırma mı yapmalıyım?
ne yapmalı
ne etmeli
yardımlarınızı bekliyorum. Sevgiler, saygılar.
Array tanımlamalısın.:)
#include <stdio.h>
#include <time.h>
int main()
{
int x,y;
bool el[50,10];
srand(time(NULL));
x=rand()%50;
y=rand()%10;
for (int a=0;a<500;a++)
{
while (el[x][y]>0])
{
x=rand()%50;
y=rand()%10;
}
el[x][y]=1;
printf("(%d,%d)\n", x,y);
}
return 0;
}
çok teşekkür ederim :) anladığım kadarıyla boş bir arrayde sayılar atandıkça atandığı koordinatlar 1 oluyor.
bunu neden istedim peki?
olay şu:
( kız arkadaşımın bana dönmesi için :D )
quasimodo
03/01/2008, 17:25
bool el[50,10];
Bu sekilde matris tanimlanabiliyor mu? Ilk defa goruyorumda.
o bool boolean'ın bool'u sanırım. kullanım şekli o olsa gerek
acehreli
03/01/2008, 20:49
-aga-'nin o kodu derledigini sanmiyorum. :) Derlense bile surada bir tanimsiz davranis var:
while (el[x][y]>0)
Orada ilk degeri verilmemis bir nesneye erisilmeye calisiliyor.
choldax, rand() islevi cekirdek degere bagli olarak hep ayni sayi dizisini uretir. Eger belirli bir degerin ilk olarak cikmasini istiyorsan, srand'i time'in dOndurdugu degerle degil; kendi sectigin bir degerle cagir. Eger rand istedigin sayiyi verdiyse iyi... Yoksa srand icin baska bir deger kullan. Boylece istedigin ilk sayiyi (ve eger sansliysan ikinci sayiyi) belirleyebilirsin.
Ali
-aga-'nın algoritması işime yaradı şöyle ki,
int a[3][3] = {0} //3x3'lük bir array açıp içindeki tüm sayıları 0'a eşitliyorum
int x,y;
x=rand()%3;
y=rand()%3;
while(a[x][y]>0)
{...}
ile şu anlatılıyor; bu array şu şekilde
0 0 0
0 0 0
0 0 0
diyelim rastgele 1,2 geldi. şu şekle bürünecek
0 0 0
0 0 1
0 0 0
böylece bir daha 1,2 gelirse array'in o değeri 1 olduğundan yeni sayılar arayacak.
En azından anladığım bu :)
Saygılar
arkadaşlar aklım hep basic'e gidiyor.O yüzden değer vermemişim. Ama mantık zaten basit. Choldax ta bunu anlamış ve doğru şekilde düzeltmiş.:)
Bool şeklinde array tanımlanabilir mi bilmiyorum,ama bool ün diğer veri tiplerinden ne farkı var ki?
choldax (http://forum.ceviz.net/member.php?u=89076) seni paylasimci olmaya davet ediyorum kaynak koddan bahsediyorum;)
myavuzselim
04/01/2008, 16:53
-aga-'nin algoritmasi elemanlar arttikca son derece yavas calisacaktir. 1 milyon elemanli bir dizinin bu sekilde son elemanini rastgele bulmaya calistiginizi dusunun.
Bunun yerine once diziyi karistirip sonra sirayla elemanlara ulasmak daha dogru bir yontem. Dizi sabit kalmali ise bir index dizisi olusturup onu karabilirsiniz.
Ornek:
#include <stdlib.h>
#include <time.h>
#include <assert.h>
#include <stdio.h>
/* http://www.codinghorror.com/blog/archives/001008.html */
void karistir(int* arr, int size) {
int i;
for (i = size-1; i > 0; i--) {
int n = rand() % (i + 1); /* cok iyi bir yontem olmasa da */
int temp = arr[i];
arr[i] = arr[n];
arr[n] = temp;
}
}
int *newAralik(int bas, int son) {
int *arr;
int i;
int size;
assert(bas >= 0 && son >= bas);
size = son - bas;
arr = (int*) malloc(size * sizeof(int));
for (i=0; i<size; i++)
arr[i] = bas + i;
return arr;
}
int main() {
int x_size = 50, y_size = 10;
int *indices = newAralik(0, x_size * y_size);
int i;
karistir(indices, x_size * y_size);
for (i=0; i < x_size*y_size; i++) {
int x = indices[i] % x_size;
int y = indices[i] / x_size;
printf("(%d, %d)\n", x, y);
}
free(indices);
}
kodu göndermem ama buraya algoritmayı yazarım :)
2 boyutlu char array'i aç. Bütün array'e 'a' ata. Harflerin koordinatlarını belirle, oralara da ' ' ata. Daha sonra tüm array'i random şekilde gez. Eğer gezdiğin koordinat 'a' ise oraya char değeri 3 olan karakter ata. Daha sonra yukardaki kodu uygula
:)
benim yapacağım yeni kod, harflerin fonksiyonunu yazmak. Mesela A() yazınca direk A harfi çıkacak. Böylece çok uzun olmayan isimler bu şekilde yazılabilecek. Onun programını buraya koyabilirim işte :)
saygılar efendim
Forum Yazılımı : vBulletin v3.6.8, Copyright ©2000-2008, Jelsoft Enterprises Ltd.