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

Program losuje stale tą samą liczbę

Ostatnio zmodyfikowano 2012-03-17 01:31
Autor Wiadomość
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:
C/C++
#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;
}
P-52740
ison
» 2012-03-16 23:35:08
bo srand() się wywołuje raz, na początku programu a nie w funkcji losującej
P-52741
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ąć.
P-52742
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 ?
P-52746
DejaVu
» 2012-03-17 01:31:14
Dopisałem stosowną uwagę do rozdziału » Kurs C++ » Poziom 2Pseudolosowe liczby całkowite lekcja.
P-52749
« 1 »
  Strona 1 z 1