[lekcja 16] Pseudolosowe liczby całkowite Kurs C++ » Poziom 2

background image

Strona 1

[lekcja] Pseudolosowe liczby całkowite | Kurs C++ » Poziom 2

2011-11-12 17:07:52

http://cpp0x.pl/kursy/Kurs-C++/Poziom-2/Pseudolosowe-liczby-calkowite/290

Darmowe kursy Online

»

Kurs C++

»

Poziom 2

Autor: Piotr Szawdyński

Pseudolosowe liczby całkowite

[lekcja]

Rozdział 16. W lekcji omówiono w jaki sposób generuje się losowe liczby całkowite.

Kolejny rozdział, kolejne wyzwanie - tym razem dowiemy się w jaki sposób możemy generować pseudolosowe liczby całkowite.

Funkcja losująca liczby całkowite pochodzi ze standardowej biblioteki języka C. Bibliotekę, którą należy dołączyć jest cstdlib. Oznacza to

w konsekwencji, że w naszym programie możemy być zmuszeni do dopisania następującej linijki:

C/C++

#include <cstdlib>

Pamiętaj, że wspomniana linijka nie musi koniecznie wystąpić w naszym programie, jeżeli dołączyliśmy inną bibliotekę, która używa
biblioteki cstdlib.

Funkcja losująca

Jeżeli mamy już dołączoną bibliotekę cstdlib do naszego programu to posiadamy również już dostęp do funkcji losującej

»

C

rand

.

Funkcja ta po prostu losuje nam liczbę całkowitą. Liczba ta mieścić się będzie w przedziale od 0 do

»

C

RAND_MAX

, gdzie

»

C

RAND_MAX

jest stałą, która jest zależna od posiadanego kompilatora i posiadanych bibliotek . Więcej szczegółów na temat

poszczególnych zagadnień możesz doczytać sobie w dokumentacji, jednak na chwilę obecną nie jest to konieczne.

Skupmy się teraz na użyciu funkcji w praktyce. Funkcja

»

C

rand

jest bardzo prosta w użyciu dlatego też przejdę odrazu do krótkiego

przykładu:

C/C++

#include <iostream>

#include <cstdlib>

int

main

()

{

std

::

cout

<<

"Wylosowanie pierwsze: "

<<

rand

() <<

std

::

endl

;

int

liczba

=

rand

()

;

std

::

cout

<<

"Wylosowanie drugie: "

<<

liczba

<<

std

::

endl

;

liczba

=

rand

()

;

std

::

cout

<<

"Wylosowanie trzecie: "

<<

liczba

<<

std

::

endl

;

return

0

;

}

Jak widać użycie funkcji jest bardzo proste.

Konfiguracjamaszyny losującej

Jeżeli uruchomimy kilka razy powyższy program to zauważymy, że komputer wylosował nam za każdym razem te same liczby. Takie

zachowanie oczywiście nie jest pożądane dlatego też wymagane jest skonfigurowanie generatora liczb losowych . Z pomocą przychodzi

nam kolejna funkcja i jest nią

»

C

srand

. Funkcja

»

C

srand

ustawia punkt startowy dla mechanizmu generowania kolejnych liczb

całkowitych. W dużym uproszczeniu napisanie:

srand

(

123

)

;

ustawi punkt startowy 123, a zapis

srand

(

543

)

;

ustawi punkt

startowy 543. Co to daje? W sumie tyle, że losowane są inne liczby. Jednak aby uzyskać każdorazowo inne wylosowane wartości w raz

skompilowanym programie należy powiązać funkcję

»

C

srand

z czasem rzeczywistym, ustawionym obecnie w komputerze. Tu będziemy

zmuszeni dołączyć kolejny plik nagłówkowy i jest nim ctime. Biblioteka ctime dostarczy nam między innymi funkcję

»

C

time

, która

zwraca obecny czas na komputerze w postaci liczby - więcej szczegółów nie musisz wiedzieć na chwilę obecną. Jeśli jednak chciałbyś

wiedzieć więcej to możesz spokojnie przeczytać dokumentację funkcji

»

C

time

. Kończąc ten przydługawy wywód i mam nadzieję

zaspokajając Twoją ciekawość co do czego służy przejdźmy do finalnej postaci linijki konfigurującej maszynę losującą:

C/C++

srand

(

time

(

NULL

) )

;

Na koniec warto dodać, że powyższą linijkę wystarczy wywołać tylko raz na samym początku programu i od tego momentu możemy

cieszyć się pseudolosowością liczb całkowitych w naszym programie. Poprawiony kod wygląda teraz tak:

C/C++

background image

Strona 2

[lekcja] Pseudolosowe liczby całkowite | Kurs C++ » Poziom 2

2011-11-12 17:07:52

http://cpp0x.pl/kursy/Kurs-C++/Poziom-2/Pseudolosowe-liczby-calkowite/290

Architektserwisu: Piotr Szawdyński

© Wszelkieprawa zastrzeżone2005-2011

#include <iostream>

#include <cstdlib>

#include <ctime>

int

main

()

