Ĺadny brzuch
bawie sie funkja rand(). napisalem taki oto program:
//- LOSOWANIE LICZBY --- program losuje liczbe i wyswietla ja na ekranie #include <cstdlib> #include <ctime> #include <iostream> using namespace std; int main() { srand((unsigned int)time(NULL)); //- generator liczb pseudo losowych int liczba = rand() % 100; //- losuje liczbe z przedzialu <0,99> cout << "Wylosowalem: " << liczba << endl; system("PAUSE"); return 0; }
wszystko niby fajnie ale jak odpale program 10 razy pod rzad to otrzymam cos takiego: 45; 52; 1; 7; 10; 50; 53; 56; 59; 60;
liczby niby sa losowe ale zauwazcie ze kazda nastepna jest wieksza od poprzedniej! dopiero po jakim czasie program zaczyna losowac liczby od nowa...
ludzie pomozcie! co mam zrobic zeby liczby byly naprawde losowe? zeby komputer losowal np.: 100; 2; 34; 12; 45; 36; 99; 45... zupelnie bez zadnego schematu...
przy okazji to jak losowac liczby zmienno przecinkowe? szukalem na forum i wszedzie bylo napisane tylko o integer.
ps. szukalem na forum podobnego tematu i nie znalazlem...
+----------------------------------------+
przerobilem nieco moj program, teraz wygla da tak:
//- LOSOWANIE LICZBY --- program losuje liczbe i wyswietla ja na ekranie #include <cstdlib> #include <ctime> #include <iostream> using namespace std; int main() { int liczba1, liczba2; srand((unsigned int)time(NULL)); //- generator liczb pseudo losowych liczba1 = rand() % 100; //- losuje liczbe z przedzialu <0,99> liczba2 = rand() % 100; //- losuje liczbe z przedzialu <0,99> cout << "Wylosowalem: " << liczba1 << ", " <<liczba2 << endl; system("PAUSE"); return 0; }
uruchomilem go 5 razy i zauwazylem ze liczba1 jest losowane tak jak w poprzednim programie [kazdy nastepny wynik jest wieksz od poprzedniego], natomiast liczba2 jest losowana prawidlowo [kazdy nasteptny wynik nie jest w niczym podobny do poprzedniego, raz jest wiekszy, raz mniejszy]
ludzie o co w tym chodzi?
Użytkownik ogórek edytował ten post 20 listopad 2005, 22:20
W pascalu funkcja randomize zapobiega powtarzaniu sie liczb, nie wiem jak sie on nazywa w c++ i czy wogole istnieje. Radze poszukac na google...
W pascalu funkcja randomize zapobiega powtarzaniu sie liczb, nie wiem jak sie on nazywa w c++ i czy wogole istnieje. Radze poszukac na google...
PS. użyj Szukaj bo na forum problem był wielokrotnie rozpatrywany.
a ty sie naucz czytac!!! =:P
liczby niby sa losowe ale zauwazcie ze kazda nastepna jest wieksza od poprzedniej! dopiero po jakim czasie program zaczyna losowac liczby od nowa...
ludzie pomozcie! co mam zrobic zeby liczby byly naprawde losowe? zeby komputer losowal np.: 100; 2; 34; 12; 45; 36; 99; 45... zupelnie bez zadnego schematu...
przy okazji to jak losowac liczby zmienno przecinkowe? szukalem na forum i wszedzie bylo napisane tylko o integer.
ps. szukalem na forum podobnego tematu i nie znalazlem...
a ty sie naucz czytac!!! =:P
W C przecież też istnieje randomize() i nawet działa :)
Co do losowania zmiennoprzecinkowych - zawsze możesz losować odpowiednio duże liczby typu int bądź long int i dzielić przez odpowiednią liczbę, np.
double i = (random(10001))/10000.0f;
dostaniesz liczby od 0 do 1 (do 4 miejsca po przecinku, np. 0.7345)
A ty sie naucz szukac <_<
http://forum.ks-eksp...showtopic=63058
http://forum.ks-eksp...showtopic=58515
http://forum.ks-eksp...showtopic=48225
http://forum.ks-eksp...showtopic=38920
http://forum.ks-eksp...showtopic=15991
Wsio na pierwszej stronie wyszukwania <_<
Witaj
Problem stwarza funkcja srand() a właściwie jej argument czyli (unsigned int)time(NULL). Ponieważ generator pseudolosowy powinien (musi) zostać zainicjowany to stosuje się funkcję randomize() ewentualnie srand(). Tą ostatnią trzeba jawnie zainicjować. Zastosowanie w tym celu funkcji time() jest OK ale pod warunkiem, że z generatora będziemy korzystać wiele razy w czasie działania programu. Gdy natomiast – tak jak w twoim przypadku – generujemy raz i kończymy aplikację, a następnie powtarzamy tę czynność kilka razy to zgodnie z postępem czasu baza dla srand() przesuwa się i kolejne generowane liczby będą właśnie wyglądały tak jak u Ciebie. Jest to wada generatorów „pseudo”losowych – i z tego powodu są one zwane „pseudo”. Jeśli poczytasz trochę na ten temat to zobaczysz w czym rzecz.
Wniosek
- generuj ciąg liczb wielu liczb w jednym uruchomieniu aplikacji, a będą one losowe i co bardzo ważne a może najważniejsze
funkcja srand() lub randomize() powinna być uruchomiona tylko raz zaraz na starcia aplikacji, a nie przy każdym generowaniu liczby czyli użyciu rand() lub random().
Pozdrawiam Jarek
Ja pamiętam że w C++ korzystałem z funkcji random.Nie pamiętam dokładnie jak ją się pisało ale wiem że nie było trzeba deklarować żadnych liczb pseudo losowych. Była o wiele mniej skomplikowana!! Poszukaj troche to znajdziesz coś więcej
Ja proponuję tak:
int main() { srand((unsigned int)time(NULL)); int razy = rand()%5;//jakąś małą liczbę double wynik; for(int i=0;i<razy;i++) wynik=(rand()%10000)*0.0001; cout << wynik; }
wielkie dzieki za pomoc. informacje, ktore podaliscie bardzo mi sie przydaly.
P0zdRawiam
Użytkownik ogórek edytował ten post 22 listopad 2005, 02:42
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
//- LOSOWANIE LICZBY --- program losuje liczbe i wyswietla ja na ekranie #include <cstdlib> #include <ctime> #include <iostream> using namespace std; int main() { srand((unsigned int)time(NULL)); //- generator liczb pseudo losowych int liczba = rand() % 100; //- losuje liczbe z przedzialu <0,99> cout << "Wylosowalem: " << liczba << endl; system("PAUSE"); return 0; }
wszystko niby fajnie ale jak odpale program 10 razy pod rzad to otrzymam cos takiego: 45; 52; 1; 7; 10; 50; 53; 56; 59; 60;
liczby niby sa losowe ale zauwazcie ze kazda nastepna jest wieksza od poprzedniej! dopiero po jakim czasie program zaczyna losowac liczby od nowa...
ludzie pomozcie! co mam zrobic zeby liczby byly naprawde losowe? zeby komputer losowal np.: 100; 2; 34; 12; 45; 36; 99; 45... zupelnie bez zadnego schematu...
przy okazji to jak losowac liczby zmienno przecinkowe? szukalem na forum i wszedzie bylo napisane tylko o integer.
ps. szukalem na forum podobnego tematu i nie znalazlem...
+----------------------------------------+
przerobilem nieco moj program, teraz wygla da tak:
//- LOSOWANIE LICZBY --- program losuje liczbe i wyswietla ja na ekranie #include <cstdlib> #include <ctime> #include <iostream> using namespace std; int main() { int liczba1, liczba2; srand((unsigned int)time(NULL)); //- generator liczb pseudo losowych liczba1 = rand() % 100; //- losuje liczbe z przedzialu <0,99> liczba2 = rand() % 100; //- losuje liczbe z przedzialu <0,99> cout << "Wylosowalem: " << liczba1 << ", " <<liczba2 << endl; system("PAUSE"); return 0; }
uruchomilem go 5 razy i zauwazylem ze liczba1 jest losowane tak jak w poprzednim programie [kazdy nastepny wynik jest wieksz od poprzedniego], natomiast liczba2 jest losowana prawidlowo [kazdy nasteptny wynik nie jest w niczym podobny do poprzedniego, raz jest wiekszy, raz mniejszy]
ludzie o co w tym chodzi?
Użytkownik ogórek edytował ten post 20 listopad 2005, 22:20
W pascalu funkcja randomize zapobiega powtarzaniu sie liczb, nie wiem jak sie on nazywa w c++ i czy wogole istnieje. Radze poszukac na google...
W pascalu funkcja randomize zapobiega powtarzaniu sie liczb, nie wiem jak sie on nazywa w c++ i czy wogole istnieje. Radze poszukac na google...

PS. użyj Szukaj bo na forum problem był wielokrotnie rozpatrywany.
a ty sie naucz czytac!!! =:P
liczby niby sa losowe ale zauwazcie ze kazda nastepna jest wieksza od poprzedniej! dopiero po jakim czasie program zaczyna losowac liczby od nowa...
ludzie pomozcie! co mam zrobic zeby liczby byly naprawde losowe? zeby komputer losowal np.: 100; 2; 34; 12; 45; 36; 99; 45... zupelnie bez zadnego schematu...
przy okazji to jak losowac liczby zmienno przecinkowe? szukalem na forum i wszedzie bylo napisane tylko o integer.
ps. szukalem na forum podobnego tematu i nie znalazlem...
a ty sie naucz czytac!!! =:P

W C przecież też istnieje randomize() i nawet działa :)
Co do losowania zmiennoprzecinkowych - zawsze możesz losować odpowiednio duże liczby typu int bądź long int i dzielić przez odpowiednią liczbę, np.
double i = (random(10001))/10000.0f;
dostaniesz liczby od 0 do 1 (do 4 miejsca po przecinku, np. 0.7345)
A ty sie naucz szukac <_<
http://forum.ks-eksp...showtopic=63058
http://forum.ks-eksp...showtopic=58515
http://forum.ks-eksp...showtopic=48225
http://forum.ks-eksp...showtopic=38920
http://forum.ks-eksp...showtopic=15991
Wsio na pierwszej stronie wyszukwania <_<

