generator srand() oraz funkcja rand()

dział ogólny

generator srand() oraz funkcja rand()

Nowy postprzez Arnold_S » poniedziałek, 9 października 2017, 22:43

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?
Avatar użytkownika
Arnold_S
Homos antropiczny
Homos antropiczny
 
Posty: 58
Dołączył(a): niedziela, 12 czerwca 2016, 23:22
Podziękował : 15
Otrzymał podziękowań: 0
System operacyjny: Win7 64b
Kompilator: C++ Builder 6, Rad Studio XE2
Gadu Gadu: 0
    Windows 7Firefox

Re: generator srand() oraz funkcja rand()

Nowy postprzez polymorphism » wtorek, 10 października 2017, 10:19

W C++ masz bibliotekę <random>, ma większe możliwości.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows 7Firefox

Re: generator srand() oraz funkcja rand()

Nowy postprzez Arnold_S » wtorek, 10 października 2017, 17:26

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.
Avatar użytkownika
Arnold_S
Homos antropiczny
Homos antropiczny
 
Posty: 58
Dołączył(a): niedziela, 12 czerwca 2016, 23:22
Podziękował : 15
Otrzymał podziękowań: 0
System operacyjny: Win7 64b
Kompilator: C++ Builder 6, Rad Studio XE2
Gadu Gadu: 0
    Windows 7Firefox

Re: generator srand() oraz funkcja rand()

Nowy postprzez polymorphism » wtorek, 10 października 2017, 18:52

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.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows 7Firefox

Re: generator srand() oraz funkcja rand()

Nowy postprzez Cyfrowy Baron » sobota, 21 października 2017, 10:57

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.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows 7Firefox


Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 4 gości