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

Losowanie liczb - brak losowości

Ostatnio zmodyfikowano 2011-09-13 16:26
Autor Wiadomość
Temes
Temat założony przez niniejszego użytkownika
Losowanie liczb - brak losowości
» 2011-09-12 15:44:33
Witam, ostatnio, przy pisaniu gierki, natknąłem się na pewien problem.
A mianowicie z linijką:
C/C++
#include <ctime>

Moja gra polega na tym że komputer losuje liczbę (zależy jaki przedział, jest 9 poziomów) a użytkownik musi ją zgadnąć...

I tu znalazłem błąd z <ctime>.

Wybrałem zakres liczb 1-1000 (przy takim widać) i wciskałem ciągle "Liczba - Enter - Liczba - Enter [...]" i zauważyłem, jak tak szybko pisałem, komputer nie losował liczb tylko pisał po kolei: (To przykład, nie pamiętam ile pokazywał, ale liczby różniły się chyba 3,4,5,6 lub 7)
" 643, 647, 651, 655, 659 [...]"
Jak widać te liczby się nie losowały, różniły się troszeczkę, bo nie były takie: LICZBA + 1 tylko np. LICZBA + 5.

Czy jest jakaś inna komenda która umożliwi mi na losowanie np. takich liczb:
" 528, 164, 985, 273, 642, 904, 263, 354",
a nie takie:
" 104, 108, 112, 116, 120, 124, 128, 132"?
P-40849
DejaVu
» 2011-09-12 15:47:03
Zapewne napisałeś źle kod.
P-40850
m4tx
» 2011-09-12 15:54:04
ctime mogłeś załączyć, ale czy skorzystałeś z dobrodziejstw (
srand( time( 0 ) )
) to już inna sprawa :P
P-40851
Figlu
» 2011-09-12 18:37:15
O tym pisalo na jednej z lekcji.

Jestem początkujący i nie wiem czy dobrze to rozumiem ale widze to tak:
te liczby to po prostu czas na komputerze w postaci licby, jak zmieniasz jego zakrez np. aby losowalo z 1000 liczb od 1, to poprosu go dzielisz... a jesli dobrze mi wiadomo to czas plynie DO PRZODU, wiec chyba naturalne ze ci losuje liczby 123,130,147,150 itd.

jesli cos zle powiedzialem poprawcie mnie ...
P-40870
pekfos
» 2011-09-12 18:43:34
wiec chyba naturalne ze ci losuje liczby 123,130,147,150 itd.
nie nie nie..
to nie czas zapisany w postaci liczby tylko wynik działania generatora pseudolosowego do którego podaje się czas tylko jako składnik wyniku. dzięki temu liczby są jako tako losowe ale dzięki algorytmowi nie są tendencyjne.

Co do przedziałów to nie dzielenie tylko modulo.
P-40872
Temes
Temat założony przez niniejszego użytkownika
» 2011-09-13 15:46:39
Ja w moim kodzie napisałem:
C/C++
#include <ctime>
[...]
C/C++
srand( time( NULL ) );
int liczba =( rand() % 5 ) + 1;

To czesc tego kodu, i przez ten kod pisze mi co kilka ale w góre np.
120,125,130,135,140,145...

Jest na to jakaś rada?
P-40897
DejaVu
» 2011-09-13 15:49:39
» standard Csrand

Wklej sobie przykład i sprawdź czy działa.

/edit:
Tak swoją drogą funkcję » standard Csrand wywołuje się raz na początku programu, a nie przy każdym losowaniu.
P-40898
pekfos
» 2011-09-13 15:53:00
To czesc tego kodu
to daj cały.
P-40899
« 1 » 2
  Strona 1 z 2 Następna strona