Pseudojuhuarvud Pseudojuhuarvu tekitamine Vajalik teek stdlib h Juhuarvu
Pseudo-juhuarvud
Pseudo-juhuarvu tekitamine • Vajalik teek: <stdlib. h> • Juhuarvu genereerimine: rand() funktsioon • Funktsioon tagastab juhusliku arvu • Tagastus on täisarvuline (int) • Arv on vahemikus 0 … RAND_MAX (see #define on pärit stdlib. h teegist!) • Juhuarvu vahemiku piiramine tuleb teha läbi matemaatiliste tehete! • Leiame juhuarvu vahemikus 0 … 9 rand() % 10 2019 Risto Heinsar 2
Näide: pseudo-juhuarvu saamine #include <stdio. h> #include <stdlib. h> int main(void) { int juhu. Arv; printf("Juhuarvude vahemik 0 … %dn", RAND_MAX); // ainult informatiivne! juhu. Arv = rand(); // käivitame juhuarvu funktsiooni, salvestame muutujasse printf("Sain: %dn", juhu. Arv); // kuvame arvu, mis rand() meile tagastas läbi muutuja printf("Sain: %dn", rand()); // kuvame veel ühe arvu, mis rand() tagastab printf("Sain: %dn", rand() % 10); // Leiame arvu vahemikus 0 - 9 return 0; } 2019 Risto Heinsar 3
Ajast sõltuma panek • Vajalik teek: <time. h> • Seemne tekitamine (random seed): srand() • • Parameetrina tuleb kaasa anda märgita täisarv (unsigned int) Ühesuguse seemnega saame iga kord samu vastuseid (samal platvormil) Ära kutsu välja korduvalt kui selleks pole head põhjust Ei ole kohustuslik • srand(time(NULL)) • Määrame seemne lähtuvalt hetke kellaajast • Ajast sõltuv seeme muutub korra sekundis – ära kasuta tsüklist (vt unix time) 2019 Risto Heinsar 4
Näide: Ajast sõltuv pseudo-juhuarv #include <stdio. h> #include <stdlib. h> #include <time. h> int main(void) { srand(time(NULL)); // seeme paika, seda teeme vaid ühe korra int juhu. Arv; printf("Juhuarvude vahemik 0 … %dn", RAND_MAX); // ainult informatiivne! juhu. Arv = rand(); // käivitame juhuarvu funktsiooni, salvestame muutujasse printf("Sain: %dn", juhu. Arv); // kuvame arvu, mis rand() meile tagastas läbi muutuja printf("Sain: %dn", rand()); // kuvame veel ühe arvu, mis rand() tagastab printf("Sain: %dn", rand() % 10); // Leiame arvu vahemikus 0 – 9 return 0; } 2019 Risto Heinsar 5
Tunnitöö: loto • Programm genereerib juhuslikult 10 võidunumbrit • Võidunumbrid võivad olla vahemikus 1 … 25 • Kasutajalt küsitakse 6 arvu (tuleb kasutada voo suunamist) • Programm peab • Kuvama genereeritud võidunumbrit • Kontrollima ja väljastama mitu võidunumbrit kattusid kasutaja lotonumbritega • Kui kõik 6 kattusid: õnnitle peavõidu korral • Kui ükski ei kattunud: avalda kaastunnet 2019 Risto Heinsar 6
Tunnitöö: näide ja vihjed • Arvud salvesta kahte massiivi sobilike pikkustega. Pikkuste jaoks kasuta #define • Programmi testimiseks võid kasutada srand() tühjade sulgude või kindla numbriga – nii saad iga kord samad arvud • Kui lotonumber osutub võidunumbriks, alusta järgmise lotonumbri otsimist 2019 Risto Heinsar 7
Edasijõudnutele: • Edasijõudnutele 1: • Programm peab garanteerima, et kasutaja sisestatud numbrid ja genereeritud numbrid ei saa korduda • Edasijõudnutele 2: • Paiguta sisendfaili mitu lotopiletit • Tee nii, et su programm suudaks kontrollida kõiki vooga suunatud failis leiduvaid lotopileteid • Võidunumbrid peavad jääma samaks 2019 Risto Heinsar 8
- Slides: 8