Linux E X P R E S

Facebook

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

C++

Článok vás uvedie do oblastí tvorby vlastných funkcii. Pochopíte význam a syntax funkcie a dozviete sa o rozdielu medzi parametrom a argumentom.


Definícia funkcie

Funkcie definujeme ako blok skladajúci sa s postupností príkazov. Funkcia sa môže inicializovať s nejakými vstupmi a môže vracať navratovú hodnotu. To závisi, ako ju naprogramujete. Syntax funkcie je nasledovná:

type name(parameter1,parameter2,parameter3, …) 
{
    statements
}

type rozumieme typ návratovej hodnoty, ktorú má funkcia vrátiť. name je meno funkcie a parameter je nejaký vstup, ktorý môže funkcia využiť. statements rozumieme postupností príkazov, ktoré sa vykonajú v danom tele funkcie.

Význam funkcii

Vytvorme si program, kde fiktívna osoba sa opýta na meno a priezvisko a odpoveďou budú tri odpovede.

#include <iostream>
using namespace std;

int main()
{
    string retazec = "Ake je tvoje meno a priezvisko uzivatel?\n";
    cout << retazec;
    cout << "Ja sa volam Jozko Hrasko."<<"\n";
    cout << "Ja sa volam Marienka Mlada."<<"\n";
    cout << "Ja sa volam Ruzena Krasomilka."<<"\n";
    return 0;
}

Výstupom programu je otázka a 3 odpovede:

Ake je tvoje meno a priezvisko uzivatel?
Ja sa volam Jozko Hrasko.
Ja sa volam Marienka Mlada.
Ja sa volam Ruzena Krasomilka.

A teraz si predstavte, že nemáme len 3 odpovede, ale tisíc! Budeme takto riadok po riadku pracne programovať? Ako sa hovorí, sústavná manuálna práca zabíja čas a tvorivosť. Aby sme sa vyhli toľkému programovaniu, využijeme funkciu.

#include <iostream>
using namespace std;

void vypis(string name)
{
    cout << "Ja sa volam "<<name<<".\n";
}

int main()
{
    string retazec = "Ake je tvoje meno a priezvisko uzivatel?\n";
    cout << retazec;
    vypis("Jozko Hrasko");
    vypis("Marienka Mlada");
    vypis("Ruzena Krasomilka");
    return 0;
}

Môžete namietať, že sme mohli využiť cyklus for, napr. takto:

#include <iostream>
using namespace std;

int main()
{
    string retazec = "Ake je tvoje meno a priezvisko uzivatel?\n";
    string poleStringov[3] = {"Jozko Hrasko","Marienka Mlada","Ruzena Krasomilka"};
    cout << retazec;
    for(int i = 0; i < 3;i++)
    {
        cout << "Ja sa volam "<<poleStringov[i]<<".\n";
    }
    return 0;
}

Síce sme ušetrili pár riadkov, no predstavte si, že v hlavnej funkcii main je stovky takýchto cyklov. Dostávame sa ku veľkej zložitostí a malej priehľadností, čo bola aj najväčšia slabina programovacích jazykov pred érou procedurálneho programovania a podpory C syntaxe. Preto funkcie poskytujú lepšiu priehľadnosť a čitateľnosť kódu.

Ešte sa pozrime na zaujímavosť, ktorá v seriáli doteraz nebola.

string poleStringov[3] = {"Jozko Hrasko","Marienka Mlada","Ruzena Krasomilka"};

Vytvorili sme si pole reťazcov o veľkostí 3! Čiže môžeme obsadiť prvky 0, 1 a 2.

Rozdiel medzi argumentom a parametrom

Jedna z najčastejších otázok začiatočníkov je, aký je rozdiel medzi argumentom a parametrom? Nachvíľu si predstavme oceán. Najvyšší bod oceánu je jeho hladina. Najnižší bod oceánu je jeho dno. Máju niečo spoločné hladina a dno? Áno, ten náš oceán. No napriek tomu používame slová hladina a dno nato, aby sme definovali rozdielne výškové body. Rovnakú myšlienkovú argumentáciu môžeme využiť pri argumentoch a parametrov. Parameter píšeme ako vstup pri definovaní našej funkcie. Argument píšeme pri volaní funkcii. A čo spája parameter a argument? No predsa tá funkcia! Toto rozdelenie sa zaviedlo, aby sa spoľahlivo rozlišovali jednotlivé úkony napr. v dokumentácii alebo v tímovej komunikácii.

Vytvorme si program, ktorý vypíše interval od 1 po num, kde num zapíšeme aj ako argument a parameter.

#include <iostream>
using namespace std;

void vypisInterval(int num)
{
    for(int i = 1; i <= num; i++)
    {
        cout<<i<<" ";
    }
    cout <<"\n";
}

int main()
{
    string retazec = "Zadaj cislo, po ktorom sa ma skoncit vypis!";
    cout <<retazec<<"\n";
    int num;
    cin >> num;
    vypisInterval(num);
    return 0;
}

Argument num sme definovali takto:

vypisInterval(num);

A parameter num:

void vypisInterval(int num)

Diskuze (5) Nahoru