Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Zdravím,
mám za úkol házet N (šestistěnnými) kostkami a vypsat padlé hodnoty, jenže mi to nějak nefunguje:
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
int N, no, i=0;
cout << "Kolika kostkami budete hazet? ";
cin >> N;
do{
no=srand(time(NULL))%6+1; //k tomto radku to porad vyhazuje chybu "error: void value not ignored as it ought to be"
cout << "Padlo cislo " << no << ".";
i++;
}while(i<N);
return 0;
}nerozumím té chybě, vždyť u funkce srand() si seed vybírám sám, ne?
Offline

↑ byk7:
http://www.cplusplus.com/reference/cstdlib/srand/
void srand ( unsigned int seed );
Offline
↑ gladiator01:
ano, na té stránce jsem byl, ale když napíšu
no=void srand(time(NULL))%6+1;
tak to opět vyhazuje chyby, navíc, to co jsem napsal je zřejmě blbost
Offline

↑ byk7:
Opravdu to je blbost. Tím protypem jsem tě chtěla upozornit na to, že tam to void je.
Void znamená to, že funkce nic nevrací, takže ji nemůžeš přiřadit do proměnné.
Prostuduj si ten příklad, co tam mají.
Zkus třeba toto:
srand((unsigned int)time(NULL)*i); no=rand()%6+1;
Offline
Zdravím,
f-ce srand a rand jsou odlišné. Jenom pro úplnost (vše už napsala gladiator01).
Funkce rand() vrací pseudonáhodné číslo v rozmezí 0 až RAND_MAX. Pseudonáhodné proto, protože vrací čísla z číselné řady generované na základě nějakých matematických podmínek. Aby tyto čísla nebyly při spuštění programu generována vždy stejně, nastaví se počátek této řady pomocí funkce srand(). Argumentem této funkce je číslo typu unsigned int. Dobré je předat této funkci jako argument aktuální čas.
Pro ukázku si tedy ukážeme příklad:
int getRandomValue()
{
srand(time(0));
return rand();
}Offline
↑ RePRO:↑ gladiator01:
jo taak, diky :) uz to chapu
jen se zeptám, co ↑ tam: dělá ten výraz "(unsigned int)" ?
mně to funguje i bez toho
Offline
Je to přetypování na unsigned int.
Ukážu na příkladě, pokud máme rozpětí (range) datového typu –128 to 127, tak tím unsigned řekneme, že to bude 0 to 255.
Offline
RePRO napsal(a):
Pro ukázku si tedy ukážeme příklad:
Code:
int getRandomValue() { srand(time(0)); return rand(); }
já teda jenom procházim kolem, ale když tuhle fci zavoláš třeba milionkrát během jedný vteřiny, nedá ti milionkrát stejný číslo?
Offline
Jojo, máš pravdu, f-ce srand(time(0)) by měla být nastavena v rámci aplikace jen jednou, aby nedošlo ke zmiňované problematice. Docela dobrý postřeh. (:
Offline
Potom, co mi bylo (důrazně) řečeno, že náhodná hodnota se generuje pouze jednou, vypadá finální verze programu takto:
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
int N, no, i=1;
srand(time(NULL));
cout << "Kolika kostkami budete hazet? ";
cin >> N;
do{
no=rand()%6+1;
cout << "Na " << i <<". kostce padlo cislo " << no << "." <<endl;
i++;
}while(i<=N);
return 0;
}Díky všem za pomoc. :)
Offline