Pros?m, jak se generuje n?hodn? ??slo v ur?it? mno?in????
Fórum › C / C++
Náhodné číslo
Najdete zde články zabývající se matematikou základních a středních škol a databázi hlavolamů.
Pro vyzkoušení Vaš
Blujacker napsal:
Prosím, jak se generuje náhodné číslo v určité množině?
Treba takto:
srand(time(NULL)) // inicializace generatoru pseudonahodnych cisel
cout << "Nahodne cislo od 0 do RAND_MAX(" << RAND_MAX<<") je "<< rand() % RAND_MAX <<endl;
cout << "Nahodne cislo od 0 do 9 je "<< rand() % 10 <<endl;
cout << "Nahodne cislo od 5 do 15 je "<< rand()%11+5<<endl;
A myslim, ze princip(odcitani, pricitani...) si uz odvodis sam. Jen napovim, ze rand() % 5 losuje cisla od 0 do 4. Jinak takhle se generuji pouze cela cisla. Kdyby jsi potreboval generovat cisla s pohyblivou desetinou carkou, tak to se dela trochu jinak.
Mohl by to někdo vysvětlit tak abych to pochopil? Mě by se ty náhodná čísla taky hodili a zkoušel sem to, cot tady sem dal jura_ a nějak mi to nefungovalo. Komplimátor mi pořád hlásil chyby.
Tak ke generov?n? n?hodn?ch ??sel slou?? v z?kladn? verzi (tj.d? se i jinak) funkce rand() Ta generuje n?hodn? ??slo v rozsahu int. N?hodnost je jen strojen?, je to takzvan? pseudon?hodnost. ??slo se po??t? z tzv. sem?nka, kter? je mo?n? inicializovat funkc? srand(). Pokud se tak nestane, n?hoda bude pravd?podobn? p?i ka?d?m nov?m spu?t?n? programu stejn?. Funkce tedy ze sem?nka vypo??t? pseudon?hodn? ??slo v rozsahu integer. Abychom dostali ??slo v n?mi definovan?m rozsahu, pou?ijeme zbytek po celo??seln?m d?len? (funkce modulo), v jazyku C ps?no "% X", kde X je jmenovatel d?len?. Tak dostaneme pseudon?hodn? ??slo v rozsahu 0-X. Je jasn?, ?e pokud chceme ??slo od 5 do 10, mus?me nejprve z?skat ??slo od 0 do 5 a potom k v?sledku p?i??st 5, tj.
cislo=rand()%5 +5;
Zb?v? tedy u? jen inicializace sem?nka. Nejn?hodn?j?? n?hodu dostaneme, pokud jako sem?nko pou?ijeme ?as, kter? se v?dy m?n?, tj. srand(time(NULL)); Inicializace sem?nka mus? b?t na za??tku programu, sta?? jednou, proto?e sem?nko se po ka?d?m vol?n? funkce rand() zm?n? s dostate?nou n?hodnost?, proto?e prvotn? hodnota byla d?ky srand(time(NULL)) n?hodn?.
Sta?
Super, d?k, u? mi to funguje.
1) Ak chces generovat nahodne cislo v intervale <1; 10>,
tak by si mal vzdy pouzit spravnu a prenositelnu
reprezentaciu (vyuziva sa tu nasobenie
nahodnym cislom z intervalu <0;1)):
number=1+(int)(10.0*(rand()/(RAND_MAX+1.0)));
a nikdy nepouzivaj:
number=1+(rand()% 10);
2) pred samotnym pouzivanim generatora nahodnych cisel,
by mal byt inicializovany (naplneny) [srand, random, ...]
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Náhodné číslo — založil Xiaxo
C# Náhodné číslo (od až po) — založil Gandy
Nahodne cislo — založil Marek Čačko
Náhodné číslo — založil Xeror
Nahodne cislo — založil Zelenáč
Moderátoři diskuze