{

srand

(

time

(

NULL

) )

;

std

::

cout

<<

"Wylosowanie pierwsze: "

<<

rand

() <<

std

::

endl

;

int

liczba

=

rand

()

;

std

::

cout

<<

"Wylosowanie drugie: "

<<

liczba

<<

std

::

endl

;

liczba

=

rand

()

;

std

::

cout

<<

"Wylosowanie trzecie: "

<<

liczba

<<

std

::

endl

;

return

0

;

}

Losowanieliczb z określonegozakresu

Losowanie liczb z tak dużego zakresu jaki dostarcza nam funkcja

»

C

rand

rzadko kiedy jest nam potrzebne. Znacznie częściej interesuje

nas losowanie liczb z pewnego przedziału. Jeżeli oczekujesz w tym momencie kolejnej funkcji, która załatwi Ci sprawę to jesteś w

błędzie. Wystarczy Ci wiedza, którą obecnie posiadasz, choć prawdopodobnnie nie zdajesz nawet sobie z tego sprawy. Jedyne co do tego

potrzebujemy to wykorzystać dzielenie z resztą i dodawanie. Najpierw ustalamy ile liczb mieści się w przedziale z którego chcemy

losować, np. będzie to 50 liczb. Następnie ustalamy pierwszą losowaną liczbę - załóżmy 7. Teraz składamy to do kupy następującym

wzorem:

C/C++

int

wylosowana_liczba

=(

rand

() %

ile_liczb_w_przedziale

) +

startowa_liczba

;

Konkretyzując powyższy zapis do wyżej przytoczonego przykładu, zapis powyższy będzie wyglądał tak:

C/C++

int

wylosowana_liczba

=(

rand

() %

50

) +

7

;

Ostatecznie program losujący liczby z przedziału od 7 do 56 będzie więc wyglądał tak:

C/C++

#include <iostream>

#include <cstdlib>

#include <ctime>

int

main

()

{

srand

(

time

(

NULL

) )

;

std

::

cout

<<

"Wylosowanie pierwsze: "

<<((

rand

() %

50

) +

7

) <<

std

::

endl

;

int

liczba

=(

rand

() %

50

) +

7

;

std

::

cout

<<

"Wylosowanie drugie: "

<<

liczba

<<

std

::

endl

;

liczba

=(

rand

() %

50

) +

7

;

std

::

cout

<<

"Wylosowanie trzecie: "

<<

liczba

<<

std

::

endl

;

return

0

;

}

Zadanie domowe

Twoim zadaniem domowym jest napisanie prostej gry, która ma działać następująco:

1. Program losuje liczbę z przedziału od 1 do 1000.

2. Użytkownik zgaduje liczbę, która została wylosowana.

3. Jeżeli podana liczba jest za duża (za mała) gra wypisuje stosowny komunikat i powraca do kroku 2.

4. Jeżeli gracz trafi liczbę wylosowaną to progam kończy działanie, wypisując na ekran wylosowaną liczbę oraz liczbę 'strzałów', które

oddał gracz.

Gra ma być zabezpieczona przed możliwością wprowadzenia błędnych wartości liczbowych.

Wszystkieteksty są chronioneprawami autorskimi. Kopiowanielub rozpowszechnianietreści poza niniejszymserwisem jest

zabronione.

Powyższe ograniczenie nie dotyczy autora opracowania, któremu przysługuje prawo do rozpowszechnianiawłasnego tekstu wedle własnego uznania.


Wyszukiwarka

Podobne podstrony:
[lekcja 15] Pętla do while Kurs C++ » Poziom 2
[lekcja 17] Funkcje pierwsze starcie Kurs C++ » Poziom 2
[lekcja 2] Podstawy programowania teoria i terminologia Kurs C++ » Poziom 1
[lekcja 21] Losowanie bez powtórzeń Kurs C++ » Poziom 2
[lekcja 20] Funkcje, a słowo kluczowe return Kurs C++ » Poziom 2
[lekcja 11] Operacje porównania Kurs C++ » Poziom 1
[lekcja 13] Instrukcja warunkowa if else Kurs C++ » Poziom 1
[lekcja 12] Operacje logiczne Kurs C++ » Poziom 1
[lekcja 7] Przestrzeń nazw std Kurs C++ » Poziom 1
[lekcja 19] Przekazywanie tablic jednowymiarowych do funkcji Kurs C++ » Poziom 2
[lekcja 4] Podstawy programowania w C++ Kurs C++ » Poziom 1
[lekcja 5] Komentarze Kurs C++ » Poziom 1
[lekcja 1] Wybieramy środowisko pracy Kurs C++ » Poziom 1
[lekcja 10] Operacje matematyczne Kurs C++ » Poziom 1
AutoCAD - Kurs zaawansowany - Lekcja 16, autocad kurs, Zaawansowany
AutoCAD - Kurs podstawowy - Lekcja 16, autocad kurs, Podstawowy
[lekcja 9] Obsługa strumienia wejściowego Kurs C++ » Poziom 1
[lekcja 6] Obsługa strumienia wyjściowego Kurs C++ » Poziom 1
[lekcja 3] Uruchamiamy pierwszy program Kurs C++ » Poziom 1

więcej podobnych podstron