přejít na obsah přejít na navigaci

Linux E X P R E S, Programovanie v jazyku C++: Tvorba funkcii (2)

POINT.X (2018-19)

Programovanie v jazyku C++: Tvorba funkcii (2)

C++

Naučte sa pracovať s návratovou hodnotou funkcii. Uvidíte aj implementáciu faktoriálu s využitím funkcie.


reklama

Návratová hodnota funkcii

Pre začiatok si vytvorme program, ktorý na základe vstupu od používateľa vyhodnotí, čí zadané číslo je párne alebo nie. Celú logiku vyhodnotenia natlačíme do main funkcie.

#include <iostream>
using namespace std;

int main()
{
    int cislo;
    bool jeParne;
    cout << "Zadaj cele cislo: ";
    cin >> cislo;
    if(cislo == 0)
    {
        cout << "Zadal si " << cislo << " a tak zopakuj volbu!\n";
        return 0;
    }

    cout << "Bolo zadane cislo: " << cislo << " a vyhodnocujem, tak trochu strpenia!!!\n";

    if(cislo % 2 == 0)
        jeParne = true;
    else
        jeParne = false;

    if(jeParne)
        cout << "Cislo " << cislo << " je parne!\n";
    else
        cout << "Cislo " << cislo << " je neparne!\n";
    return 0;
}

Ak máme vyhodnotiť len jedno číslo, tak vieme sa s tým popasovať. Čo ak máme viacero čísiel na vyhodnotenie? Praktickým riešením je vytvoriť si funkciu a teraz pozor, bude vracať nejakú určitú návratovú hodnotu. Skúsme teraz vyhodnotiť číslo v našej definovanej funkcii, ktorá vráti pravdivostnú hodnotu, či dané číslo je párne alebo nie.

#include <iostream>
using namespace std;

bool jeParne(int cislo)
{
    if(cislo % 2 == 0)
        return true;
    else
        return false;
}

int main()
{
    int cislo;
    cout << "Zadaj cele cislo: ";
    cin >> cislo;

    if(cislo == 0)
    {
        cout << "Zadal si " << cislo << " a tak zopakuj volbu!\n";
        return 0;
    }

    cout << "Bolo zadane cislo: " << cislo << " a vyhodnocujem, tak trochu strpenia!!!\n";

    if(jeParne(cislo))
        cout << "Cislo " << cislo << " je parne!\n";
    else
        cout << "Cislo " << cislo << " je neparne!\n";
    return 0;
}

Typ návratovej hodnoty sme definovali pred menom nasledovne: bool jeParne(int cislo). Všimnite si, že sme nepotrebovali definovať pravdivostnú premennú, ale samotná funkcia sa ujala tejto role viď. if(jeParne(cislo)).

Doteraz sme testovali len jedno číslo a zatiaľ sme plne neocenili možností zjednodušenia programu s pomocou funkcie. Zjednodušením myslíme to, že nemusíme písať test pre každé číslo alebo pre každý cyklus, postačí zavolať len danú funkciu.

Doplňme našu implementáciu o pole čísel, ktoré budeme testovať a jednotlivé testovanie uskutočníme v cykle.

#include <iostream>
using namespace std;

bool jeParne(int cislo)
{
    if(cislo % 2 == 0)
        return true;
    else
        return false;
}

int main()
{
    int cisloPole[5] = {1025,114,-589,2526,-9999};

    for(size_t i = 0; i < sizeof(cisloPole)/sizeof(cisloPole[0]);i++)
    {

        cout << "Bolo zadane cislo: " << cisloPole[i] << " a vyhodnocujem, tak trochu strpenia!!!\n";

        if(jeParne(cisloPole[i]))
            cout << "Cislo " << cisloPole[i] << " je parne!\n";
        else
            cout << "Cislo " << cisloPole[i] << " je neparne!\n";
    }
    return 0;
}

Faktoriál čísla

Faktoriálom čísiel sme sa už v jednom dieli venovali. Poďme z klasickej implementácie faktoriálu čísla (k dispozícii tu) pozmeniť na implementáciu s využitím funkcie. Okrem toho využijeme pole testovaných vzoriek a cyklus.

#include <iostream>
using namespace std;

int testFaktorial(int cislo)
{
  int faktorial = 1;
  for(int i = cislo; i > 1; i--)
  {
     faktorial = i * faktorial;
  }
  return faktorial;
}

int main()
{
  int poleCisel[5] = {3,5,6,8,9};

  for(size_t i = 0; i < sizeof(poleCisel)/sizeof(poleCisel[0]); i++)
  {
       cout << "Faktorial cisla "<<poleCisel[i]<< " je: "<<testFaktorial(poleCisel[i]) << "\n";
  }
  return 0;
}

Všimnite si, že funkciu voláme pri výpise a rovnako myslíme na jednotlivé indexy prvky poľa, ktoré prechádzame cez iterácie. Naša funkcia testFaktorial vracia typ návratovej hodnoty int.

V budúcom dieli si niečo povieme o rekurzívnych funkciách.

Nahoru

Příspěvky

