Highlander Temat założony przez niniejszego użytkownika |
Funkcja losująca » 2013-07-10 20:18:44 Witam, mam pytanie, w którym miejscu w poniższym kodzie, wstawić "srand( time( NULL ) );" jeżeli moja funkcja korzysta z rand() przed main'em, a właściwie kompilator ? Pytam bo nie moge sie z tym uporać, bo do tej pory wiem, że musiałem po prostu to zadeklarować w main, a, że funkcja jest przed main więc jako początkujący sie pogubiłem. W konstruktorze kompilator mi wywala błąd przy rand(), że nie jest zadeklarowane. Z góry dziękuje za odpowiedz. #include <iostream> #include <cstdio> #include <ctime> using namespace std;
class Babelkowe { private: int n; int tab[]; public: Babelkowe( int _n ) { n = _n; for( int i = 0; i < n; i++ ) tab[ i ] = rand(); }
|
|
pekfos |
» 2013-07-10 20:40:40 jeżeli moja funkcja korzysta z rand() przed main'em |
W jakim sensie? //edit: Teraz doczytałem, o co chodzi ;P srand(time(NULL)) to żadna deklaracja, tylko wywołanie funkcji ustawiającej ziarno dla randa. Błąd jest dlatego, że nie dołączyłeś <cstdlib>. |
|
Highlander Temat założony przez niniejszego użytkownika |
» 2013-07-10 20:44:31 Racja, ok dziękuje Panu :) btw ziarno to kolokwialnie mówiąc co takiego ? skrót, określenie na ?:) |
|
pekfos |
» 2013-07-10 21:10:00 |
|
domin568 |
» 2013-07-10 21:10:50 To oznacza że losowość będzie przypięta do czasu w komputerze . Czyli jeżeli miałbyś funkcje która wczytywała by z klawiatury , i jeżeli byś coś wpisał do programu , robiąc to bardzo szybko mógłbyś uzyskać taki sam wynik . |
|
kubawal |
» 2013-07-10 21:13:39 To oznacza że losowość będzie przypięta do czasu w komputerze |
Nie, to oznacza, że na początku wartość ziarna będzie taka sama, jak czas, który był w komputerze, w momencie inicjalizacji ziarna |
|
domin568 |
» 2013-07-10 21:23:34 No to dlaczego jeżeli wywołam kilka funkcji losujących w tym samym czasie to wynik losowania będzie ten sam ? |
|
pekfos |
» 2013-07-10 21:34:44 No to dlaczego jeżeli wywołam kilka funkcji losujących w tym samym czasie to wynik losowania będzie ten sam ? |
Strzelam, że wywołasz razem z srand(time(NULL)). Wartości będą takie same, bo wartość time() zmienia się co sekundę. To oznacza że losowość będzie przypięta do czasu w komputerze |
Nieee, to znaczy, że aktualny czas jest użyty jako ziarno. Potem generator sam będzie działać, czas jest pobierany tylko raz. Nie ma mowy o żadnym przypinaniu. |
|
« 1 » |