Avatar billede emileej Nybegynder
18. juni 2001 - 21:36 Der er 12 kommentarer og
1 løsning

randomize(); og random(); skoder!

Jeg har et array jeg skal have fyldt med tilfældige tal imellem 0 og 199.
Det gør jeg i en for løkke, hvor jeg ved løkke start kalder randomize(); og så ellers siger array[i]=random(200) - det virker bare ikke - alle array elementerne får det samme tal (som godt nok er tilfældigt)!

Hvad sker der for den?!
E-)mil
htt://eej.dk
http://fotx.net/emileej
Avatar billede erikjacobsen Ekspert
18. juni 2001 - 21:39 #1
Det skal du ikke. Du skal sige randomize() én gang, og absolut kun én gang i
hvert program. Ellers får du nemlig typisk samme tal.
Avatar billede stigc Nybegynder
18. juni 2001 - 21:39 #2
du gør det vel ikke inde i løkken?
Avatar billede perla Nybegynder
18. juni 2001 - 21:47 #3
Prøv dette istedet

randomize();
for (i=1;i++;i<100)
{
  array[i]=random(200);
}
Avatar billede henrik242 Nybegynder
18. juni 2001 - 22:08 #4
>>perla...

du mener vel:
randomize();
for (i=1; i<100; i++)
{
  array[i]=random(200);
}
Avatar billede perla Nybegynder
18. juni 2001 - 22:11 #5
Ja selfølgelig :-) *LOL*
Avatar billede stigc Nybegynder
18. juni 2001 - 23:04 #6
i mener selvfølgelig:


for (int i=0; i<100; i++)
{
  array[i]=random(200);
}

:)
Avatar billede henrik242 Nybegynder
18. juni 2001 - 23:10 #7
stræber!

:-)
Avatar billede perla Nybegynder
18. juni 2001 - 23:13 #8
Ikke nødvendigvis, men det er klart at jo længere væk randomize kommer fra løkken, jo større spredning (håber jeg da :-) )

Avatar billede erikjacobsen Ekspert
18. juni 2001 - 23:18 #9
Nej, perla. Lad os lige tage en lektion i tilfældige tal. Random() laver ikke
tilfældige tal, bare nogle der ligner, og det er godt nok i mange tilfælde.

Randomize() aflæse antal millisekunder siden sidste supernova-eksplosion
(eller hvad det nu er...) og laver et start-sted i den næsten-tilfældige række.
Kalder man Randomize() i en for-løkke, mange gange, får man det samme antal
millisekunder i hvert kald - oftest - og derfor samme start-sted.

Det er ligegyldigt hvor Randomize() bliver kaldt, blot det sker én gang præcist
i hvert program, for så får man sådan til almindeligt dagligt brug næsten-tilfældige
tal. Rigtige tilfældige tal er faktisk dyre at fremskaffe, for man skal f.eks. have
et lille apparat der måler det radioaktive henfald for en klump uran, og så måler man
det tilfældige (rigtigt tilfældige) tidsrum mellem 2 klik på en geigertæller, og så har
man en enkelt bit (eller et par stykker). Men det er en helt anden sag.
Avatar billede perla Nybegynder
18. juni 2001 - 23:29 #10
Ja, netop. Har været udefor at den blev det samme hver gang fordi eksekveringen af programmet tog nøjagtigt lige lang tid hver gang. Jo flere kode linier jo mindre risiko for denne situation. Men det kommer selfølgelig an på randomize funktionens implementering :-)
Avatar billede emileej Nybegynder
19. juni 2001 - 07:52 #11
Jubii! Nu virker det :)
Jeg kalder randomize i mit vindues constructor, og det fungerer perfekt =)
Så blev man jo også lidt klogere *gg*

E-)mil
http://eej.dk
http://fotx.net/emileej
Avatar billede erikjacobsen Ekspert
19. juni 2001 - 08:03 #12
Forøvrigt, perla, kalder man *ikke* randomize() får man netop de samme
næsten-tilfældig tal hver gang. Mon ikke det skete for dig. Det er faktisk alletiders
mens man aftester, altså at man har de samme tal, for så kan man gentage en
kørsel med random().
Avatar billede mickni33 Nybegynder
20. juni 2001 - 16:22 #13
skulle lige til at give det samme svar som hardcore erikjacobsen *GG* :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester