Avatar billede mansword Nybegynder
11. december 2003 - 13:11 Der er 7 kommentarer og
1 løsning

random tal i C

Hej!

Hvordan får jeg C til at printe et random tal mellem 1 og 6 (altså ligesom en terning, dvs. ikke decimal tal - kun hele tal) ???

Er nybegynder...
Avatar billede arne_v Ekspert
11. december 2003 - 13:20 #1
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
  srand(time(NULL));
  printf("%d\n",rand() % 6 + 1);
  return 0;
}
Avatar billede arne_v Ekspert
11. december 2003 - 13:21 #2
Der er en del finess i pseudo random numbers, men det er ihvertfald en start.
Avatar billede arne_v Ekspert
11. december 2003 - 13:44 #3
Bare til start:

  hvis du vil slå med terningen flere gange skal du kun kalde srand en
  gang selvom du kalder rand flere gange

  ofte vil ((rand() >> 2) % 6 + 1) være mere tilfældig end (rand() % 6 + 1)
Avatar billede coldray Nybegynder
20. september 2007 - 23:30 #4
Arne vil du være så venlig at forklare hvorfor det er tilfældet? Hvordan den nederste sætning kan være "mere tilfældig" end den første?
Avatar billede coldray Nybegynder
20. september 2007 - 23:33 #5
det virker som om at srand-"generatoren" med time-argumentet er meget forudsigeligt i forhold til tiden, man kan se at tallet tiltager "en anelse" for hvert sekund. Findes der en smartere metode? (ved godt det er en gammel tråd det her!)
Avatar billede arne_v Ekspert
21. september 2007 - 00:35 #6
Stort set alle C implementationer bruger en såkaldt LCG algoritme til rand funktionen.

Den er kendt for at være mindre tilfældig i de lave bits end i de høje bits. Derfor
smider man nogle gange nogle af low bits væk.
Avatar billede arne_v Ekspert
21. september 2007 - 00:36 #7
time tæller hele sekunder og ændrer dig derfor kun en gang hvert sekund
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