Stránka 1 z 2 12 PosledníPoslední
Výsledky 1 až 25 z 31

Téma: faktorial v c++

  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
    323

    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 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~

  4. #4

    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

  5. #5

    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

  6. #6

    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 :)

  7. #7

    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 :]

  8. #8

    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

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

    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

  10. #10

    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 :)

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

    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

  12. #12

    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..
    ale stejne ten vysledek vracis jako double ... nebo mi neco unika?
    Naposledy upravil Fox!MURDER; 03.02.2007 v 19:06.
    Hrrrr, will you stop using people as human driven search engines? Google.com has all the answers you need.

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

    Standardní Re: faktorial v c++

    Citace Původně odeslal Fox!MURDER Zobrazit příspěvek
    ale stejne ten vysledek vracis jako double ... nebo mi neco unika?
    Ted te asi nechapu...
    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

  14. #14

    Standardní Re: faktorial v c++

    Citace Původně odeslal Anduril Zobrazit příspěvek
    Ted te asi nechapu...
    sry, quote spatnyho prispevku ... mmnt opravim to ...
    Hrrrr, will you stop using people as human driven search engines? Google.com has all the answers you need.

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

    Standardní Re: faktorial v c++

    Citace Původně odeslal Fox!MURDER Zobrazit příspěvek
    ale stejne ten vysledek vracis jako double ... nebo mi neco unika?
    Jj, vysledek vracis jako double, jenze v pripade funkce s cyklem slouzi ten vstupni parametr zaroven jako docasna promenna pro drzeni vysledku funkce, ktery musi byt double, tedy i parametr musi byt double...pokud bych nezavedl pro vysledek nejakou jinou promennou.
    V pripade rekurzivni funkce staci pro parametr imho int proto, ze drzi hodnoty pouze - napr. v pripade faktorialu 3 - 3, 2 a 1 a vysledek se pocita na zasobniku, ten je pak double, protoze tam uz jsou vypoctene vyssi hodnoty v pripade vyssich "f".
    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

  16. #16

    Standardní Re: faktorial v c++

    Citace Původně odeslal Anduril Zobrazit příspěvek
    Jj, vysledek vracis jako double, jenze v pripade funkce s cyklem slouzi ten vstupni parametr zaroven jako docasna promenna pro drzeni vysledku funkce, ktery musi byt double, tedy i parametr musi byt double...pokud bych nezavedl pro vysledek nejakou jinou promennou.
    V pripade rekurzivni funkce staci pro parametr imho int proto, ze drzi hodnoty pouze - napr. v pripade faktorialu 3 - 3, 2 a 1 a vysledek se pocita na zasobniku, ten je pak double, protoze tam uz jsou vypoctene vyssi hodnoty v pripade vyssich "f".
    aaa mea culpa ... stacilo si celej thread precist podruhy a poradne ... (ignorujte me )
    Hrrrr, will you stop using people as human driven search engines? Google.com has all the answers you need.

  17. #17

    Standardní Re: faktorial v c++

    mam jeste jeden problem...sice to nesouvisi s tim faktorialem, ale nechci zakladat novy thread...

    nejde mi prelozit jeden zdrojak a chyba by mela byt na tomhle radku:


    dif *= (a / ((2^b)* bf)) * ((x^c)/c) ;


    Compilator mi pise : invalid operands of types `int' and `double' to binary `operator^' a na stejne radce jeste invalid operands of types `double' and `double' to binary `operator^'

    vsechny promenne mam double!
    Normalni PC :)

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

    Standardní Re: faktorial v c++

    ^ neznamena v Cecku mocninu, nybrz binarni operator XOR (exclusive OR)... pokud teda to mela byt v tvem pripade mocnina..
    pokud skutecne XOR, pak potrebujec datovy typ integer, na double bitove operatory nefunguji, coz ti i hlasil prekladac...
    Naposledy upravil Anduril; 03.02.2007 v 23:00.
    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

  19. #19

    Standardní Re: faktorial v c++

    Citace Původně odeslal Anduril Zobrazit příspěvek
    ^ neznamena v Cecku mocninu, nybrz binarni operator XOR (exclusive OR)...
    aha to mi nejak uslo )
    A jakej je teda operand pro mocninu ?
    Normalni PC :)

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

    Standardní Re: faktorial v c++

    Operator operand je vstupni hodnota pro operaci.
    Operator mocniny v cecku neni, muzes vyuzit napr. fci:
    Kód:
    double pow (double base, double power)
    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

  21. #21

    Standardní Re: faktorial v c++

    Citace Původně odeslal Anduril Zobrazit příspěvek
    Operator operand je vstupni hodnota pro operaci.
    Operator mocniny v cecku neni, muzes vyuzit napr. fci:
    Kód:
    double pow (double base, double power)
    teda chtel sem rict operator
    takze double pow (e,x) je ekvivalent e^x ?

    jinak dik za pomoc i v pozdnich hodinach, sem si myslel, ze uz se na me dneska vsichni vykaslou )
    Normalni PC :)

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

    Standardní Re: faktorial v c++

    S tou fci je to presne tak
    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

  23. #23

    Standardní Re: faktorial v c++

    Citace Původně odeslal Anduril Zobrazit příspěvek
    Operator operand je vstupni hodnota pro operaci.
    Operator mocniny v cecku neni, muzes vyuzit napr. fci:
    Kód:
    double pow (double base, double power)
    A nebo si napsat svou fci.
    Kód:
    int mocnina(int m,int n) //  m na n
    {
     int p=1; 
     for(int i=1;i<=n;++i)p=p*m; 
    return p;
    }
    QuadCore Q6600, GF 8800GT....workstation
    DualCore PentiumD 805 (2.66GHz@3.4GHz), Asus P5P800se,2x512 MB DDR400, DVB-T Jetway PCI tuner, 2x LCD Benq FP71E+ on Leadtek Winfast A350XT. Watercooling
    Notebook: IBM T22, 512MB RAM


  24. #24

    Standardní Re: faktorial v c++

    ...ta jednoducha funkce ale tise predpoklada, ze n je kladne a cele cislo
    Lenovo Thinkpad X220 (i5 2410M, 16GB RAM, HD3000, 12,5" IPS, 1TB HDD Seagate 7mm, 120GB mSATA Crucial M4), Mini Dock Plus Ser. 3, 29" LG 29UM65 + 22" Eizo S2202W

  25. #25

    Standardní Re: faktorial v c++

    Citace Původně odeslal zivan Zobrazit příspěvek
    ...ta jednoducha funkce ale tise predpoklada, ze n je kladne a cele cislo
    Cele je urcite, ale kladne ? Tot spravna otazka. Viz definice vstupni promenne n.
    C2D Wolfheart stabilized...CoolingSys completed...Aurora 3D Black...full 120mm Wolfheart
    WinXP && Gentoo Powered Wolfheart http://img215.imageshack.us/my.php?i...pgentooqt2.jpg
    Intel Core2Duo E6300 1.86@3.2GHz cooled by Ninja Plus| Gigabyte DS4 | 1024MB Kingston 750@920MHz | sound | Gigabyte X1650Pro SilentPipe II | TEAC 40x & Toshiba DVD-RW | WD800JB 80GB | Logitech MX510 | Fortron 300W NP(PN) | MS Sidewinder Strategic Commander|Acer 1721hm
    C366 2@1,85V 32MB RAM, Slackware 9.1 router connected to Chello

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
  •