четвртак, 24. септембар 2015.

Funkcije u C++ programskom jeziku


Funkcije ili kako se još zovu, metode, procedure ili podrutine su najosnovniji gradivni elementi tj. grupa povezanih naredbi koji izvršavaju određeni zadatak koliko god puta vam zatreba. Funkcije su suštinski korak u podeli posla i prosto je nemoguće zamisliti ozbiljan programski projekat bez funkcija. Bez obzira što je objektno orjentisano programiranje skrenulo pažnju sa funkcija na objekte, funkcije ostaju centralna komponenta svakog programa. Najbolje je da funkcije shvatite kao deo programa koji obavljaju određeni zadatak kad god se pozovu u programu. Kad god imate neki deo koda koji se često ponavlja, da ga ne biste pisali više puta, najbolje ga stavite u neku funkciju i onda tu funkciju pozivajte u svom programu onoliko puta koliko vam je potrebno. Vi možete praviti vlastite ili koristiti već napravljene funkcije. U C++ programskom jeziku postoje dve vrste funkcija; funkcija koja vraća neku vrednost i funkcija koja ne vraća vrednost.


( C++ Functions )

Za programere Visual Basic-a bi napomenuo da su u C, C++ i C# programskom jeziku i funkcije i sub procedure jedno; samo funkcije. Razlika je samo u tome da u Visual Basic-u funkcija podrazumeva da se vraća neka vrednost, dok se za funkciju koja ne vraćaju vrednost koristi sub procedura. Svaki C++ program ima bar jednu funkciju main() i ona je glavna funkcija iz koje se mogu pozivati druge funkcije, dok druge funkcije mogu pozivati jedna drugu i čak funkcija može pozivati samu sebe. Takođe funkcije možemo podeliti na korisnički definisane i ugrađene. Ugrađene funkcije su deo paketa vašeg kompajlera i njih obezbeđuje proizvođač.

Kako se pravi i poziva funkcija? 

Svaka funkcija ima svoje ime i telo predstavljeno vitičastim zagradama { }. Funkcije koje ne vraćaju vrednost moraju da počinju sa ključnom reči void, dok funkcije koje vraćaju neku vrednost moraju da imaju return statement koji vraća vrednost liniji koda koji poziva funkciju. Ali svaka funkcija može da prima i jedan i više argumenata ili da ne prima ni jedan. Da bi vam to praktično demonstrirao, proširio sam jedan program tipa kalkulator tako da radi sa funkcijama. Naravno, aplikacija kalkulator je mala i nema logički potrebe za funkcijama, ali da bi ste imali neku predstavu o tome kako se pišu funkcije u kodu on je izmenjen da sadrži funkcije.


( Program Calculator prepravljen da koristi funkcije ) 

Da bi ste napravili funkciju, prvo morate da je deklarišete. Deklaracija funkcije koju programeri često zovu i prototip sadrži samo informaciju o tipu funkcije. Funkcije je moguće zapisati i u drugim datotekama i onda ih pozivati u program preko direktive #include. Ako funkcija ne vraća nikakvu vrednost, umesto tipa deklaracija počinje ključnom rečju void. 

#include "stdafx.h"
#include <iostream>
using namespace std;

void InputData();
double Addition(double x, double y);
double Subtraction(double x, double y);
double Multiplication(double x, double y);
double Division(double x, double y);

Kao što možete videti u navedenom kodu, funkcija InputData je funkcija koja ne vraća nikakvu vrednost i njena deklaracija počinje sa ključnom rečju void dok ostale vrednosti vraćaju vrednost tipa double. Funkcije koje ne vraćaju vrednost mogu da primaju argumente kao što i funkcije koje vraćaju neku vrednost ne moraju da prihvataju ni jedan argument ako za argumentima nema potrebe. U ovom kodu mi trebamo da obavimo aritmetičke operacije na dve promenjive tipa double i zbog toga navedene funkcije koje vraćaju rezultat imaju i argumente tipa double. Funkcije se deklarišu i funkcije se pišu van glavne main() funkcije iako ćete često viđati da se funkcije pozivaju i iz drugih funkcija. Posle deklaracije, funkcije počinju kao i sama deklaracija s time da svaka funkcija ima svoje telo funkcije. 

