Program losuje stale tą samą liczbę
Ostatnio zmodyfikowano 2012-03-17 01:31
Unlimited Temat założony przez niniejszego użytkownika |
Program losuje stale tą samą liczbę » 2012-03-16 23:32:02 Adres URL:
http://cpp0x.pl/kursy/Kurs-C++/Poziom-2 /Funkcje-pierwsze-starcie/291
Zadanie domowe:
Napisz funkcję, która losuje liczbę z przedziału od 50 do 60 włącznie. Wywołaj funkcję kilka razy (wypisz wylosowane wartości na ekran) w celu przetestowania czy działa ona poprawnie.
Zadanie może wprowadzić początkującego programistę o ból głowy. Gdy wywoła funkcję KILKA razy to nie będzie miał różnych wylosowanych liczb lecz jedną i tą samą. Dlaczego? Ponieważ tak jak było napisane we wcześniejszej lekcji "srand" losuje liczby za pomocą systemowego zegara. Jedna liczba na jedną sekundę zegarową. Można więc powiedzieć że dziś o 23:30:00 wylosuje się ta sama liczba co jutro o tej samej godzinie (w tym samym programie). Więc tak jak np u mnie dałem 5000 przebiegów to wtedy widzę tylko 3 różne cyfry. Całość trwa u mnie 2,6 sek (co sekundę nowa liczba). U kogoś innego może to zająć więcej/mniej czasu. To już zależy od mocy obliczeniowej procesora.
Dla potwierdzenia zamieszczam prosty programik za pomocą którego można sprawdzić to co napisałem:
#include <iostream> #include <cstdlib> #include <ctime> using namespace std;
int losowanie() { srand( time( NULL ) ); int a = 0; a =( rand() % 11 ) + 50; return a; }
int main() { int a = 0; do { int liczba = 0; cout << "Wylosowana liczba to: "; liczba = losowanie(); cout << liczba << endl; a++; } while( a != 5000 ); return 0; }
|
|
ison |
» 2012-03-16 23:35:08 bo srand() się wywołuje raz, na początku programu a nie w funkcji losującej |
|
Unlimited Temat założony przez niniejszego użytkownika |
» 2012-03-16 23:41:05 No tak z dodaniem "srand" na początek "main" działa tak jak autor zapewne chciał (choć nie przypominam sobie żeby we wcześniejszej lekcji o "srand" pisało, że trzeba zawsze wywoływać w "main"). Przepraszam, mój błąd. Temat można śmiało usunąć. |
|
akwes |
» 2012-03-17 00:05:16 Na koniec warto dodać, że powyższą linijkę wystarczy wywołać tylko raz na samym początku programu i od tego momentu możemy cieszyć się pseudolosowością liczb całkowitych w naszym programie. Poprawiony kod wygląda teraz tak:
|
Z kursu, z lekcji o losowych liczbach :) @DejaVu, może faktycznie lepsza byłaby czerwona ramka tam ? |
|
DejaVu |
» 2012-03-17 01:31:14 |
|
« 1 » |