Random funkce – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Random funkce – C / C++ – Fórum – Programujte.comRandom funkce – C / C++ – Fórum – Programujte.com

 

Gadael0
Návštěvník
14. 2. 2011   #1
-
0
-

Zdravim,

potreboval bych poradit s rand() funkci. Mam nasledujici dve funkce:

int getRand(){

return ((int) ((rand()%(MAXRANGE-MINRANGE+1)))+MINRANGE);
}

int getRand01(){
return ((int)((double)rand()/(double)RAND_MAX));
}


Prvni by mi mela generovat nahodne cislo z intervalu <MINRANGE,MAXRANGE>. Druha by mela generovat nahodne nulu nebo jednicku. Prvni funkce funguje, akoratze pri kazdem spusteni programu vygeneruje uplne ta sama 'nahodna' cisla..

Nevite cim to je? A cim to, ze druha funkce generuje vzdy nulu?

Dik moc,
H.

Nahlásit jako SPAM
IP: 212.24.139.–
Nejhorsi, co se Vam v zivote muze prihodit je, ze narazite na blbce...
crAzY^
~ Moderátor
+10
Grafoman
14. 2. 2011   #2
-
0
-

nastav tzv. random seed...

napr. : srand( (unsigned int)time(NULL) );

Nahlásit jako SPAM
IP: 89.190.90.–
All you need is vision and time.
crAzY^
~ Moderátor
+10
Grafoman
14. 2. 2011   #3
-
0
-

a k té druhé funkci... no když menší číslo než RAND_MAX (což rand() až na jeden případ je) vydělíš RAND_MAXem dostanš číslo v intervalu 0 < cislo < 1; a když to přetypuješ na int tak se odtrhne desetinná část, což bude vždycky nula až na jeden případ (z dost hodně případů)

Nahlásit jako SPAM
IP: 89.190.90.–
All you need is vision and time.
Gadael0
Návštěvník
14. 2. 2011   #4
-
0
-

ok, tak druhou funkci jsem upravil takto:

int getRand01(){

int ret=((int)(((double)rand()/(double)RAND_MAX)*2));
return ret;
}


Melo by to ted byt 50 na 50 - v pulce pripadu bude to cislo mensi nez 0,5 a v takovem pripade i vynasobene bude mensi nez jedna a tedy integer bude 0. V druhe polovine pripadu se to po nasobeni dostane nad jednicku.

Jenom mi nefunguje to s tim sradnem - mam ho umistit do tech funkci pred return? To jsem zkusil a generuje mi to stale stejne hodnoty (tu funkci volam dvakrat hned za sebou a da to stejnou hodnotu, kdyz ji zavolam o neco pozdeji, da to uz jinou, je mozne ze by ten systemovy cas nebo co to bere byl temer stejny?).

Dik moc.

Nahlásit jako SPAM
IP: 212.24.139.–
Nejhorsi, co se Vam v zivote muze prihodit je, ze narazite na blbce...
crAzY^
~ Moderátor
+10
Grafoman
14. 2. 2011   #5
-
0
-

ten srand inicializuj pouze na zacatku programu.

a ten getrand01 bych upravil takto:

int getRand01() {

int ret = (int)(rand() % 2);
return ret;
}

Nahlásit jako SPAM
IP: 89.190.90.–
All you need is vision and time.
nervak0
Věrný člen
15. 2. 2011   #6
-
0
-

Prvni by mi mela generovat nahodne cislo z intervalu <MINRANGE,MAXRANGE>. Druha by mela generovat nahodne nulu nebo jednicku.

Takže první pro <MINRANGE,MAXRANGE> a druhá pro <0,1>.
Teď mi vysvětli proč nepoužiješ stejný postup, tedy po zjednodušení to, co napsal crAzY^.

po nasobeni dostane nad jednicku

A z jedničky bude dvojka, super.

Nahlásit jako SPAM
IP: 213.211.51.–
KIIV
~ Moderátor
+43
God of flame
15. 2. 2011   #7
-
0
-

To Gadael : srand se pouziva treba na zacatku programu..

Nervak: tak tak.. hodi se to pekne na 2---

jinak zbytek po deleni dvema muze hodne zmensit kvalitu generatoru.. ale hadam ze v tomdle pripade to stejne bude jedno

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 6 hostů

Podobná vlákna

Random String — založil JavaLama

Random setRGB? — založil majo

Random hodnota — založil tOreee

Random rátanie — založil Php

RANDOM z TXT — založil kodooo

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý