You are on page 1of 10

Gadījuma skaitļu ģenerators

Gadījuma skaitļu ģenerators


Nepieciešams lai modelēt gadījuma
procesus programmā. Piemēram:

• Dažādu varbūtību aprēķini


• Sistēmu modelēšana
• Datorspēles
Gadījuma skaitļu ģenerators
Kā mēs to izmantosim?

Arvien vairāk parādās programmu kur no


lietotāja jāprasa vairāku skaitļu ievadi, to
vēlākai apstrādei. Lai netērēt uz to laiku
turpmāk ģenerēsim skaitļu masīvus
automātiski.
1.piemērs
Viena skaitļa ģenerācija
1. #include <iostream>
2. using namespace std;
3.
4. int main()
5. {
6. cout << rand() << endl;
7.
8. system("pause");
9. return 0;
10.}

6. Funkcija rand ģenerē skaitļus intervālā no 0 līdz


iebūvētas konstantes vērtības RAND_MAX, kas parasti
vienāda ar 216.
1.piemērs
• Palaidiet programmu vēl vairākas reizes. Ko
redzat?
• Pseidogadījumskaitļi!!!
• Kā jāģenerē skaitļi kaut kādā noteiktā
intervālā?
2.piemērs
10 skaitļu ģenerācija intervālā 0-99
1. #include <iostream>
2. #include <ctime>
3. using namespace std;
4.
5. int main()
6. {
7. time_t t;
8. srand((unsigned) time(&t));
9.
10. for(long i=0; i<10; i++)
11. cout << rand() % 100<< endl;
12.
13. system("pause");
14. return 0;
15.}
2.piemēra analīze
1. #include <iostream>
2. #include <ctime>
3. using namespace std;
4.
5. int main()
6. {
7. time_t t;
8. srand((unsigned) time(&t));
9.
10. for(long i=0; i<10; i++)
11. cout << rand() % 100<< endl;
12.
13. system("pause");
14. return 0;
15. }

2. ctime – bibliotēka darbam ar laika funkcijām.


7. time_t t – mainīgais kurā var saglabāt laiku.
8. srand((unsigned) time(&t))
• time(&t) – funkcija kas ieraksta laiku mainīgajā t. Laiks ir uzņemts sekundēs.
• srand – gadījumskaitļu ģeneratora inicializācija.
• (unsigned) time(&t) – laika vērtības pārveidošana unsigned int tipā (jo tieši
tādu prasa srand funkcija).
11. rand() % 100 – RAND_MAX dalīšanas ar 100 atlikums.
2.piemēra analīze
Kā šis srand((unsigned) time(&t)) darbojas?

• Pseidogadījumskaitļi nozīmē kā šo skaitļu


ģenerācijai izmantojas kaut kāda formula.
• Neizmantojot inicializācijas funkciju srand, vai
izmantojot to ar jebkādu skaitlisko konstanti -
formulas mainīgais ir konstante. Tieši tāpēc katru
reizi sanāk viens un tāds pats skaitlis!
• Konstantes vietā izmantojam laiku kuram ir cita
vērtība katrā programmas palaišanas reizē.
Daži vārdi par laiku
1. #include <iostream>
2. #include <ctime>
3. using namespace std; Paskatoties uz
4. iegūtām vērtībām
5. int main()
6. { var pamanīt ka
7. atskaites punkts ir
8. time_t t;
9. long sec = time(&t); 1970. gada 1.
10. cout << "seconds: " << sec << endl; janvāris. Agrāk
11. long min = (sec - (sec%60))/60;
12. cout << "minutes: " << min << endl; nekāda laika
13. long hour = (min - (min%60))/60; nebija :)
14. cout << "hours: " << hour << endl;
15. long days = (hour - (hour%24))/24;
16. cout << "days: " << days << endl;
17. long years = (days - (days%365))/365;
18. cout << "years: " << years << endl;
19.
20. system("pause");
21. return 0;
22.}
Praktiskais darbs
1. Jāsaģenerē 10 skaitļi intervālā 12 – 19.
2. Jāsaģenerē 10 skaitļi intervālā -0,5 – 0,5.
cout << (rand() % 10) / (double)10 - 0.5 << endl;
3. Jāsaģenerē 20 skaitļi intervālā 0 – 100.
Jāatrod to vidējo vērtību.
4. Jāsaģenerē 20 skaitļi intervālā 0 – 100.
Jāatrod maksimālo un minimālo no tiem.

You might also like