[C++] náhodné číslo

C++, C#, Visual Basic, Delphi, Perl a ostatní

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod honnza 27. 11. 2005 10:51

Asi hodně stupidní dotaz :oops: , ale fakt nevim proč mi tento progr. nehodí 2 náhodné čisla do 20, ale vždy stejne(1, 7). Co s tim aby to gen. náhodné čísla?

Kód: Vybrat vše
#include <iostream>
#include <cstdlib>

using namespace std;

int main() {
   cout << rand()%20 << endl;
   cout << rand()%20 << endl;
   return 0;
}
honnza
Junior

Odeslat příspěvekod khihihi 27. 11. 2005 10:56

Moderátor diskusného fóra Živě.cz ve výslužbě
khihihi
VIP uživatel
Uživatelský avatar

Odeslat příspěvekod miho 27. 11. 2005 11:38

Musis inicializovat seed nahodneho generatoru pocatecni hodnotou napr. dle casu.

Pred pozuitim rand zavolej

srand ( time(NULL) );

potrebujes jeste pridat

#include <time.h>
miho
Hlavní administrátor
Uživatelský avatar

Odeslat příspěvekod wojta 27. 11. 2005 11:41

Pokud chceš gnerovat třeba pokáždé jiné, tak tam dej náhodnost podle času. Doufám, že to bude fungovat.

Kód: Vybrat vše
#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

int main() {
   srand(clock());
   cout << rand()%20 << endl;
   cout << rand()%20 << endl;
   return 0;
}
wojta
Pokročilý
Uživatelský avatar

Odeslat příspěvekod Howard 28. 11. 2005 09:47

říká se tomu "násada", číslo, které inicializuje chod pseudonáhodného generátoru
Have you tried to turn it off and on again?
Windows je ... nikoliv Windows jsou (Windows is ...)
Howard
VIP uživatel
Uživatelský avatar

Odeslat příspěvekod kokos 28. 11. 2005 23:54

jj.. a nebo generovat nahodne cislo podle sumu, ktery pustis treba na zvukovce.. to je uplne nejlepsi... ale neni to lehke:D
is it nut? no, it is coconut!
kokos
Mírně pokročilý
Uživatelský avatar

Odeslat příspěvekod zdenak(smazano) 29. 11. 2005 08:50

Boost:
Kód: Vybrat vše

boost::mt19937 rng;                 // typ pseudo generatoru
boost::uniform_int<> sestka(1,6)       // distribuce hodnot 1 az 6
                                     
boost::variate_generator<boost::mt19937&, boost::uniform_int<> >kostka(rng, sestka); // spojeni generatoru a distribuce => kostka6
int x = kostka();  // jeden hod kostkou
[/code]
zdenak(smazano)
Kolemjdoucí

Odeslat příspěvekod Duroslav 29. 11. 2005 09:52

Pokiaľ to robíš pod Win, tak môžeš ešte skúsiť použíť funkciu CryptGenRandom obsiahnutú vo Win CryptoAPI
Duroslav
Kolemjdoucí
Uživatelský avatar

Odeslat příspěvekod zdenak(smazano) 29. 11. 2005 10:08

... pokud neni prenositelnost kodu moje priorita ...
zdenak(smazano)
Kolemjdoucí

Odeslat příspěvekod miho 29. 11. 2005 10:32

A pokud to delas pro nejaky Unixopodobny OS tak staci cist soubor /dev/random, ze ktereho lezou nahodne bity. Toto je pomerne kvalitni generator nahodnych cisel (entropie se bere z casu mezi pakety, mezi stisky klaves atd.) :-)
miho
Hlavní administrátor
Uživatelský avatar

Odeslat příspěvekod _ja_ 29. 11. 2005 12:31

honnza: pokud chces seriozne generovat nahodna cisla, tak pouzij neco jineho nez systemove generatory. Kvalita nebyva nic moc.
_ja_
Junior
Uživatelský avatar

Odeslat příspěvekod pexxi 29. 11. 2005 12:51

2 ja:

/dev/random píše: The /dev/random and /dev/urandom character devices provide cryptographically secure random output generated from interrupt timings or input written to the devices.

The /dev/random device is intended to provide high quality, cryptographically secure random output and will only return output for which sufficient (an equal or greater amount) random input is available to generate the output. If insufficient random input is available, reads from the /dev/random device will block until the request can be fulfilled unless the O_NONBLOCK flag was specified when the device was opened, in which case as much high quality output as could be generated is returned with the error code EAGAIN.

The /dev/urandom device provides a reliable source of random output, however the output will not be generated from an equal amount of random input if insufficient input is available. Reads from the /dev/urandom device always return the quantity of output requested without blocking. If insufficient random input is available, alternate input will be processed by the random number generator to provide cryptographically secure output, the strength of which will reflect the strength of the algorithms used by the random number generator. Output generated without random input is theoretically less secure than output generated from random input, so /dev/random should be used for applications for which a high level of confidence in the security of the output is required.


Podla mne je to pre pouzitie VELMI vhodne, ak tvoja aplikacia bude vyvijana pre Unix.
It's better to be wholly alone, than alone with ass-holes. ;-)
pexxi
Junior


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků