Wróć do informacji o e-podręczniku Wydrukuj Pobierz materiał do PDF Pobierz materiał do EPUB Pobierz materiał do MOBI Zaloguj się, aby dodać do ulubionych Zaloguj się, aby skopiować i edytować materiał Zaloguj się, aby udostępnić materiał Zaloguj się, aby dodać całą stronę do teczki

Jak wygenerować liczbę?

Do wygenerowania liczby w języku programowania C++ używamy funkcji rand(). Generuje ona liczbę z zakresu od 0 do RAND_MAX, gdzie RAND_MAX to stała zapisana w bibliotece, do której należy funkcja rand() – czyli jest to <cstdlib>.

Napiszmy krótki program, który przy pomocy funkcji rand() wygeneruje liczbę z zakresu od 0 do RAND_MAX.

Zacznijmy od napisania szkieletu głównej funkcji programu – main(), a w niej zadeklarowania zmiennej typu całkowitego int o nazwie wylosowana. Będziemy przechowywać w niej wylosowaną liczbę.

Linia 1. kratka include otwórz nawias ostrokątny iostream zamknij nawias ostrokątny. Linia 3. int main otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 5. int wylosowana średnik. Linia 7. return 0 średnik. Linia 8. zamknij nawias klamrowy.

Następnie użyjmy funkcji std::rand() do wylosowania liczby. Wynik losowania zapiszmy w zmiennej wylosowana.

Ważne!

W związku z tym, że używasz funkcji rand(), pamiętaj o dodaniu odpowiedniej biblioteki:

Linia 1. kratka include otwórz nawias ostrokątny cstdlib zamknij nawias ostrokątny.
Linia 1. kratka include otwórz nawias ostrokątny iostream zamknij nawias ostrokątny. Linia 2. kratka include otwórz nawias ostrokątny cstdlib zamknij nawias ostrokątny. Linia 4. int main otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 6. int wylosowana znak równości std dwukropek dwukropek rand otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 8. return 0 średnik. Linia 9. zamknij nawias klamrowy.

Ostatnie, co musimy zrobić, to wypisać wylosowaną liczbę. Robimy to przy pomocy strumienia std::cout.

Linia 1. kratka include otwórz nawias ostrokątny iostream zamknij nawias ostrokątny. Linia 2. kratka include otwórz nawias ostrokątny cstdlib zamknij nawias ostrokątny. Linia 5. int main otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 7. int wylosowana znak równości std dwukropek dwukropek rand otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 9. std dwukropek dwukropek cout otwórz nawias ostrokątny otwórz nawias ostrokątny wylosowana średnik. Linia 11. return 0 średnik. Linia 12. zamknij nawias klamrowy.

Po kilkukrotnym uruchomieniu programu zauważymy, że program za każdym razem losuje te same liczby. Dlaczego tak się dzieje?

Przy starcie programu ziarno, czyli wartość, od której algorytm zaczyna generowanie kolejnych liczb, jest stałe i niezmienne. Stan ten może ulec zmianie pod warunkiem, że na początku programu w miejsce tej wartości wprowadzi się nową wartość i będzie ona inna przy każdorazowym uruchomieniu programu.

Dlatego, aby program nie losował tych samych liczb, użyjemy poniższej instrukcji:

Linia 1. srand otwórz nawias okrągły time otwórz nawias okrągły NULL zamknij nawias okrągły zamknij nawias okrągły średnik.

Ta linijka powoduje, że ziarno generatora za każdym razem startuje od innej wartości, co sprawia, że wylosowane liczby po każdym uruchomieniu programu są inne. Warto zaznaczyć, że funkcja ta w swoim działaniu wykorzystuje czas systemowy.

Aby funkcja działała prawidłowo, należy dodać odpowiednią bibliotekę, w której ta funkcja się znajduje.

Linia 1. kratka include otwórz nawias ostrokątny time kropka h zamknij nawias ostrokątny.

Dodajmy powyższe dwie linijki do wcześniej napisanego programu i sprawdźmy rezultat.

Linia 1. kratka include otwórz nawias ostrokątny iostream zamknij nawias ostrokątny. Linia 2. kratka include otwórz nawias ostrokątny cstdlib zamknij nawias ostrokątny. Linia 3. kratka include otwórz nawias ostrokątny time kropka h zamknij nawias ostrokątny. Linia 5. int main otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 6. srand otwórz nawias okrągły time otwórz nawias okrągły NULL zamknij nawias okrągły zamknij nawias okrągły średnik. Linia 8. int wylosowana znak równości std dwukropek dwukropek rand otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 10. std dwukropek dwukropek cout otwórz nawias ostrokątny otwórz nawias ostrokątny wylosowana średnik. Linia 12. return 0 średnik. Linia 13. zamknij nawias klamrowy.

Teraz losowana liczba za każdym razem jest inna.

Generowanie liczb z danego zakresu

Wiemy już, jak wygenerować liczbę pseudolosową, zatem teraz napiszmy program, który wygeneruje liczby z danego zakresu. Kontynuujmy pracę z wcześniej napisanym kodem.

Poniższa linijka kodu do zmiennej wylosowana wygeneruje liczbę z zakresu od 1 do 48.

Linia 1. int wylosowana znak równości otwórz nawias okrągły std dwukropek dwukropek rand otwórz nawias okrągły zamknij nawias okrągły procent 48 zamknij nawias okrągły plus 1 średnik.

Liczba 1 oznacza najmniejszą możliwą do wylosowania liczbę, a wartość po modulo (%) to wielkość przedziału, do którego należą liczby całkowite, jakie możemy wylosować.

Przeanalizujmy poniższe przykłady kodu:

Linia 1. int wylosowana znak równości otwórz nawias okrągły std dwukropek dwukropek rand otwórz nawias okrągły zamknij nawias okrągły procent 48 zamknij nawias okrągły plus 7 średnik. Linia 2. prawy ukośnik prawy ukośnik losuje liczby z przedziału otwórz nawias ostrokątny 7 przecinek 54 zamknij nawias ostrokątny.
Linia 1. int wylosowana znak równości otwórz nawias okrągły std dwukropek dwukropek rand otwórz nawias okrągły zamknij nawias okrągły procent 100 zamknij nawias okrągły plus 2 średnik. Linia 2. prawy ukośnik prawy ukośnik losuje liczby z przedziału otwórz nawias ostrokątny 2 przecinek 101 zamknij nawias ostrokątny.
Linia 1. int wylosowana znak równości otwórz nawias okrągły std dwukropek dwukropek rand otwórz nawias okrągły zamknij nawias okrągły procent 150 zamknij nawias okrągły plus 50 średnik. Linia 2. prawy ukośnik prawy ukośnik losuje liczby z przedziału otwórz nawias ostrokątny 50 przecinek 199 zamknij nawias ostrokątny.

Z powyższych linijek kodu możemy teraz wyprowadzić wzór na przedział losowanych liczb.

Jeżeli oznaczymy zmienne w następujący sposób:

Linia 1. int wylosowana znak równości otwórz nawias okrągły std dwukropek dwukropek rand otwórz nawias okrągły zamknij nawias okrągły procent LP zamknij nawias okrągły plus LS średnik.

Wówczas liczby będą losowane z przedziału:

<LS,LS+LP1>

gdzie LS to liczba startowa, a LP - liczebność przedziału

Praca domowa

Napisz program, który wygeneruje liczbę z przedziału <77, 169>.

Przykład programu w języku C++

Napiszmy program, który dla podanego przez użytkownika przedziału będzie losować 100 liczb, a po wylosowaniu wartości granicznej wypisze wyraz „INFORMATYKA”.

Zacznijmy od zadeklarowania dwóch zmiennych, do których zapiszemy granice przedziału, jakie użytkownik poda z klawiatury. Będą to:

Linia 1. int L podkreślnik granica średnik. Linia 2. int P podkreślnik granica średnik.

Kod, dzięki któremu użytkownik poda własne granice przedziału, będzie wyglądał tak:

Linia 1. std dwukropek dwukropek cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Podaj lewą granicę przedziału cudzysłów otwórz nawias ostrokątny otwórz nawias ostrokątny std dwukropek dwukropek endl średnik. Linia 2. std dwukropek dwukropek cin zamknij nawias ostrokątny zamknij nawias ostrokątny L podkreślnik granica średnik. Linia 3. std dwukropek dwukropek cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Podaj prawą granicę przedziału cudzysłów otwórz nawias ostrokątny otwórz nawias ostrokątny std dwukropek dwukropek endl średnik. Linia 4. std dwukropek dwukropek cin zamknij nawias ostrokątny zamknij nawias ostrokątny P podkreślnik granica średnik.

Następnym krokiem jest napisanie pętli, która wykona się 100 razy.

Linia 1. for otwórz nawias okrągły int i znak równości 0 średnik i otwórz nawias ostrokątny 100 średnik i plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 3. zamknij nawias klamrowy.

Teraz napiszemy kod, który wygeneruje liczbę pseudolosową z zadanego przez użytkownika zakresu, zapisze ją w zmiennej wylosowana i wypisze na standardowym wyjściu.

Linia 1. int wylosowana znak równości otwórz nawias okrągły std dwukropek dwukropek rand otwórz nawias okrągły zamknij nawias okrągły procent otwórz nawias okrągły P podkreślnik granica minus L podkreślnik granica plus 1 zamknij nawias okrągły zamknij nawias okrągły plus L podkreślnik granica średnik. Linia 3. std dwukropek dwukropek cout otwórz nawias ostrokątny otwórz nawias ostrokątny wylosowana otwórz nawias ostrokątny otwórz nawias ostrokątny std dwukropek dwukropek endl średnik.

Aby program przy każdym uruchomieniu losował inne liczby, musimy pamiętać o dodaniu:

Linia 1. srand otwórz nawias okrągły time otwórz nawias okrągły NULL zamknij nawias okrągły zamknij nawias okrągły średnik.
Ważne!

W związku z użyciem powyższych funkcji wbudowanychfunkcja wbudowanafunkcji wbudowanych, nie zapomnijmy o dodaniu odpowiednich bibliotek:

Linia 1. kratka include otwórz nawias ostrokątny cstdlib zamknij nawias ostrokątny. Linia 2. kratka include otwórz nawias ostrokątny time kropka h zamknij nawias ostrokątny.

Program jest prawie gotowy, dodajmy jeszcze tylko warunek, że jeżeli wylosowana liczba jest liczbą graniczną, to wypisuje się napis „INFORMATYKA”.

Linia 1. if otwórz nawias okrągły wylosowana znak równości znak równości L podkreślnik granica kreska pionowa kreska pionowa wylosowana znak równości znak równości P podkreślnik granica zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. std dwukropek dwukropek cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów INFORMATYKA cudzysłów otwórz nawias ostrokątny otwórz nawias ostrokątny std dwukropek dwukropek endl średnik. Linia 3. zamknij nawias klamrowy.

Zobaczmy, jak wygląda kod całego programu:

Linia 1. kratka include otwórz nawias ostrokątny iostream zamknij nawias ostrokątny. Linia 2. kratka include otwórz nawias ostrokątny cstdlib zamknij nawias ostrokątny. Linia 3. kratka include otwórz nawias ostrokątny time kropka h zamknij nawias ostrokątny. Linia 5. int main otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 7. srand otwórz nawias okrągły time otwórz nawias okrągły NULL zamknij nawias okrągły zamknij nawias okrągły średnik. Linia 9. int L podkreślnik granica średnik. Linia 10. int P podkreślnik granica średnik. Linia 12. std dwukropek dwukropek cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Podaj lewą granicę przedziału cudzysłów otwórz nawias ostrokątny otwórz nawias ostrokątny std dwukropek dwukropek endl średnik. Linia 13. std dwukropek dwukropek cin zamknij nawias ostrokątny zamknij nawias ostrokątny L podkreślnik granica średnik. Linia 14. std dwukropek dwukropek cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów Podaj prawą granicę przedziału cudzysłów otwórz nawias ostrokątny otwórz nawias ostrokątny std dwukropek dwukropek endl średnik. Linia 15. std dwukropek dwukropek cin zamknij nawias ostrokątny zamknij nawias ostrokątny P podkreślnik granica średnik. Linia 17. for otwórz nawias okrągły int i znak równości 0 średnik i otwórz nawias ostrokątny 100 średnik i plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 19. int wylosowana znak równości otwórz nawias okrągły std dwukropek dwukropek rand otwórz nawias okrągły zamknij nawias okrągły procent otwórz nawias okrągły P podkreślnik granica minus L podkreślnik granica plus 1 zamknij nawias okrągły zamknij nawias okrągły plus L podkreślnik granica średnik. Linia 21. std dwukropek dwukropek cout otwórz nawias ostrokątny otwórz nawias ostrokątny wylosowana otwórz nawias ostrokątny otwórz nawias ostrokątny std dwukropek dwukropek endl średnik. Linia 23. if otwórz nawias okrągły wylosowana znak równości znak równości L podkreślnik granica kreska pionowa kreska pionowa wylosowana znak równości znak równości P podkreślnik granica zamknij nawias okrągły otwórz nawias klamrowy. Linia 24. std dwukropek dwukropek cout otwórz nawias ostrokątny otwórz nawias ostrokątny cudzysłów INFORMATYKA cudzysłów otwórz nawias ostrokątny otwórz nawias ostrokątny std dwukropek dwukropek endl średnik. Linia 25. zamknij nawias klamrowy. Linia 26. zamknij nawias klamrowy. Linia 28. return 0 średnik. Linia 29. zamknij nawias klamrowy.

Słownik

funkcja wbudowana
funkcja wbudowana

funkcja, która została już zaimplementowana; należy do jednej z bibliotek lub klas; przykładami takich funkcji w języku C++ są: rand(), srand(), length()