Portál AbcLinuxu, 25. dubna 2024 06:04


Dotaz: Rand v C++

7.4.2012 12:46 MarF
Rand v C++
Přečteno: 502×
Odpovědět | Admin
Dobrý den,

chtěl bych vytvořit fci, která bude mít tři vstupní proměnné: spodní a horní limit a počet des. míst.

int generuj(int a, int b) //generuje int cislo v rozsahu od a do b, d=pocet des. míst { float c; c=(rand()%99(b-a))+a;

return c; }

Jak ovládat počet míst za des. tečkou?
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

7.4.2012 13:36 lacik
Rozbalit Rozbalit vše Re: Rand v C++
Odpovědět | | Sbalit | Link | Blokovat | Admin
C++ neznám, ale asi výrazem:

x=již vygenerované náhodné číslo

d=počet desetinných míst

intVal - fce odřízne desetinnou část: intVal(12.34)=12

x=(intVal(x*d))/d
7.4.2012 14:15 MarF
Rozbalit Rozbalit vše Re: Rand v C++
A ta fce intVal je ve které knihovně?
7.4.2012 15:07 MadCatX
Rozbalit Rozbalit vše Re: Rand v C++
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nevím, jestli jste to myslel právě takto, nicméně tohle by mělo fungovat
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <iostream>

double generuj(int min, int max, int prec)
{
   long ex = pow(10, prec);
   double r = rand()%((max - min) * ex) + (min * ex);
   return r / ex;
}

int main(int argc, char** argv)
{
   srand(time(NULL));
   for (int i = 0; i < 10; i++)
      printf("%.10f\n", generuj(1, 10, 5));

   return 0;
}
Dává výstup
7.1701900000
3.3656600000
9.9872200000
7.2741900000
9.9646100000
8.9658100000
5.6601800000
4.9083500000
6.8956500000
2.4416500000
Funkce bude fungovat rozumně samozřejmě jen tehdy, pokud se nebudete blížit k limitům přesnosti zvoleného datového typu.
7.4.2012 16:42 MarF
Rozbalit Rozbalit vše Re: Rand v C++
Díky. Mám ale problém s fcí pow

Error 1 error C2668: 'pow' : ambiguous call to overloaded function c:\documents and settings\ibm r50e\dokumenty\visual studio 2008\projects\pokusy\pokusy\h1.cpp 42 pokusy

knihovnu math jsem nahrál.

7.4.2012 17:23 oiufoj
Rozbalit Rozbalit vše Re: Rand v C++
7.4.2012 17:25 oiufoj
Rozbalit Rozbalit vše Re: Rand v C++
Pokud teda nemas C++11 prekladac, nemuzes v pow pouzit cela cisla.
7.4.2012 17:52 MarF
Rozbalit Rozbalit vše Re: Rand v C++
Můžeš to laikovi blíže vysvětlit? C++11 je verze? Když nemohu použít int, znamená to, že float ano?
7.4.2012 18:10 MarF
Rozbalit Rozbalit vše Re: Rand v C++
Jo, už to mám, double...

Díky
8.4.2012 02:26 l4m4
Rozbalit Rozbalit vše Re: Rand v C++
Funkce bude fungovat rozumně samozřejmě jen tehdy, pokud se nebudete blížit k limitům přesnosti zvoleného datového typu.
Budou-li se výsledky např. nějak kumulovat, tak může fungovat zcela nepoužitelně, protože různá čísla budou mít různé pravděpodobnosti.

Je zapotřebí

(1) Spočíst, kolik různých čísel to může generovat - N.

(2) Při generování čísla zahodit ta, která jsou větší než (RAND_MAX/N)*N.

(3) Pokud číslo není zahozeno, vzít ho modulo N a pak ho přepočíst na možný výsledek (to už je mapování 1:1).

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.