Výsledky 1 až 25 z 31

Téma: faktorial v c++

Hybrid View

Předcházející příspěvek Předcházející příspěvek   Další příspěvek Další příspěvek
  1. #1

    Standardní faktorial v c++

    Ahojky, muze mi prosim nekdo vysvetlit proc mi tahle fce umi spravne spocitat pouze faktorial do 12! . Pak uz sou vysledky nejaky zcestny
    Predpokladam, ze to bude jen v zobrazeni te hodnoty, protoze do tech 12! to pocita spravne ale zkousel sem to menit na long int, float, ale nic nepomohlo.

    Dikes

    int faktorial1(int f)
    {
    int i;
    for (i = f-1; i >= 2; i--)
    f *= i;
    return f;
    }
    Normalni PC :)

  2. #2
    Senior Member Avatar uživatele Anduril
    Založen
    12.10.2002
    Bydliště
    OVA, OL
    Věk
    42
    Příspěvky
    3 474
    Vliv
    324

    Standardní Re: faktorial v c++

    Imo kdyz by ta fce vypadala takto

    Kód:
    float faktorial1(float f)
    {
     int i;
     for (i = f-1; i >= 2; i--)
         f *= i;
     return f;
    }
    tak to musi davat korektni vysledek...
    ntb: HP EliteBook 8460p i7-2640M | 8GB RAM | 120GB SSD + 500GB HDD | ATi HD6470 | 14" HD+ | W7 PRO
    home: HP Docking Station | HP L2045W | WD 500GB Scorpio Blue USB box
    work: HP Docking Station | HP L2445W
    audio: Epiphone G-400 SG + Sounder Telecaster | E-MU 0202 | Cambridge Audio Azur 340R | Wharfedale Diamond 9.2 | Magnat Betasub 20A | Sennheiser HD555

  3. #3

    Standardní Re: faktorial v c++

    Citace Původně odeslal Anduril Zobrazit příspěvek
    Imo kdyz by ta fce vypadala takto

    Kód:
    float faktorial1(float f)
    {
     int i;
     for (i = f-1; i >= 2; i--)
         f *= i;
     return f;
    }
    tak to musi davat korektni vysledek...

    Ano tohle chodi a umi to spocitat maximalne 34! ... ja predtim zkousel float jen te funkce faktorial1, f sem nechal int...nechapu proc by melo f byt neco jineho nez int, prece faktorial muzu pocitat jen z celych cisel

    Jinak kdyz se pouzije double umi to az 170!

    muze mi ale nekdo vysvetlit proc u te druhe rekurzivni fce muze byt f integer a funguje to stejne jako double u te funkce pres cyklus for ?



    double faktorial1(double f)
    {
    int i;
    for (i = f-1; i >= 2; i--)
    f *= i;
    return f;
    }

    double faktorial2(int f)
    {
    if (f <= 1) return 1;
    return f * faktorial2(f - 1);
    }




    PS: Muze mi nekdo napsat presne omezeni jednotlivych typu:

    short int
    int
    long int
    float
    double
    long double


    Dik vsem za pomoc!
    Normalni PC :)

  4. #4

    Standardní Re: faktorial v c++

    Rozsahy typu zalezi na compileru, podivej se do napovedy...
    GigaByte GA-M55plus-S3G --- A64 3200+ @ 24oo ~ 1,375V BOX --- 2x512 Geil 667 CL4 @ 980 CL5 --- WD2500KS --- Acer AL1721ms --- 1/1 MBit/s via WiFi
    Blog

    09 F9 11 02 9D 74 E3 5B D8 41 56 C5 63 56 88 C0 aneb jeste ze ty "ochrany" programujou rozumny lidi :]

  5. #5

    Standardní Re: faktorial v c++

    Citace Původně odeslal SOAD Zobrazit příspěvek
    PS: Muze mi nekdo napsat presne omezeni jednotlivych typu:

    short int
    int
    long int
    float
    double
    long double


    Dik vsem za pomoc!
    Co takhle pouzit HELP co mas v cecku nebo MS MSDN, ktery mas volne pristupny na internetu

    Predpokladam ze pouzivas MSVC++: Type ranges
    GCC by melo mit vetsinou stejne typy.
    Black holes are where God divided by zero. - Steven Wright
    2600K s AC HF14 | P8P67Deluxe s 16GB DDR3 | GTX1080 s LP2480zx | EVO850 s ICH10R | X-Fi s HD555 | TripleXtreme 360 s HPPS+ | Windows 10 + 7

  6. #6
    Senior Member Avatar uživatele Anduril
    Založen
    12.10.2002
    Bydliště
    OVA, OL
    Věk
    42
    Příspěvky
    3 474
    Vliv
    324

    Standardní Re: faktorial v c++

    Protoze v pripade fce s cyklem ukladas do promenne f vysledek, ktery roste a roste (proto int nestaci), kdezto v pripade rekurzivni fce je hodnota f snizujici se male cislo..napr. tech tvych 12 nebo 34 a podobne..
    ntb: HP EliteBook 8460p i7-2640M | 8GB RAM | 120GB SSD + 500GB HDD | ATi HD6470 | 14" HD+ | W7 PRO
    home: HP Docking Station | HP L2045W | WD 500GB Scorpio Blue USB box
    work: HP Docking Station | HP L2445W
    audio: Epiphone G-400 SG + Sounder Telecaster | E-MU 0202 | Cambridge Audio Azur 340R | Wharfedale Diamond 9.2 | Magnat Betasub 20A | Sennheiser HD555

  7. #7

    Standardní Re: faktorial v c++

    Citace Původně odeslal Anduril Zobrazit příspěvek
    Protoze v pripade fce s cyklem ukladas do promenne f vysledek, ktery roste a roste (proto int nestaci), kdezto v pripade rekurzivni fce je hodnota f snizujici se male cislo..napr. tech tvych 12 nebo 34 a podobne..
    A co myslis, ze je vhodnejsi pouzivat ? Cyklus nebo rekurzivni fci ?

    Haste:dik!
    Normalni PC :)

  8. #8
    Senior Member Avatar uživatele Anduril
    Založen
    12.10.2002
    Bydliště
    OVA, OL
    Věk
    42
    Příspěvky
    3 474
    Vliv
    324

    Standardní Re: faktorial v c++

    V pripade malych cisel je to imho jedno. V pripade vyssich vysledku a velke vstupni hodnoty by mohlo dojit k preteceni zasobniku v pripade rekurzivni funkce.
    ntb: HP EliteBook 8460p i7-2640M | 8GB RAM | 120GB SSD + 500GB HDD | ATi HD6470 | 14" HD+ | W7 PRO
    home: HP Docking Station | HP L2045W | WD 500GB Scorpio Blue USB box
    work: HP Docking Station | HP L2445W
    audio: Epiphone G-400 SG + Sounder Telecaster | E-MU 0202 | Cambridge Audio Azur 340R | Wharfedale Diamond 9.2 | Magnat Betasub 20A | Sennheiser HD555

  9. #9

    Standardní Re: faktorial v c++

    Citace Původně odeslal SOAD Zobrazit příspěvek
    Ahojky, muze mi prosim nekdo vysvetlit proc mi tahle fce umi spravne spocitat pouze faktorial do 12! . Pak uz sou vysledky nejaky zcestny
    Predpokladam, ze to bude jen v zobrazeni te hodnoty, protoze do tech 12! to pocita spravne ale zkousel sem to menit na long int, float, ale nic nepomohlo.

    Dikes

    int faktorial1(int f)
    {
    int i;
    for (i = f-1; i >= 2; i--)
    f *= i;
    return f;
    }


    13! = 6 227 020 800

    Zkontroluj si implementaci intu. Predpokladam, ze je 32 bitova, cili signed int ma pak rozsah od - 2 147 483 648 do + 2 147 483 647. Z toho je jasne, ze tvoje hodnota faktorialu je mimo rozsah, a zobrazi se ti cislo nekde mezi (- 2^31) a (2^32 - 1).
    Abit IP35PRO || C2D E8400 || Corsair Twin2X2048-6400C4 || Zotac 8800GTS 512 || Seasonic S12-650 || Raptor 300GB w SILENTMAXX silencer
    Eizo S1910 || TERRATEC Cinergy 2400i DT || Logitech diNovo Media Desktop w MX1000 || hp LaserJet 1015
    E-MU 1212M || Myryad MI120 || Adam HM1 || CORDA HEADFIVE #470 || Sennheiser HD-650
    Neumím mluvit vznešeně, ale problémy dvou malých lidí jsou v tomhle bláznivém světě jen hromádkou fazolí. ~Dr. G. House~

  10. #10

    Standardní Re: faktorial v c++

    Presne tak u faktorialu se uz dostavas za limit datovych typu v cecku. Pokud potrebujes vysoke faktorily, potom pouzij nejaky funkcionalni interpret jako Haskell nebo Scheme. V cecku je jedina rada pouzit 64bitove(unsigned) typy.
    Black holes are where God divided by zero. - Steven Wright
    2600K s AC HF14 | P8P67Deluxe s 16GB DDR3 | GTX1080 s LP2480zx | EVO850 s ICH10R | X-Fi s HD555 | TripleXtreme 360 s HPPS+ | Windows 10 + 7

  11. #11

    Standardní Re: faktorial v c++

    Alebo pouzit nejaku kniznicu, ktora umoznuje pracovat s lubovolnou presnostou. http://en.wikipedia.org/wiki/Bignum
    1: Asus P2B 1.10 • Celeron 1100@1364/1.8V • 512MB SDRAM • Samsung SP1213N+WD AC28400 • Toshiba XM-6402B+SD-M1212 • PowerColor AR2L Radeon 9100 64MB • 3C900-Combo • Bt848A • ASB-3940UA • AWE-64 • DTK PTP-3007 • VisionMaster 405 • Umax UC630 • Star LC24-200 Colour 2: PCPartner TXB820DS • Cyrix MII PR300/1.8V • 256MB SDRAM • 2xSamsung HD400LD+IT8212F • Accesstek CW4001 • LS-120 • Mystique 4MB • Millennium II 4MB • 3C509 • CMI8329A+Dream MIDI • ADI ProVista E44 • SyncMaster 203B Notebook: DTK FortisPro TOP-5A • P166MMX/1.8V • 80MB EDO • Hitachi 5K80 40GB • 12,1" TFT Router: A-Trend ATC-1425B • i486DX 50@33/5V • 48MB FPM • WD AC14300 • UMC UM9003F • HP PC LAN 16/TP+ Car: Mazda 323P BA • Z5 1489ccm, 65kW@5500rpm, 134Nm@4000rpm

Informace o tématu

Users Browsing this Thread

Toto téma si právě prohlíží 1 uživatelů. (0 registrovaných a 1 anonymních)

Pravidla přispívání

  • Nemůžete zakládat nová témata
  • Nemůžete zasílat odpovědi
  • Nemůžete přikládat přílohy
  • Nemůžete upravovat své příspěvky
  •