Programovanie v jazyku C++: Tvorba funkcii (2)
Jano 14. 05. 2018, 15:14:57
Odpovědět  Odkaz 
Pre nedočkavcov:
std::function testFaktorial;
testFaktorial = [&](int n) -> int {
if(n == 0) {
return 1;
}
return testFaktorial(n - 1) * n;
};

std::array cisla{3, 5, 6, 8, 9};
for (auto c : cisla) {
cout
Programovanie v jazyku C++: Tvorba funkcii (2)
Jano 14. 05. 2018, 15:15:50
Odpovědět  Odkaz 
std::array cisla{3, 5, 6, 8, 9};
for (auto c : cisla) {
cout
Programovanie v jazyku C++: Tvorba funkcii (2)
Jano 14. 05. 2018, 15:16:56
Odpovědět  Odkaz 
OK, keďže je to primitívny CMS systém, tak mi odpustite za neúplné komentáre.
Programovanie v jazyku C++: Tvorba funkcii (2)
kuba 15. 07. 2018, 18:10:46
Odpovědět  Odkaz 
Díky, že jste toho rasistu konečně vyštípali, dělá ostudu na co sáhne
Petr Valach Re: Programovanie v jazyku C++: Tvorba funkcii (2)
Petr Valach 15. 07. 2018, 21:02:49
Odpovědět  Odkaz 
Mrzí mě, že vám radost neudělám. Eda měl teď určitou přestávku v důsledku skládání zkoušek ve škole. A to, jak uznáte, mělo přednost. Další články budou jistě následovat, podobně jako pokračuje jeho seriál na ddalší stránce spravované CCB, openoffice.cz.
Komentáře tohoto typu sem podle mě opravdu nepatří a bylo by asi dobré, kdybyste se jich propříště zřekl. Dík :-)
Re: Re: Programovanie v jazyku C++: Tvorba funkcii (2)
kuba 15. 07. 2018, 21:12:37
Odpovědět  Odkaz 
Vaše ostuda, jedinou omluvou může být, že nevíte co je to za člověka a jak se na internetu vyjadřuje (momentálně je na FB zabanovaný tři generace dopředu)
Petr Valach Re: Re: Re: Programovanie v jazyku C++: Tvorba funkcii (2)
Petr Valach 15. 07. 2018, 21:53:59
Odpovědět  Odkaz 
1. Nejsem majitelem ani mluvčím LE. Pouze redaktorem. Pro ujasnění.
2. Edu Boldižára znám pět let. Přivedl jsem ho ke spolupráci v ExoSpace.cz, kde se naučil psát články, poté jsem ho doporučil sem a na OpenOffice.cz.
3. S tím, jak se vyjadřoval, jsem leckdy taky nesouhlasil, ale jeho výstup se za poslední rok zcela změnil. Každopádně je to jeho soukromou věcí a absolutně nechápu, proč to tu vytahujete.
Re: Re: Re: Re: Programovanie v jazyku C++: Tvorba funkcii (2)
kuba 15. 07. 2018, 22:09:08
Odpovědět  Odkaz 
Třeba protože se veřejně pod hlavičkou LE podepisuje? Pod ty názory, které se mimochodem nezměnily.

No nic, doufal jsem, že jste dostali rozum a přestali si takovými lidmi podřezávat větev - vaše ostuda, holt zůstanete žumpou, škoda pro GNU/Linux.
Eduard Boldižár Re: Re: Re: Re: Re: Programovanie v jazyku C++: Tvorba funkcii (2)
Eduard Boldižár 15. 07. 2018, 22:25:50
Odpovědět  Odkaz 
Žumpa nežumpa, vždy sa nájdu ľudia, čo ofrflú hocijaký denník, internetové vydavateľstvo a vlastne čokoľvek, takže tvoje žumpovanie má váhu práve tej žumpy :-). Ale som rád, že mám tak fanatického (anti)fanúška :D Tak ti prajem krásne sníčky :-)
Petr Valach Re: Re: Re: Re: Re: Programovanie v jazyku C++: Tvorba funkcii (2)
Petr Valach 15. 07. 2018, 23:28:43
Odpovědět  Odkaz 
Bude ideální, pokud personální otázky necháte na vedení redakce. Jsem si jist, že si vystačí samo i bez vašich nevyžádaných doporučení a spamů.
Re: Re: Re: Re: Re: Re: Programovanie v jazyku C++: Tvorba funkcii (2)
kuba 15. 07. 2018, 23:58:36
Odpovědět  Odkaz 
Přesně tak, k čemu čtenáři, když stačí redakce

Přidat názor

Nejsou podporovány žádné značky, komentáře jsou jen čistě textové. Více o diskuzích a pravidlech najdete v nápovědě.
Diskuzi můžete sledovat pomocí RSS kanálu rss



 
 

Top články z OpenOffice.cz

Eduard Boldižár

Eduard Boldižár

Som redaktorom stránky Exospace.cz. Mám 24 rokov. Čas trávim v IT škole. Medzi moje záľuby patrí astronómia, sci-fi literatúra a programovanie.


  • Distribuce: ubuntu
  • Grafické prostředí: unity