Witaj
Problem stwarza funkcja srand() a właściwie jej argument czyli (unsigned int)time(NULL). Ponieważ generator pseudolosowy powinien (musi) zostać zainicjowany to stosuje się funkcję randomize() ewentualnie srand(). Tą ostatnią trzeba jawnie zainicjować. Zastosowanie w tym celu funkcji time() jest OK ale pod warunkiem, że z generatora będziemy korzystać wiele razy w czasie działania programu. Gdy natomiast – tak jak w twoim przypadku – generujemy raz i kończymy aplikację, a następnie powtarzamy tę czynność kilka razy to zgodnie z postępem czasu baza dla srand() przesuwa się i kolejne generowane liczby będą właśnie wyglądały tak jak u Ciebie. Jest to wada generatorów „pseudo”losowych – i z tego powodu są one zwane „pseudo”. Jeśli poczytasz trochę na ten temat to zobaczysz w czym rzecz.
Wniosek
- generuj ciąg liczb wielu liczb w jednym uruchomieniu aplikacji, a będą one losowe i co bardzo ważne a może najważniejsze
funkcja srand() lub randomize() powinna być uruchomiona tylko raz zaraz na starcia aplikacji, a nie przy każdym generowaniu liczby czyli użyciu rand() lub random().
Pozdrawiam Jarek
Ja pamiętam że w C++ korzystałem z funkcji random.Nie pamiętam dokładnie jak ją się pisało ale wiem że nie było trzeba deklarować żadnych liczb pseudo losowych. Była o wiele mniej skomplikowana!! Poszukaj troche to znajdziesz coś więcej
Ja proponuję tak:
int main() { srand((unsigned int)time(NULL)); int razy = rand()%5;//jakąś małą liczbę double wynik; for(int i=0;i<razy;i++) wynik=(rand()%10000)*0.0001; cout << wynik; }
wielkie dzieki za pomoc. informacje, ktore podaliscie bardzo mi sie przydaly.
P0zdRawiam
Użytkownik ogórek edytował ten post 22 listopad 2005, 02:42