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

Nahodna cisla – C / C++ – Fórum – Programujte.comNahodna cisla – C / C++ – Fórum – Programujte.com

 

10. 8. 2008   #1
-
0
-

Generuji nahodna cisla pomoci teto funkce

int GetRandomInt(int ceil){

return ceil*rand()/RAND_MAX;
}
, predtim sazmozrejme inicializuji seed pomoci srand((int)time(NULL)). Porad mi to ale vraci tu samou sadu cisel. Pomoci debuggeru jsem zjistil, ze to time porad vraci 0, to same i kdyz misto NULL do toho time dam 0. Nevite kde je problem?

Nahlásit jako SPAM
IP: 81.30.238.–
Prosím, jestli potřebujete s něčím poradit,zeptejte se na fóru. Jakýkoliv bezdůvodný pokus mě kontaktovat skončí okamžitým přidáním do ignore listu![br][br] Současný počet osob, které to nepochopily: 7
Jura
~ Anonymní uživatel
637 příspěvků
10. 8. 2008   #2
-
0
-

Zdravím,

je zajímavé, že time vrací pořád nulu, ale každopádně z toho popisu a úryvku kódu těžko někdo pozná, co je špatně.

Nahlásit jako SPAM
IP: 85.207.192.–
Jura
~ Anonymní uživatel
637 příspěvků
10. 8. 2008   #3
-
0
-

Jo a ještě otázka: Chová se to stejně i v release verzi?

Nahlásit jako SPAM
IP: 85.207.192.–
10. 8. 2008   #4
-
0
-

Ja jedu na release DLL porad, protoze na debug mi STL list hazi nejakou chybu linkeru. Ted se mi ten randomizer docela spravil. Udelalo to tohle:

int GetRandomInt(int ceil){

rand(); // tohle
return ((ceil+1)*rand())/RAND_MAX;
}


Moc to nechapu, ale jakz takz to funguje.

Nahlásit jako SPAM
IP: 81.30.238.–
Prosím, jestli potřebujete s něčím poradit,zeptejte se na fóru. Jakýkoliv bezdůvodný pokus mě kontaktovat skončí okamžitým přidáním do ignore listu![br][br] Současný počet osob, které to nepochopily: 7
mephi0
Expert
10. 8. 2008   #5
-
0
-

nechapem vyznam tej f-cie. Ale máš použite celočiselne delenie. Výraz A/B vracia 0 keď A < B.

Nahlásit jako SPAM
IP: 85.248.56.–
Program nemusi fungovat rychle, staci ze funguje dostatecne rychle.
10. 8. 2008   #6
-
0
-

Ja vim;)

Amysli se nad tim - rand vraci cislo 0-RAND_MAX a toje vynasobeno hodnotou "ceil". Z toho vyplyva, ze ve valne vetsine pripadu bude A>B, takze vysledek bude v rozsahu 0-ceil. A<B jen tehdy, kdy ma byt opravdu vygenerovana 0.

Nahlásit jako SPAM
IP: 81.30.238.–
Prosím, jestli potřebujete s něčím poradit,zeptejte se na fóru. Jakýkoliv bezdůvodný pokus mě kontaktovat skončí okamžitým přidáním do ignore listu![br][br] Současný počet osob, které to nepochopily: 7
KIIV
~ Anonymní uživatel
8632 příspěvků
16. 8. 2008   #7
-
0
-

linker vraci nejakou chybu? napriklad ze pouziva implicitni deklaraci time nebo co?

Nahlásit jako SPAM
IP: 77.237.136.–
16. 8. 2008   #8
-
0
-

Ne, moc to nechapu. od te doby se mi ten rand podarilo rozjet vlozenim toho jednoho randu navic (od te doby jsem ho uz navio odebral a stejne to jede). Nejak mi ta funkce prijde dost naladova.

Anis tim time poradne nevim jak to bylo, mozna jen mel debugger taky spatnou naladu a nechtelo se mu ukazovat tu hodnotu.

Nahlásit jako SPAM
IP: 81.30.238.–
Prosím, jestli potřebujete s něčím poradit,zeptejte se na fóru. Jakýkoliv bezdůvodný pokus mě kontaktovat skončí okamžitým přidáním do ignore listu![br][br] Současný počet osob, které to nepochopily: 7
KIIV
~ Anonymní uživatel
8632 příspěvků
18. 8. 2008   #9
-
0
-

jo jeste jedna drobnustka... pretypuj jeden parametr toho / na float :D by ciste teoreticky mohlo hrozit ze se provede celociselne deleni a budes tam mit furt nulu :) ikdyz jestli tvrdis ze ti to neco vraci tak to asi nebude tento pripad

Nahlásit jako SPAM
IP: 80.188.94.–
ima
~ Anonymní uživatel
3 příspěvky
20. 8. 2008   #10
-
0
-

hmm... vite, ja jsem v c-cku teprve zacatecnik a moc nerozumim, o cem je rec, ale zrovna jsem tady, abych zistila, proc sakra neumim v c generovat nahodni cisla, kdyz v pascalu to bylo tak jednoduchy. nemohli by ste mi nekdo vysvetlit, jak na tu rand() funkci?

Nahlásit jako SPAM
IP: 85.216.182.–
Matrix17
~ Anonymní uživatel
300 příspěvků
20. 8. 2008   #11
-
0
-

To ima : Ani v C/C++ to není nic těžkýho. Stačí si jen includovat knihovny time.h a stdlib.h pro C a v C++ ctime a cstdlib případně lze použít i knihovny C. Pak "zapneš" generování podobně jako v pascalu a už jen generuješ čísla.

Příklad:



#include <stdio.h>
#include <stdlib.h>
#include <time.h>

const int DOLNI = 10;
const int HORNI = 25;

int main(void)
{
int cislo;

srand(time(0)); //zapne generování
cislo = DOLNI + rand() % (HORNI - DOLNI + 1);
printf("Vygenerovane cislo: %d\n", cislo);

system("pause");

return 0;
}

Nahlásit jako SPAM
IP: 78.156.128.–
H4wk.cz
~ Anonymní uživatel
54 příspěvků
27. 8. 2008   #12
-
0
-

Takhle ti to bude fungovat:

int GetRandomInt(int ceil){

return ceil*((float)rand()/RAND_MAX);
}
Vtip je v tom, ze tam mas celociselne deleni, ceil*rand() bude ve vetsine pripadu mensi nez RAND_MAX, protoze ti to pretece do zapornych cisel. Takhle ziskas pomoci (float)rand()/RAND_MAX desetinne cislo v rozsahu <0,1>, kterym vynasobis ceil.

Nahlásit jako SPAM
IP: 85.71.138.–
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, 146 hostů

Podobná vlákna

Náhodná čísla — založil Petr

Náhodná čisla — založil Zke

(pseudo)náhodná čísla — založil Noneus

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ý