> struct timeval t; //är detta en deklaration?
Japp.
> gettimeofday(&t, NULL); //så den är en funktion som har referensen t
> som parameter?
Japp.
> srandom(t.tv_sec); //om t kommer från ovan, var kommer tv_sec ifrån,
> eller är det en fördefinerad funktion?
en struct kan Du se på som en låda med innehåll. tv_sec är en heltalsvariabel i lådan. Skälet att man använder struct's är att man håller samman relaterade data. I detta fall håller struct:en timeval antal sekunder och mikrosekunder för anropet gettimeofday().
> 2. int current_lotto_sequence[NUMBER_LIMIT]; // så du skapar en vektor av
> längden 36, alltså alla talen mellan 0 och 36 ska ligga i den här vektorn?
Nästan. De skall rymma talen 1-36 och för detta använder vi indexen [0-35].
Mina två kodexempel visar på olika algoritmer att lösa problemet. Det ena lagrar de slumpade talen efter hand som de genereras. Det andra exemplet genererar alla möjliga tal och slumpar fram vilka vi skall välja. Olika approach på samma problem.
Man skulle kunna förklara uppbyggnaden och logiken i ord:
Lösning 1) Generera 11 st olika slumptal mellan 1 och 36. Generera ett nummer i taget tills att man fått ett ej redan tidigare genererat nummer.
Lösning 2) Lägg talen 1-36 i en sorterad array (jämför en burk med 36 nummer på bollar). Byt plats på två värden (bollar) med varandra (= skaka burken) godtyckligt antal gånger (t.ex 10000). Tag de 11 första numren (bollarna).
> 3. for (i=0; i<NUMBER_LIMIT; i++) current_lotto_sequence[i] = i+1; //här fyller
> du alltså arrayen med talen 0 till 35?
Nix, 1-36. Notera i stegar från 0-35, vilket ger i+1 = [1-36].
> 4. swap1 = random()% 35; do swap2 = random()% 35; //så du slumpar fram
> två tal och kollar om de är lika så byter du plats på dem, men hur vet du vad
> start värdet är när du har skrivit max värdet till 35?
Nej, jag slumpar fram ett index i vektorn (swap1) som skall ligga mellan 0-35. Därefter slumpar jag fram det andra indexet (swap2) att byta plats med, och gör det dessutom så länge som jag av någon händelse genererat samma tal igen (swap1 == swap2). Det fyller ju ingen funktion att plats 4 i vektorn byter innehåll med plats 4?
> 5. i++; // vilket är det du ökar värdet på, och vad har det för värde?
När man kommit ut ut loopen "for (i=0; i<NUMBER_LIMIT; i++) ..." så är i = NUMBER_LIMIT. Jag sparar detta värde på variabeln i och använder värdet i loopen nedanför.
> 6. while (i<10000); //Varför 10000?
Varför inte? Skulle kunna lägga ett slumpvärde där också. Gränsen går vid hur många gånger man skall byta plats på värdena i array:en, dvs "bollarna"... Så i vårt fall startar vi på 36 och går till 10000, dvs vi skakar burken 9964 ggr. Tillräckligt? Det avgör Du!