void InputData()
{
       cout << "Input number 1: ";
       cin >> number1;
       cout << "Input number 2: ";
       cin >> number2;

}

double Addition(double x, double y)
{
       return x + y;

}

double Subtraction(double x, double y)
{
       return x - y;

}

double Multiplication(double x, double y)
{
       return x * y;

}

double Division(double x, double y)
{
       return x / y;

}
  

Kao što vidite funkcija InputData() nema naredbu return jer ne vraća nikakvu vrednost dok ostale funkcije moraju imati naredbu return. Kad imate ispisane funkcije i kad su deklarisane; onda se one lako pozivaju bilo gde i koliko god hoćete puta u programu.

switch (operation)
       {
             case 1:
                    InputData();
                    result = Addition(number1, number2);
                    break;

             case 2:
                    InputData();
                    result = Subtraction(number1, number2);
                    break;

              case 3:
                    InputData();
                    result = Multiplication(number1, number2);
                    break;

             case 4:
                    InputData();
                    result = Division(number1, number2);
                    break;

             case 5:
                    return 0;

       default:
             goto jumb;
             break;

       }



Svaki put kad korisnik hoće da izvrši neku od aritmetičkih operacija prvo se poziva funkcija InputData() i traži se od korisnika da unese 2 broja. Bez pisanja ove funkcije morali bi ste pisati kod 4 puta za prihvatanje unosa od korisnika. Ovako samo pozivate 4 puta funkciju u kodu dok je kod za prihvatanje vrednosti pisan samo jednom. Ovako se piše manje koda; kod se piše samo jednom i to je odlično da ukoliko napravite neku grešku u programu; dovoljno je tu grešku ispraviti samo jedanput u funkciji. To je najveća vrlina funkcija. Pogledajte kako izgleda ceo kod programa Functions:




#include "stdafx.h"
#include <iostream>
using namespace std;

void InputData();
double Addition(double x, double y);
double Subtraction(double x, double y);
double Multiplication(double x, double y);
double Division(double x, double y);

short operation;
double number1 = 0.0, number2 = 0.0, result = 0.0;

int main()
{
jumb:

       cout << "\n\t--------------- Simple Calculator ---------------" << endl << endl;

       cout << "\t\t1. Addition" << endl;
       cout << "\t\t2. Subtraction" << endl;
       cout << "\t\t3. Multiplication" << endl;
       cout << "\t\t4. Division" << endl;
       cout << "\t\t5. Quit" << endl << endl;

       cout << " Enter the number from 1 to 5: ";
       cin >> operation;

       switch (operation)
       {
             case 1:
                    InputData();
                    result = Addition(number1, number2);
                    break;

             case 2:
                    InputData();
                    result = Subtraction(number1, number2);
                    break;

             case 3:
                    InputData();
                    result = Multiplication(number1, number2);
                    break;

             case 4:
                    InputData();
                    result = Division(number1, number2);
                    break;

             case 5:
                    return 0;

       default:
             goto jumb;
             break;

       }

       cout << endl << endl << result << endl << endl;
       system("PAUSE");
       goto jumb;

       return 0;

}

void InputData()
{
       cout << "Input number 1: ";
       cin >> number1;
       cout << "Input number 2: ";
       cin >> number2;

}

double Addition(double x, double y)
{
       return x + y;

}

double Subtraction(double x, double y)
{
       return x - y;

}

double Multiplication(double x, double y)
{
       return x * y;

}

double Division(double x, double y)
{
       return x / y;

}


Kako to sve izgleda možete videti i na video-u: 

 

( C++ Tutorial - 5. Functions )