Strona 1 z 1

generator srand() oraz funkcja rand()

Nowy postNapisane: poniedziałek, 9 października 2017, 22:43
przez Arnold_S
Witam!
Zauważyłem, że jest kilka postów w treści których znajdują się poszlaki na temat; jak najlepiej korzystać z funkcji rand();
Chciałbym jednak rozwiać wątpliwości co do środowiska C++ XE2 i temu podobnych wersji.

Wiem, że jeśli chcę użyć wielokrotnie losowania liczby pseudolosowej to najpierw należy uruchomić generator takich liczb wywołując funkcję, np. tak:
KOD cpp:     UKRYJ  
srand(static_cast<unsigned int>(time(0)));


Następnie można korzystać wielokrotnie z funkcji rand();
Mam wątpliwości gdzie i ile razy należy umieścić funkcję srand();
Otóż mam obiekt klasy (jakiejś tam), w którym wypełniając jego prywatne wartości, wielokrotnie używam funkcji rand();
Stworzyłem sobie w tym celu, w tej klasie funkcję: rzut_kostką i wewnątrz tejże funkcji umieściłem ten rand(). Funkcję rzut_kostką "podepnę" sobie pod button na formie. Po jednorazowym kliknięciu, nowo stworzony (narazie pusty) obiekt w/w klasy zaczyna się wypełniać losowymi liczbami umieszczanymi w prywatnych danych.

Pytanie brzmi: gdzie najlepiej umieścić srand(); aby losowanie było "bardzo losowe" od początku uruchomienia programu do jego zakończenia? Czy wywołać go jednorazowo przy, np.: tworzeniu formy?

Re: generator srand() oraz funkcja rand()

Nowy postNapisane: wtorek, 10 października 2017, 10:19
przez polymorphism
W C++ masz bibliotekę <random>, ma większe możliwości.

Re: generator srand() oraz funkcja rand()

Nowy postNapisane: wtorek, 10 października 2017, 17:26
przez Arnold_S
Kurcze tak patrzę i to jest C++11. Po zaincludowaniu biblioteki <random> próbowałem stworzyć cokolwiek według przepisów ze stackoverflow ale kompilator nie rozpoznaje tych obiektów...
Pracuję na C++ XE2.

Chętnie zostałbym przy pierwotnym pomyśle.

Re: generator srand() oraz funkcja rand()

Nowy postNapisane: wtorek, 10 października 2017, 18:52
przez polymorphism
Wydawało mi się, że XE2 obsługuje standard z 2011, wszak samo jest z tego roku... Generalnie radzę zmienić środowisko na nowsze, bo C++ sprzed i po roku 2011 to dwie różne rzeczywistości.

Co do srand: dałbym tylko gdzieś na początku programu.

Re: generator srand() oraz funkcja rand()

Nowy postNapisane: sobota, 21 października 2017, 10:57
przez Cyfrowy Baron
W XE2 nie musisz włączać żadnych dodatkowych bibliotek by użyć random. generator uruchamiasz tylko metodą randomize(), a liczbę losujesz metodą random( int num ). Przy czym int num to liczba całkowita określające zakres z jakiego losujesz, czyli od 0 do num.

To wszystko jest opisane w pliku pomocy środowiska.

Możesz też użyć alternatywnych metod z biblioteki VCL, będą to Randomize() i Random(const int ARange); Też nie musisz załączać żadnych dodatkowych bibliotek.