Matematické Fórum

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

#1 02. 01. 2013 15:48

byk7
InQuisitor
Příspěvky: 4713
Reputace:   221 
 

Funkce srand

Zdravím,

mám za úkol házet N (šestistěnnými) kostkami a vypsat padlé hodnoty, jenže mi to nějak nefunguje:

Code:

#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?


Příspěvky psané červenou barvou jsou moderátorské, šedá je offtopic.

Offline

  • (téma jako vyřešené označil(a) byk7)

#2 02. 01. 2013 16:23

gladiator01
Místo: Jindřichův Hradec
Příspěvky: 1587
Škola: ZČU FAV - SWI
Pozice: absolvent
Reputace:   53 
Web
 

Re: Funkce srand


Naděje jako svíce jas, potěší srdce štvané, čím temnější je noční čas, tím zářivěji plane.
VIVERE - MILITARE EST (Seneca)
Vím, že nic nevím. - Sokrates

Offline

 

#3 02. 01. 2013 16:36

byk7
InQuisitor
Příspěvky: 4713
Reputace:   221 
 

Re: Funkce srand

↑ gladiator01:

ano, na té stránce jsem byl, ale když napíšu

Code:

no=void srand(time(NULL))%6+1;

tak to opět vyhazuje chyby, navíc, to co jsem napsal je zřejmě blbost


Příspěvky psané červenou barvou jsou moderátorské, šedá je offtopic.

Offline

 

#4 02. 01. 2013 18:34 — Editoval gladiator01 (02. 01. 2013 18:54)

gladiator01
Místo: Jindřichův Hradec
Příspěvky: 1587
Škola: ZČU FAV - SWI
Pozice: absolvent
Reputace:   53 
Web
 

Re: Funkce srand

↑ 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:

Code:

srand((unsigned int)time(NULL)*i);
no=rand()%6+1;

Naděje jako svíce jas, potěší srdce štvané, čím temnější je noční čas, tím zářivěji plane.
VIVERE - MILITARE EST (Seneca)
Vím, že nic nevím. - Sokrates

Offline

 

#5 02. 01. 2013 19:28 — Editoval RePRO (02. 01. 2013 19:29)

RePRO
Místo: Jihlava
Příspěvky: 363
Škola: AI VŠPJ (09-12, Bc.)
Pozice: programátor
Reputace:   11 
Web
 

Re: Funkce srand

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:

Code:

int getRandomValue()
{
    srand(time(0));
    return rand();
}

Srdcem trochu-programátor, duší rádoby-matematik a povoláním analytik-vývojář.

Offline

 

#6 02. 01. 2013 20:27

byk7
InQuisitor
Příspěvky: 4713
Reputace:   221 
 

Re: Funkce srand

↑ 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


Příspěvky psané červenou barvou jsou moderátorské, šedá je offtopic.

Offline

 

#7 02. 01. 2013 21:25

RePRO
Místo: Jihlava
Příspěvky: 363
Škola: AI VŠPJ (09-12, Bc.)
Pozice: programátor
Reputace:   11 
Web
 

Re: Funkce srand

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.


Srdcem trochu-programátor, duší rádoby-matematik a povoláním analytik-vývojář.

Offline

 

#8 02. 01. 2013 21:28

byk7
InQuisitor
Příspěvky: 4713
Reputace:   221 
 

Re: Funkce srand

↑ RePRO:

a je to v tomto případě nutné? (myslím to přetypování)


Příspěvky psané červenou barvou jsou moderátorské, šedá je offtopic.

Offline

 

#9 02. 01. 2013 22:51

RePRO
Místo: Jihlava
Příspěvky: 363
Škola: AI VŠPJ (09-12, Bc.)
Pozice: programátor
Reputace:   11 
Web
 

Re: Funkce srand

Určitě není nutné (nemusíš ho použít).


Srdcem trochu-programátor, duší rádoby-matematik a povoláním analytik-vývojář.

Offline

 

#10 02. 01. 2013 23:43

Stýv
Vrchní cenzor
Příspěvky: 5710
Reputace:   215 
Web
 

Re: Funkce srand

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

 

#11 03. 01. 2013 01:10

RePRO
Místo: Jihlava
Příspěvky: 363
Škola: AI VŠPJ (09-12, Bc.)
Pozice: programátor
Reputace:   11 
Web
 

Re: Funkce srand

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. (:


Srdcem trochu-programátor, duší rádoby-matematik a povoláním analytik-vývojář.

Offline

 

#12 03. 01. 2013 13:57

byk7
InQuisitor
Příspěvky: 4713
Reputace:   221 
 

Re: Funkce srand

Potom, co mi bylo (důrazně) řečeno, že náhodná hodnota se generuje pouze jednou, vypadá finální verze programu takto:

Code:

#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. :)


Příspěvky psané červenou barvou jsou moderátorské, šedá je offtopic.

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson