1. Juhuslike arvude genereerimine C-keeles: rand funktsioon
1.1 Mis on rand funktsioon?
rand()
funktsioon on C-keeles kasutatav funktsioon, mis genereerib pseudojuhuslikke arve. Pseudojuhuslikud arvud on numbrijadad, mis luuakse eelnevalt määratud algoritmi alusel – need ei ole päris juhuslikud, kuid sobivad enamikel juhtudel. rand()
tagastab täisarvu vahemikus 0 kuni 32767 . See vahemik võib sõltuvalt süsteemist erineda, kuid tavaliselt on see selline.
1.2 Kuidas rand funktsiooni kasutada
Et kasutada rand()
funktsiooni, tuleb kaasata stdlib.h
. Allolev näide näitab, kuidas rand()
abil juhuslikku arvu genereerida.
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int randomNumber = rand();
printf("Generated random number: %d
", randomNumber);
return 0;
}
Selle koodi käivitamisel kuvatakse juhuslik arv vahemikus 0 kuni 32767. Siiski on üks puudus – kood genereerib iga kord sama arvu. Sellele probleemile pöördume hiljem tagasi.

2. Kuidas määrata juhuslike arvude vahemikku
2.1 Vahemiku piiramine jäägi abil
Juhuslike arvude genereerimisel on sageli vaja, et väärtus jääks kindlasse vahemikku. Näiteks kui soovid genereerida arvu vahemikus 1 kuni 100, saab rand()
funktsiooni väljundit piirata jäägioperaatori %
abil.
int numberInRange = rand() % 100 + 1; // Genereerib juhusliku arvu vahemikus 1 kuni 100
Selles näites võetakse rand()
tulemuse jääk jagamisel 100-ga ja lisatakse 1, et saada arv vahemikus 1 kuni 100. Jäägioperaatori kasutamine võimaldab lihtsalt luua juhuslikke arve soovitud vahemikus.
2.2 Juhusliku arvu genereerimine kindlas vahemikus
Kui soovid rohkem paindlikkust vahemiku määramisel, võid luua funktsiooni, mis võtab minimaalse ja maksimaalse väärtuse parameetritena ning tagastab vastava juhusliku arvu. Allolev näide näitab, kuidas seda teha.
int getRandomNumber(int min, int max) {
return rand() % (max - min + 1) + min;
}
Selle funktsiooni abil saad luua juhuslikke arve näiteks nii: getRandomNumber(1, 100)
, mis tagastab arvu vahemikus 1 kuni 100.
3. Muuda juhuslike arvude mustrit srand funktsiooniga
3.1 Mis on srand funktsioon?
Kui kasutada rand()
funktsiooni ilma täiendava seadistuseta, siis iga programmi käivitamisel genereeritakse sama juhuslike arvude jada. See on pseudojuhuslike arvude omadus – kasulik silumisel, kuid ebapraktiline, kui on vaja päriselt erinevaid väärtusi. Selle lahendamiseks kasutatakse srand()
funktsiooni, mis määrab juhuslike arvude algseemne (seed) ja muudab sellega genereeritavat mustrit.
3.2 Kuidas kasutada srand funktsiooni
srand()
funktsioon tuleks kutsuda välja enne rand()
funktsiooni, et määrata seemneväärtus. Tavaliselt kasutatakse selleks hetkeaega, kasutades srand((unsigned int)time(NULL))
.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void) {
srand((unsigned int)time(NULL)); // Määrab seemne praeguse aja põhjal
int randomNumber = rand();
printf("Generated random number: %d
", randomNumber);
return 0;
}
Selle koodi puhul genereeritakse srand()
abil iga kord erinev juhuslike arvude jada. time(NULL)
tagastab praeguse aja sekundites, mis tagab iga käivitamisel erineva seemne.

4. Näiteid juhuslike arvude kasutamisest
4.1 Juhuslike arvude kasutamine mängudes
Juhuslikke arve kasutatakse mängude arendamisel väga sageli. Näiteks saab nendega määrata tegelaste juhuslikke asukohti või eseme ilmumise tõenäosusi. Allpool on näide, mis simuleerib täringu veeretamist.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void) {
srand((unsigned int)time(NULL)); // Määrab seemne
int diceRoll = rand() % 6 + 1; // Genereerib arvu vahemikus 1 kuni 6
printf("Dice roll: %d
", diceRoll);
return 0;
}
See programm genereerib juhusliku arvu vahemikus 1 kuni 6 ja kuvab selle täringu tulemuse kujul. Juhuslike arvude kasutamine võimaldab lisada mängudele ettearvamatust ja mitmekesisust.
4.2 Monte Carlo meetodi simulatsioon
Juhuslikke arve kasutatakse ka Monte Carlo meetodil põhinevates simulatsioonides. Monte Carlo meetod on tehnika, mis kasutab juhuslikkust, et leida ligikaudne lahendus probleemidele, mida on analüütiliselt raske lahendada. Näiteks saab selle abil ligikaudselt arvutada pii väärtust.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void) {
int n_trials = 1000000;
int n_inside = 0;
double x, y, pi;
srand((unsigned int)time(NULL));
for (int i = 0; i < n_trials; i++) {
x = (double)rand() / RAND_MAX;
y = (double)rand() / RAND_MAX;
if (x * x + y * y <= 1) {
n_inside++;
}
}
pi = 4.0 * n_inside / n_trials;
printf("Approximated π: %f
", pi);
return 0;
}
See programm kasutab Monte Carlo meetodit, et ligikaudselt arvutada pii väärtust, genereerides suvalisi punkte vahemikus 0 kuni 1 ja mõõtes nende paiknemist ühikringa sees. rand()
funktsiooniga saadakse 0 kuni 1 vahemikus olevad arvud ja nendega hinnatakse ringi pindala.

5. Tähelepanekuid rand ja srand funktsioonide kasutamisel
5.1 Pseudojuhuslike arvude mõistmine
C-keeles rand()
funktsiooniga genereeritud arvud on pseudojuhuslikud – need ei ole tõeliselt juhuslikud, vaid põhinevad sisemisel algoritmil. Kui kasutada sama seemneväärtust, saadakse alati sama arvujada. See omadus on kasulik silumisel, kuid ei sobi, kui on vaja täielikku juhuslikkust.
5.2 Levinud vead
Juhuslike arvude kasutamisel tehakse sageli järgmisi vigu: srand()
funktsiooni mitte kasutamine või rand()
funktsiooni vahemiku mõistmise puudumine. Kui srand()
funktsiooni ei kasutata enne rand()
funktsiooni, siis saadakse iga kord sama arvujada. Samuti tuleb olla ettevaatlik rand() % n
kasutamisel – kui n
ei ole valitud õigesti, võib tulemus erineda oodatust.
Kokkuvõte
Juhuslike arvude genereerimine C-keeles on kasulik paljudes valdkondades, nagu mänguarendus ja simulatsioonid. Mõistes, kuidas rand()
ja srand()
funktsioonid töötavad, saab luua programme, mis sisaldavad ettearvamatuid ja dünaamilisi elemente. Kasuta selles artiklis toodud näiteid ja teadmisi, et katsetada juhuslikkuse rakendamist oma C-programmides.