[Lekcja 16] - Losowanie liczby z określonego zakresu
Ostatnio zmodyfikowano 2013-04-21 14:15
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.htmlA najlepiej używać bibliotek takich jak: boost.random, albo, standardowe w C++11, <random>. |
|
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 ;) |
|
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. |
|
1 2 3 « 4 » |