abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 01:00 | Nová verze

    ESPHome, tj. open source systém umožňující nastavovat zařízení s čipy ESP (i dalšími) pomocí konfiguračních souborů a připojit je do domácí automatizace, například do Home Assistantu, byl vydán ve verzi 2024.4.0.

    Ladislav Hagara | Komentářů: 0
    včera 22:11 | IT novinky Ladislav Hagara | Komentářů: 0
    včera 20:55 | Nová verze

    Neziskové průmyslové konsorcium Khronos Group vydalo verzi 1.1 specifikace OpenXR (Wikipedie), tj. standardu specifikujícího přístup k platformám a zařízením pro XR, tj. platformám a zařízením pro AR (rozšířenou realitu) a VR (virtuální realitu). Do základu se z rozšíření dostalo XR_EXT_local_floor. Společnost Collabora implementuje novou verzi specifikace do platformy Monado, tj. open source implementace OpenXR.

    Ladislav Hagara | Komentářů: 2
    včera 17:22 | Nová verze

    Byla vydána nová verze 0.38.0 multimediálního přehrávače mpv (Wikipedie) vycházejícího z přehrávačů MPlayer a mplayer2. Přehled novinek, změn a oprav na GitHubu. Požadován je FFmpeg 4.4 nebo novější a také libplacebo 6.338.2 nebo novější.

    Ladislav Hagara | Komentářů: 1
    včera 17:11 | Nová verze

    ClamAV (Wikipedie), tj. multiplatformní antivirový engine s otevřeným zdrojovým kódem pro detekci trojských koní, virů, malwaru a dalších škodlivých hrozeb, byl vydán ve verzích 1.3.1, 1.2.3 a 1.0.6. Ve verzi 1.3.1 je mimo jiné řešena bezpečnostní chyba CVE-2024-20380.

    Ladislav Hagara | Komentářů: 1
    včera 12:11 | IT novinky

    Digitální a informační agentura (DIA) oznámila (PDF, X a Facebook), že mobilní aplikace Portál občana je ode dneška oficiálně venku.

    Ladislav Hagara | Komentářů: 7
    včera 05:11 | Komunita

    #HACKUJBRNO 2024, byly zveřejněny výsledky a výstupy hackathonu města Brna nad otevřenými městskými daty, který se konal 13. a 14. dubna 2024.

    Ladislav Hagara | Komentářů: 2
    17.4. 17:55 | IT novinky

    Společnost Volla Systeme stojící za telefony Volla spustila na Kickstarteru kampaň na podporu tabletu Volla Tablet s Volla OS nebo Ubuntu Touch.

    Ladislav Hagara | Komentářů: 3
    17.4. 17:44 | IT novinky

    Společnost Boston Dynamics oznámila, že humanoidní hydraulický robot HD Atlas šel do důchodu (YouTube). Nastupuje nová vylepšená elektrická varianta (YouTube).

    Ladislav Hagara | Komentářů: 1
    17.4. 15:11 | Nová verze

    Desktopové prostředí LXQt (Lightweight Qt Desktop Environment, Wikipedie) vzniklé sloučením projektů Razor-qt a LXDE bylo vydáno ve verzi 2.0.0. Přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 5
    KDE Plasma 6
     (68%)
     (10%)
     (2%)
     (19%)
    Celkem 556 hlasů
     Komentářů: 4, poslední 6.4. 15:51
    Rozcestník

    Dotaz: c++ mocnina na n

    22.11.2012 17:28 marek33
    c++ mocnina na n
    Přečteno: 8060×
    Ahoj mám takový dotaz, v c++ jsem zkoušel vytvořit mocninu na n-tou, nevíte někdo jak na to ??

    Řešení dotazu:


    Odpovědi

    22.11.2012 17:34 chrono
    Rozbalit Rozbalit vše Re: c++ mocnina na n
    V <cmath> je funkcia std::pow
    22.11.2012 17:52 marek33
    Rozbalit Rozbalit vše Re: c++ mocnina na n
    myslel jsem pomocí funkce if
    22.11.2012 18:12 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: c++ mocnina na n
    Vyšel bych z: IF „hlad“ GOTO „lednice“
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    22.11.2012 18:14 Jary | skóre: 30 | blog: Jary má blog | Dům
    Rozbalit Rozbalit vše Re: c++ mocnina na n
    if není funkce. A když už bys to rád dělal nějak divně složitě, proč to neuděláš pomocí operátorů & | ^?
    .sig virus 3.2_cz: Prosím, okopírujte tento text do vaší patičky. GitHub
    22.11.2012 18:16 chrono
    Rozbalit Rozbalit vše Re: c++ mocnina na n
    Dalo by sa použiť aj if, ale rozumnejšie by mohlo byť for (a if pre n=0 alebo 1)
    22.11.2012 18:29 l4m4
    Rozbalit Rozbalit vše Re: c++ mocnina na n
    Chceš kód obsaující if? Chceš efektivní algoritmus pro celočíselné mocniny? Všechno lze zařídit!
    double mocnina(double x, int i)
    {
        double r = 1.0;
        if (!i)
            return 1.0;
        bool negative = false;
        if (i < 0) {
            negative = true;
            i = -i;
        }
        for ( ; ; ) {
            if (i & 1)
                r *= x;
            if (!(i >>= 1))
                break;
            x *= x;
        }
        return negative ? 1.0/r : r;
    }
    
    Jen nevím, jak budeš vysvětlovat, jak to funguje...
    22.11.2012 19:30 Radovan
    Rozbalit Rozbalit vše Re: c++ mocnina na n
    Pěkné, ale říká se "co je malé, to je hezké" :-D
    double mocnina(double x,int y)
           {
           return x*(y>1?mocnina(x,--y):1);
           }
    22.11.2012 19:43 l4m4
    Rozbalit Rozbalit vše Re: c++ mocnina na n
    Tam ovšem není žádný if. Cílem bylo mít tam nějaké ify ;)
    22.11.2012 20:02 Radovan
    Rozbalit Rozbalit vše Re: c++ mocnina na n
    If tam je, jenomže maskovaný ;-)
    double mocnina(double x,int y)
           {
           if (y>1)
              return x*mocnina(x,--y);
           else
              return 1;
           }
    Ale jinak je to blbost dobrá akorát na hraní.
    22.2.2013 12:32 libco
    Rozbalit Rozbalit vše Re: c++ mocnina na n

    Je tam chyba.

    Má tam byť:

    else

    return x;

    22.2.2013 13:23 Vtipnéř | skóre: 38 | blog: Vtipnéřův blog | Brno
    Rozbalit Rozbalit vše Re: c++ mocnina na n
    Spíš

    if (y>0)

    Jirka
    Opening Windows is better than washing them. Clearing Windows (e.g. erasing or deleting) is even much better.
    22.11.2012 19:45 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: c++ mocnina na n
    "Hezké" možná, ale máte podstatně horší časovou složitost vůči exponentu a ještě budete muset spoléhat na inteligenci překladače, abyste se nedostal do problémů s přetečením zásobníku.
    22.11.2012 19:47 l4m4
    Rozbalit Rozbalit vše Re: c++ mocnina na n
    Jo, a samozřejmě tohle počítá mocnina(x, 1000000) pomocí 999999 násobení, kdežto mnou uvedený kód pomocí 27 násobení ;)
    23.11.2012 00:50 lertimir | skóre: 64 | blog: Par_slov
    Rozbalit Rozbalit vše Re: c++ mocnina na n
    Takhle to dopadne, když programátor kašle na výpočetní složitost algoritmů.
    23.11.2012 09:36 l4m4
    Rozbalit Rozbalit vše Re: c++ mocnina na n
    Popravdě řečeno, takle by ten algoritmus byl vhodný pro GMP (kde samozřejmě mocnina nějak podobně implementována je), protože tam je cena nějakých bitových operací a dokonce i podmínek zanedbatelná vůči ceně násobení dvou čísel, a především pro jiné typy než double, které zvládne __builtin_powi()...

    Jelikož jsou nejčastěji zapotřebí nízké mocniny, bylo by vhodné pro ně konkrétní výpočty zadrátovat -- a navíc to celé hodit do makra s __builtin_constant_p(), aby se to pro nízké předem známé mocniny optimálně inlinovalo.

    A když se bavíme o C++, tak lze ostatně téhož dosáhnout šablonou, kde je ta mocnina coby parametr, a specializací pro nízké mocniny. Akorát nevím, zda by tam pak byly nějaké ify ;)
    22.11.2012 19:36 Sten
    Rozbalit Rozbalit vše Re: c++ mocnina na n
    Když jde o C++, použil bych šablony, ať to počítá rovnou překladač :-)
    template <int base,
              int pow>
    struct mocnina
    {
        enum {
            value = base * mocnina<base, pow - 1>::value
        };
    };
    
    template <int base>
    struct mocnina<base, 0>
    {
        enum {
            value = 1
        };
    };
    
    23.11.2012 09:39 l4m4
    Rozbalit Rozbalit vše Re: c++ mocnina na n
    error: template instantiation depth exceeds maximum of 900
    18.2.2013 17:16 Ivan
    Rozbalit Rozbalit vše Re: c++ mocnina na n
    Na MSVC je max hloubka rekurze sablon 2500. Na g++ je konfigurovatelna (je na to nejaky parameter).

    22.2.2013 23:18 potato
    Rozbalit Rozbalit vše Re: c++ mocnina na n
    Na druhé straně potřebuje-li kód úroveň vnoření šablon větší než 900, někde je cosi podezřelého...
    22.11.2012 21:22 rastos | skóre: 62 | blog: rastos
    Rozbalit Rozbalit vše Re: c++ mocnina na n
    jsem zkoušel vytvořit
    Ano? A ako ďaleko si sa dostal?
    pavlix avatar 22.11.2012 23:29 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: c++ mocnina na n
    A já myslel, že domácí úkoly se řeší samostatně.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    Řešení 3× (Xóža Hňabaj, Voty, Ash)
    23.11.2012 10:33 pesspi | skóre: 7 | blog: hateblog
    Rozbalit Rozbalit vše Re: c++ mocnina na n
    int mocnina(int x,y) {
      if (y == 2) return x*x;
      if (y == 3) return x*x*x;
      if (y == 4) return x*x*x*x;
      if (y == 5) return x*x*x*x*x;
      if (y == 6) return x*x*x*x*x*x;
      if (y == 7) return x*x*x*x*x*x*x;
      if (y == 8) return x*x*x*x*x*x*x*x;
      if (y == 9) return x*x*x*x*x*x*x*x*x;
      if (y == 10) return x*x*x*x*x*x*x*x*x*x;
      if (y == 11) return x*x*x*x*x*x*x*x*x*x*x;
      if (y == 12) return x*x*x*x*x*x*x*x*x*x*x*x;
      if (y == 13) return x*x*x*x*x*x*x*x*x*x*x*x*x;
      if (y == 14) return x*x*x*x*x*x*x*x*x*x*x*x*x*x;
      if (y == 15) return x*x*x*x*x*x*x*x*x*x*x*x*x*x*x;
      if (y == 16) return x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x;
      if (y == 17) return x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x;
      if (y == 18) return x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x;
      if (y == 19) return x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x;
      return x;
    }
    Je to najlepsia verzia lebo obsahuje najviac ifov. Pre profesionalnu verziu si na zaciatok mozes doplnit assert(y<20);
    23.11.2012 11:12 chrono
    Rozbalit Rozbalit vše Re: c++ mocnina na n
    Prípadne sa tam môže pridať ešte jedno if a rekurzia. :)
    18.2.2013 17:10 Pavel Kocman
    Rozbalit Rozbalit vše Re: c++ mocnina na n
    Dělávali jsme to pomocí for ciklu, tím mohla být mocnina doopravdy libovolná, ale už si nevzpomínám. Taky to potřebuju.
    22.2.2013 12:07 libco
    Rozbalit Rozbalit vše Re: c++ mocnina na n

    double mocnina_x(double cislo, int umocni_na)

    {

         int i, vysledok = 1;

         for (i = 1; i <= umocni_na; i++)

         vysledok *= cislo;

         return vysledok;

    }

    22.2.2013 17:36 Bill Gates
    Rozbalit Rozbalit vše Re: c++ mocnina na n
    Mozna by se to dalo jeste zoptimalizovat z pohledu delky kodu programu ... Treba na arduinu, kde obcas setrime kazdy bajt by byla lepsi verze ponekud modifikovana (viz nize), dle testovaci kompilace to vychazi pro arduino Mega o 228 bytu lip :) a 228 bajtu na arduinu = misto na plno dalsich funkci. Tedy za predpokladu ze potrebujeme nezbytne nutne pouzit ify :D

    void setup() {
    int x=10;
    int y=10;
    int q=mocnina(x,y);
    Serial.println(q);
    }
    
    int mocnina(int x,int y) {
      if (y == 2) return x*x;
      if (y == 3) return x*x*x;
      if (y == 4) return x*x*x*x;
      if (y == 5) return x*x*x*x*x;
      if (y == 6) return x*x*x*x*x*x;
      if (y == 7) return x*x*x*x*x*x*x;
      if (y == 8) return x*x*x*x*x*x*x*x;
      if (y == 9) return x*x*x*x*x*x*x*x*x;
      if (y == 10) return x*x*x*x*x*x*x*x*x*x;
      if (y == 11) return x*x*x*x*x*x*x*x*x*x*x;
      if (y == 12) return x*x*x*x*x*x*x*x*x*x*x*x;
      if (y == 13) return x*x*x*x*x*x*x*x*x*x*x*x*x;
      if (y == 14) return x*x*x*x*x*x*x*x*x*x*x*x*x*x;
      if (y == 15) return x*x*x*x*x*x*x*x*x*x*x*x*x*x*x;
      if (y == 16) return x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x;
      if (y == 17) return x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x;
      if (y == 18) return x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x;
      if (y == 19) return x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x;
      return x;
    }
    
    void loop() { }
    

    Binary sketch size: 4,084 bytes

    void setup() {
    int x=10;
    int y=10;
    int q=mocnina(x,y);
    Serial.println(q);
    }
    
    int mocnina(int c,int y) {
      int x=c;
      if (y >= 2) x*=c;
      if (y >= 3) x*=c;
      if (y >= 4) x*=c;
      if (y >= 5) x*=c;
      if (y >= 6) x*=c;
      if (y >= 7) x*=c;
      if (y >= 8) x*=c;
      if (y >= 9) x*=c;
      if (y >= 10) x*=c;
      if (y >= 11) x*=c;
      if (y >= 12) x*=c;
      if (y >= 13) x*=c;
      if (y >= 14) x*=c;
      if (y >= 15) x*=c;
      if (y >= 16) x*=c;
      if (y >= 17) x*=c;
      if (y >= 18) x*=c;
      if (y >= 19) x*=c;
      return x;
    }
    
    void loop() { }
    
    
    Binary sketch size: 3,856 bytes

    22.2.2013 17:42 Kit
    Rozbalit Rozbalit vše Re: c++ mocnina na n
    Zkus to ještě porovnat s tím, co napsal libco. 3,856 B mi připadá strašně moc.
    22.2.2013 18:09 Bill Gates
    Rozbalit Rozbalit vše Re: c++ mocnina na n
    void setup() {
    int x=10;
    int y=10;
    int q=mocnina(x,y);
    Serial.println(q);
    }
    
    
    double mocnina(double cislo, int umocni_na)
    {
    int i, vysledok = 1;
    for (i = 1; i <= umocni_na; i++)
    vysledok *= cislo;
    return vysledok;
    }
    
    void loop() { }
    
    Binary sketch size: 4,068 bytes

    void setup() {
    int x=10;
    int y=10;
    int q=mocnina(x,y);
    Serial.println(q);
    }
    
    
    int mocnina(int cislo, int umocni_na)
    {
    int i, vysledok = 1;
    for (i = 1; i <= umocni_na; i++)
    vysledok *= cislo;
    return vysledok;
    }
    
    void loop() { }
    
    Binary sketch size: 3,454 bytes
    22.2.2013 18:21 Bill Gates
    Rozbalit Rozbalit vše Re: c++ mocnina na n
    void setup() {
    int x=10;
    int y=10;
    int q=mocnina(x,y);
    Serial.println(q);
    }
    
    
    double mocnina(double x,int y) {
    return x*(y>1?mocnina(x,--y):1);
    }
           
    void loop() { }
    
    Binary sketch size: 3,950 bytes

    void setup() {
    int x=10;
    int y=10;
    int q=mocnina(x,y);
    Serial.println(q);
    }
    
    
    int mocnina(int x,int y) {
    return x*(y>1?mocnina(x,--y):1);
    }
           
    void loop() { }
    Binary sketch size: 3,474 bytes
    22.2.2013 18:57 Ivan
    Rozbalit Rozbalit vše Re: c++ mocnina na n
    A to co stenovo reseni? Vysledek vypocita kompilator behem kompilace a do zdrojaku dosadi primo konstantu:
    0000000000400578 <main>:
      400578:       48 83 ec 08             sub    $0x8,%rsp
      40057c:       48 be 00 e4 0b 54 02    mov    $0x2540be400,%rsi
      400583:       00 00 00
      400586:       bf 98 06 40 00          mov    $0x400698,%edi
      40058b:       31 c0                   xor    %eax,%eax
      40058d:       e8 d6 fe ff ff          callq  400468 <printf@plt>
      400592:       5a                      pop    %rdx
      400593:       31 c0                   xor    %eax,%eax
      400595:       c3                      retq
    
    0x2540be400 = 10^10

    Založit nové vláknoNahoru

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

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.