Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[Lekcja 16] - Losowanie liczby z określonego zakresu

Ostatnio zmodyfikowano 2013-04-21 14:15
Autor Wiadomość
Monika90
» 2013-03-23 08:31:25
rand()%X
, jeśli X wynosi 10 to otrzymasz [0,9], czyli 10 liczb.
Nie jest tak dobrze, bo co jeśli RAND_MAX jest mniejsze od X? Standard gwarantuje tylko, że RAND_MAX jest nie mniejsze niż 32767.

I w ogóle dziwię się, że używacie metody z operatorem %, która słynie z tego, że nie działa (czy tego was uczą w szkołach?).
http://www.azillionmonkeys.com/qed/random.html

A najlepiej używać bibliotek takich jak: boost.random, albo, standardowe w C++11, <random>.
P-79179
Chlorek
» 2013-03-23 10:23:37
Używam boost'a jakiś czas, ale kiedyś gdy jeszcze się uczyłem nie słyszałem o bibliotekach boost i w żadnym kursie tego nie uwzględniano (właściwie do dzisiaj tak jest, że się prawie o tym nie wspomina). Boost jest na tyle kompleksowy, że potrafi pomóc idealnie w niejednym problemie, powinno zacząć wcielanie biblioteki boost w kursach jako podstawa - w końcu to zaczyna powoli być podstawą, może jeszcze nie teraz ale w niedalekiej przyszłości na pewno.
No i faktem jest, że jeśli wylosowana liczba będzie mniejsza od X sprawi to już problem, dlatego trzeba pamiętać o pewnych rzeczach, uroki "starych" bibliotek ;)
P-79184
Frish
Temat założony przez niniejszego użytkownika
» 2013-04-21 14:15:53
co do określenia dokladnego przedziału można tez użyć troche zmienionego wzoru...to w odpowiedzi tez na problem poruszony przez pekfos.

przy zmiennych:
min - liczba określająca poczatek przedziału
max - liczba określająca koniec przedziału
(rand() % (max - min + 1)) + min

wtedy liczby będa zawsze losowane od podanej liczby jako początek przedziału do liczby kończącej przzedział włącznie...np:
jezeli min = 10, max = 20, to liczby losowane będą od 10 poprzez 14,15,16 do 20.
P-80970
1 2 3 « 4 »
Poprzednia strona Strona 4 z 4