MANJAK napisał(a)
- Ze zmiennych r16, r26, itd. będę korzystał w całym programie, więc muszę je zdefiniować poza wszelkimi funkcjami jako globalne?
Możesz. Jeżeli masz cały program w jednym cpp, to nie będzie problemu. Najlepiej w nagłówku jak masz to wsadź. Jeśli masz wiele .cpp, to w nagłówku poprzedzasz deklarację extern
, a w jednym cpp bez extern
MANJAK napisał(a)
- Chcę napisać funkcję rollsRoll tak, aby losowała cztery liczby i zwracała ich sumę pomniejszoną o wartość najmniejszej z nich. Tu mam problem.
Tak jak napisałem: losujesz 4 liczby, sumujesz je, odejmujesz od tej sumy wartość najmniejszej
int tab[4];
int suma=0;
int min=7;
for(int i=0; i<4; i++){
suma+=(tab[i]=rand()%6+1);
if(min>tab[i]) min=tab[i];
}
suma-=min;
w suma masz sumę 3 największych wylosowanych wartości.
MANJAK napisał(a)
- Czy po zrealizowaniu punktów 1. i 2. będę mógł napisać sobie w int main() tak?
r16 = rollsRoll;
r26 = rollsRoll;
(...)
Tutaj chodzi mi o to, aby kolejno dla r16, r26, itd. została przypisana zwracana wartość funkcji rollsRoll, za każdym razem inna, generowana na nowo.
rollsRoll(). Pod warunkiem że w tej funkcji nie wyzerujesz ziarna (przez srand), to będzie za każdym razem inna wartość.No i ta funkcja ma zwracać tą wylosowaną wartość, czy też sumę.
MANJAK napisał(a)
- Czy masz na myśli, żeby srand(time(NULL)); umieścić poza wszelkimi funkcjami, np. tuż pod #include <iostream>?
Nie pod includami, tylko na samym początku funkcji main(). srand ustawia nowe ziarno dla pseudolosowości, jeśli w ciągu sekundy przypiszesz ziarno z czasu, to "wylosuje" ci dokładnie to samo. Przykład:
srand(time(NULL));
printf("%d\n", rand()%100);
srand(time(NULL));
printf("%d\n", rand()%100);
wypisze 2 te same liczby (chyba że dziwnym trafem przy b. dużym obciążeniu CPU oba srandy wykonają się w osobnych sekundach, co się raczej nie zdarza)
srand(time(NULL));
printf("%d\n", rand()%100);
printf("%d\n", rand()%100);
wypisze 2 różne liczby (szansa 1/100, że to samo, "prawdopodobieństwo")
//EDIT: średnio co 176890 wywołań w mojej pętli dla losowania 2 liczb ze zresetowanego ziarna dla time(0) liczby były różne, podczas gdy jak dałem sranda tylko na początek, to wynik był identyczny po 2401630988 wywołaniach losowania 2 liczb (mógł się licznik obrócić, bo to 2 minuty trwało). Oczywiście używam samego rand() bez modulo.