Avatar billede nird Nybegynder
02. oktober 2001 - 21:51 Der er 9 kommentarer og
1 løsning

Random()

ar prøvet at lege lidt med rand() og random() i c, men det virker som om det generere det samme tal hver gang jeg kalder programmet. Kan det passe? - og hvordan kan jeg løse det?
Avatar billede mickni33 Nybegynder
02. oktober 2001 - 21:56 #1
har ikke testet men burde virke der tages random af tiden

#include <time.h>
#include <stdlib.h>
#include <iostream.h>

int main(){
srand(time(NULL)); //tager rand af tiden skal kun udføres en gang
int k;
for (int i=0;i<10;i++){
k=rand()%100   
cout<<k<<endl;
}

return 0;
}
Avatar billede nird Nybegynder
02. oktober 2001 - 23:19 #2
Kan ikke finde headerfilen \"iostream.h\"
Avatar billede mickni33 Nybegynder
03. oktober 2001 - 00:03 #3
ååååh det er C du mener jeg har lavet c++.
slet cout<< og iostream.

#include <time.h>
#include <stdlib.h>


int main(){
srand(time(NULL)); //tager rand af tiden skal kun udføres en gang
int k;
for (int i=0;i<10;i++){
k=rand()%100   
print(\"tal nr :\",k); //er det ikke sådan man laver printf ?
}

return 0;
}
Avatar billede mickni33 Nybegynder
03. oktober 2001 - 00:04 #4
sorry
printf(\"tal nr:\",k);
Avatar billede alvion Nybegynder
03. oktober 2001 - 09:05 #5
Det du sikkert mangler i dit program er at kalde funktionen srand(), som mickni33 også har vist.

srand() sætter et \"random seed\", altså et \"frø\" hvorfra alle de tilfældige tal genereres. Hvis dit random seed er sat til det samme hver gang (som det jo er, hvis du ikke har kaldt funktionen) vil du også få den samme talrække hver gang.

Det er smart at kalde srand med time() som parameter, idet du så genererer et random seed, baseret på tiden lige nu i milisekunder. Det er MEGET usansynligt at den samme tid vil blive brugt to gange.
Avatar billede nird Nybegynder
03. oktober 2001 - 15:16 #6
Mange tak!

Det helt rigtige program er:

Har fundet ud af det. Man skal først kalde srand(), der generere en \"tilfældighedsmaskine\" f.eks på baggrund af tiden.

flg. program virker:


#include <time.h>
#include <stdlib.h>


int main(){

int k, i;

srand(time(NULL));
for (i=0;i<10;i++){
k=rand()%100;   
printf(\"tal nr : &d\\n\",k);
}

exit(0)
}


Avatar billede nird Nybegynder
03. oktober 2001 - 18:30 #7
Er der ander måder at at srand() med end time()? For hvis man har to procesor, der kalder srand() samtidigt vil de komme frem til samme tal.
Avatar billede mickni33 Nybegynder
03. oktober 2001 - 23:07 #8
Aaarrrh man kunne forestille sig at srand() målte pr 0.100 af et sekund så det er ikke sandsynligt at de startede på nøjagtige samme tid
Avatar billede alvion Nybegynder
04. oktober 2001 - 09:26 #9
Tja hvis du insisterer...

time() + HINSTANCE

To processer KAN ikke kalde srand() på samme tid (de skiftes jo om cpu\'en), med mindre du har to cpu\'er i maskinen og stadigvæk er det yderst usansynligt.
Avatar billede mickni33 Nybegynder
04. oktober 2001 - 09:41 #10
Ja med en cpu er det fuldstændig umuligt, men med tre clienter der trykker enter samtidigt så , neeej det det kan ikke lade sig gøre, det ville være for usandsynligt
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