Функције

Приликом решавања сложенијих задатака често се дешава да се одређени низови наредби понављају на више места. Да се не би трошило време на стално копирање и измене у случају грешке, такви низови наредби се групишу у самосталне програмске јединице које зовемо функцијама. Оне морају имати јединствено име и могу се позивати више пута ради извршавања одређених акција.

Пример из живота: Машина за веш има више програма: за прање белог веша, за прање шареног веша, за прање вуне, итд. Сваки од тих програма у себи има центрифугу. Дакле, центрифуга је функција коју сваки од програма унутар веш машине користи.

Анимација 9.4. Примена функција у реалном животу

Функцијe морају имати повратну вредност. Ту вредност враћају приликом позива и она може користити у изразима. Уколико функција не враћа вредност, њен повратни тип је void.
Свака функција мора бити унутар неке класе. Функције су заправо методи које ћемо креирати на већ постојећим класама које смо и раније помињали.

Ми ћемо у постојеће програме убацивати нове функције које ће наш код учинити разумљивијим и читљивијим. Функције пишемо у следећој форми:


povratni_tip ime_funkcije(definicija_parametara)

{
lokalne_promenljive
naredbe
}

Дефиниција функције обухвата повратну вредност, име функције, аргументе које функција користи (променљиве), тело методе функције унутар које се налазе наредбе и локалне променљиве. Заглавље функције чине повратна вредност, име функције и аргументи које функција користи.

Декларација (прототип) функције садржи само заглавље функције. То је заправо дефиниција функције без тела функције.

//Primer deklaracije funkcije
int funkcija (int x, int y, int z);          



Име функције мора почети словом, а остали карактери могу бити слова, цифре или карактер подвлака. Остали карактери нису дозвољени. Уколико желимо да функција има повратну вредност, морамо нагласити о којој се повратној вредности ради у дефиницији функције и морамо навести наредбу return уз вредност или израз који желимо вратити. На следећим примерима објаснићемо делове методе.

Пример 1. Написати функцију која израчунава суму првих n природних бројева.


int suma(int n)
{
    //Dajemo početnu vrednost sumi
    int zbir = 0;
    //Prolazimo kroz for petlju da bismo obuhvatili sve prirodne brojeve od 1 do n
    for (int i = 1; i <= n; i++)
	//Na postojeći zbir dodajemo vrednost narednog broja
        zbir = zbir + i;
    //Naredba return vraća vrednost funkcije
    return zbir;
}

Повратна вредност наведене функције је int, односно, цео број. Повратна вредност се пише испред имена функције. Затим следи име функције, које је у овом случају suma. Аргументи које функција узима пишу се у заградама иза имена функције. Те променљиве зову се класне променљиве. У претходном примеру, то је int n. При томе, n је променљива, док је int тип те променљиве. Потом се унутар витичастих заграда пише код функције. Све променљиве које се нађу унутар витичастих заграда зовемо локалним променљивим.

Код функције која ће се касније позивати у програму пишемо било где унутар класе Form1, али независно од других функција које се налазе у Form1. Form1 је класа која дефинише нашу форму и на којој описујемо акције везане за форму. На овај начин везујемо функцију за већ постојећу класу. На следећој слици је приказано где пишемо код наше функције.

Слика 9.5. Код функције пишемо унутар класе Form1

Пример 2. Написати функцију која израчунава суму квадрата природних бројева између бројева m и n.


int suma_kvadrata(int m, int n)
{
    //Dajemo početnu vrednost sumi
    int s = 0;	
    //Prolazimo kroz for petlju da bismo obuhvatili sve brojeve između m i n	
    for (int i = m; i <= n; i++)
        //Postojećoj sumi dodajemo kvadrat narednog broja
        s = s + i * i;
    //Naredba return vraća vrednost funkcije
    return s;
}

Повратна вредност наведене функције је int, односно, цео број. Повратна вредност се пише испред имена функције. Затим следи име функције, које је у овом случају suma_kvadrata. Аргументи које функција узима пишу се у заградама иза имена функције. Те променљиве зову се класне променљиве. У претходном примеру, то су int m, int n. Потом се унутар витичастих заграда пише код функције. Све променљиве које се нађу унутар витичастих заграда зовемо локалним променљивим.

Пример 3. Написати функцију која исписује поруку.

Функција која ће исписивати поруку неће имати повратну вредност, дакле, повратни тип биће void.


void ispisi(int x)
{
    //Funkcija prikazuje prozor sa porukom
    MessageBox.Show("Uneli ste broj " + x); 
}