Witam,
Na wstępie chciałbym zaznaczyć, że jestem początkującym w świecie C++. Tak naprawdę to uczę się programowania od kilku tygodni. Dlatego proszę o wyrozumiałość.I jestem otwarty na konstruktywną krytykę i wszelkie porady.
Do rzeczy. W ramach nauki postanowiłem napisać kod zawierający kilka podstawowych poleceń.
W skrócie, kod ma zasymulować kilka (ilość podana przez użytkownika) losowych rzutów monetą i zwrócić wynik w postaci informacji "Orzel" albo" Reszka".
Sam mechanizm losujący postanowiłem zawrzeć w funkcji o nazwie ** monety**. Następnie, już w funkcji main, funkcja ta miała zostać powtórzona n razy.
I tu natknąłem się na problem. Gdy funkcję losowości srand wciągnąłem w obszar funkcji ** monety**, to niestety nie uzyskałem losowości. Za każdym powtórzeniem program zwraca mi n identycznych wyników. Poniżej niedziałający kod:
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <string>
using namespace std;
string monety(int n)
{
int wynik;
srand(time(NULL));
rand();
wynik=rand()%2;
if(wynik==0)
{
return "Orzel";
}
else
{
return "Reszka";
}
}
int main()
{
int n; // iosc powtorzen
cout << "Podaj ilość losowan: ";
cin >> n;
for(int i=0; i<n; i++)
{
cout << monety(n) << endl;
}
return 0;
}
Program zaczyna funkcjonować prawidłowo, gdy funkcja srand zostanie wyciągnięta z funkcji monety do funkcji main i wywołana przed wywołaniem funkcji monety. Poniżej działający program:
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <string>
using namespace std;
string monety(int n)
{
int wynik;
wynik=rand()%2;
if(wynik==0)
{
return "Orzel";
}
else
{
return "Reszka";
}
}
int main()
{
srand(time(NULL));
rand();
int n; // iosc powtorzen
cout << "Podaj ilość losowan: ";
cin >> n;
for(int i=0; i<n; i++)
{
cout << monety(n) << endl;
}
return 0;
}
Czy jest mi ktoś z Was w stanie w kilku zdaniach wyjaśnić dlaczego funkcja losowości traci swoja (pseudo :P) losowość w pierwszym kodzie?
Czy zapętlenie funkcji, która zawiera w sobie funkcje losowości powoduje, że z każdym liczba rand() przyjmuje identyczną wartość? Alb wczytywana jest tyllko raz i powielana w każdej iteracji pętli for?
Wybaczcie, jeśli przedstawiłem to chaotycznie. Ale tak jak wspomniałem, jestem praktycznie całkowitym newbie w tym temacie ;)
Pozdrawiam.
PK