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.