Naprawione – problem z funkcją losowania w C++

Na zajęciach programowania, napotkaliśmy na problem który wygląda tak : po wylosowaniu liczb, cały czas zostawały one na poziomie tysięcy/dziesiatek a zmieniały się tylko ich końcówki.

Wyjście:

1346, 1368, 1356 …

Z problemem sobie poradziłem korzystając z biblotek dla funkcji srand. Sprawa tak prosta że az głupia, po prostu zapomnielismy o deklaracji bibloteki <time.h> która odpowiada za obsluge time(null), czyli nasz rdzeń losowania :).

 

Przykładowy program na którym testowałem funkcje losowania :

 

 


    #include
    #include 

    using namespace std;

    int main() {
    srand ( time(NULL) );

    for ( int i=1; i<10; i++ ){
     
    cout<
	

Komentarze

  1. Źle myślisz. Problem polega na tym iż funkcja time( NULL ) zwraca czas w sekundach od 1970 roku. Więc jeśli uruchamiasz program i losujesz jedną liczbę i robisz tak w kółko to czas zbytnio się nie zmienia, wylosowane liczby mogą się różnić. Wyobraź sobie sinusoidę, to jest coś takiego. Teraz czemu masz różne wyniki ? Po każdym wywołaniu funkcji rand() wewnątrz biblioteki gdzie znajduje się ziarno, zostaje ono zmienione przez wzór ( dlatego liczby pseudolosowe ). Więc jeśli po każdym drastycznie zmienionym ziarnie zostanie wylosowana następna liczba, to istnieje możliwość, że będzie się znacznie różniła.

  2. Pewnie masz rację. Chociaż ucieszyłem się że liczby zaczeły się zmieniać po wprowadzeniu tej bibloteki. 🙂 A nie tak jak wczesniej działały z wybranego zakresu. Tak poza tym to wcale a wcale z tego c++ nic nie rozumiem. Tylko podstawy podstaw.

Dodaj komentarz