Portál AbcLinuxu, 12. května 2025 05:06

Dotaz: Fce rand() v C

8.11.2005 20:45 Vasicek
Fce rand() v C
Přečteno: 1344×
Odpovědět | Admin
Dobry den,

z jednoho sveho projektu jsem vytahl (a zjednosil) uryvek nize.
int X()
{
        srand(time(NULL));
        int i = rand() % 5;
        return i;
}

int main()
{
        for(int i = 0; i < 20; i++)
                std::cout << X() << std::endl;

        return 0;
}
Pokud toto zkompiluji a spustim tak mi vytiskne 20x stejne cislo. Delsi dobu mi to vrtalo v hlave az jsem prisel na banalni vec - premistit inicializaci generovace do main() a pak uz mi haze seznam 20 nahodnych cisel (v rozsahu, kterem chci). Ja bych se spise chtel zeptat, proc se to takto deje?
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Luboš Doležel (Doli) avatar 8.11.2005 20:55 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Rozbalit Rozbalit vše Re: Fce rand() v C
Odpovědět | | Sbalit | Link | Blokovat | Admin
Protože vám time(NULL) dvacetkrát inicializuje generátor stejným číslem.
8.11.2005 20:59 zabza | skóre: 52 | blog: Nad_sklenkou_cerveneho
Rozbalit Rozbalit vše Re: Fce rand() v C
Odpovědět | | Sbalit | Link | Blokovat | Admin
jojo, příliš rychlý počítač... zkuste
... ) { 
std::cout << X() << std::endl;
sleep(1);
}
8.11.2005 21:13 Jan Martinek | skóre: 43 | blog: johny | Brno
Rozbalit Rozbalit vše Re: Fce rand() v C
Odpovědět | | Sbalit | Link | Blokovat | Admin
Rád bych viděl tu rutinu, která generuje čísla v daném rozsahu. Jestli požadujete rovnoměrné rozdělení, tak to není tak jednoduché, jak by se mohlo zdát. Máte to takhle nebo nějak jinak?
int random_int(int min, int max){
/*returns random number from min to max
(INCLUDING MIN AND MAX)*/

  int diffp1 = max - min + 1; /*difference plus one */
  int bucket_size = RAND_MAX/diffp1;
  int a;

  do{
    a = rand() / bucket_size;
  }while (a >= diffp1);
  return a + min;
}

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.