Za učenike I i III godine Tehničke škole, smerovi: Mašinski tehničar za kompjutersko konstruisanje; Tehničar drumskog saobraćaja; Vozač motornih vozila

понедељак, 18. јануар 2010.

Funkcije

Funkcija je posebni dio programskog koda koji izvodi poseban zadatak. Ona ima svoje jedinstveno ime pomoću kojeg je možemo pozvati iz neke druge funkcije. To se zove pozivanje funkcije. U tom slučaju funkcija vraća neku vrijednost funkciji koja ju je pozvala.

Svaka funkcija u C programskom jeziku izvršava svoj poseban zadatak, a to može učiniti bez da se uključuje u druge dijelove programa ili da se drugi dijelovi programa uključuju u njezin rad.

Za sada sve funkcije pišite u istu datoteku kamo i funkciju main(), i to iza nje, iako ih možete držati odvojene od izvornog koda što je korisno kod velikih programa gdje se iste funkcije pozivaju iz različitih dijelova programa. O tome će biti riječi u posljednjem dijelu knjige.

Vaše funkcije možete držati i potpuno odvojene od izvornoga koda, tako da jednom napisanu funkciju možete koristiti u više programa.

Funkcija u programu ne radi ništa sve dok nije pozvana od nekog drugog dijela programa. Tada joj program šalje informacije u obliku jednog ili više argumenata. Argument je programski podatak koji je neophodan za rad funkcije. Tada se naredbe u funkciji izvršavaju i ona izvodi onaj zadatak za koji je programirana. Kada funkcija završi svoj zadatak izvršenje programa vraća se na isto mjesto s kojeg je funkcija bila pozvana. Funkcije mogu slati informacije natrag u program koji ih poziva u obliku povratne vrijednosti (return value).





Prototip funkcije izgleda ovako:



tip_vrednosti_koju_vraća ime_funkcije(tip_argumenta ime-1,...,tip_argumenta ime-n);



Prototip funkcije opisuje prevoditelju funkciju koja je definisana negdje u programu. U prototipu se nalazi tip vrednosti koji funkcija vraća programu i ime funkcije; koje bi trebalo opisivati šta funkcija radi (ovo je zbog lakšeg snalaženja u programskom kodu). Prototip sadrži i tip argumenta koji će biti prosleđen funkciji. Prototip uvek završava tačka-zarezom.

Program mora sadržavati prototip svake funkcije koju koristi. Prototipovi funkcije MORAJU se staviti U KOD PRE GLAVNE FUNKCIJE main() ili pre definicije prve funkcije. Sve prototipove funkcija grupišite na jednom mestu radi lakšeg snalaženja u programskom kodu.



Definicija funkcije



Definicija funkcije izgleda ovako:



tip_vrednosti_koju_vraća ime_funkcije(tip_argumenta ime-1, ..., tip_argumenta ime-n)

{

/* naredbe; */

}



Definicija funkcije zapravo je sama funkcija. Definicija sadrži programski kod koji se izvršava prilikom pozivanja funkcije. Prva linija definicije funkcije, zaglavlje funkcije (function header), mora biti identična prototipu funkcije, bez tačka-zareza na kraju.



Zaglavlje funkcije



Zaglavlje funkcije ima tri dela:

- tip vrednosti koji funkcija vraća programu koji ju je pozvao

- ime funkcije

- listu parametara.



Tip vrednosti koji funkcija vraća programu koji ju je pozvao može biti bilo koji C tip podataka: char, int, long, float ili double. Također možete definisati i funkciju koja ne vraća nikakve podatke u glavni program koristeći tip void. Evo primera:



int funkcija1(...) /* Vraća tip int. */

float funkcija2(...) /* Vraća tip float. */

void funkcija3(...) /* Ne vraća ništa. */



Funkcijama možete davati imena koja god želite, sve dok se držite istog pravila o imenima kao i za varijable. Ime funkcije mora biti jedinstveno, a dobra je praksa davati funkcijama imena koja opisuju ono što funkcija radi.
Tijelo funkcije

Iza zaglavlja funkcije nalazi se telo funkcije koje sadrži naredbe koje će biti izvršene prilikom pozivanja funkcije. Telo funkcije nalazi se unutar vitičastih zagrada. Ako funkcija vraća tip podataka različit od void, povratna naredba također mora biti napisana s tačnim tipom povratne vrijednosti.

Nema nikakvih ograničenja u pisanju naredbi koje funkcija može sadržati, jedino unutar jedne funkcije ne možete definisati drugu. Funkcija ne bi trebala biti predugačka, 25 - 30 linija koda. Ako vam je funkcija duža, verojatno radi više od jednog zadatka i možete je podeliti na jednu ili više manjih. Kako budete postajali iskusniji, funkcije će vam biti kraće i jednostavnije.

Za vraćanje vrednosti iz funkcije koristite ključnu reč return iza koje dolazi C izraz. Kada izvršenje programa dođe do ove naredbe, funkcija vraća vrednost programu koji ju je pozvao. Upamtite da funkcija vraća vrednost tipa koji je određen u njenom zaglavlju. Ukoliko vraćena vrednost nije istog tipa, prevodilac će pokazati grešku.


Dodeljivanje argumenata funkciji

Da bi funkciji dodelili argumente navedite ih u zagradama iza imena funkcije. Broj i tip argumenata mora se podudarati s parametrima u zaglavlju i prototipu funkcije. Ako funkcija prihvata više argumenata, oni moraju biti navedeni istim redosledom kako je napisano u parametrima funkcije.

Argumenti mogu biti svaki valjani C izraz: konstanta, varijabla, matematički ili logički izraz ili druga funkcija (neka koja vraća vrednost).


Pozivanje funkcija


Funkcije se pozivaju jednostavnim navođenjem njihova imena i argumenata:

ime_funkcije(argument1, argument2,...)

Funkcije - primeri

1)Izračunavanje hipotenuze:
#include
float hip(float,float);
main(){
float c,a,b;
printf("unesi katete:");
scanf("%f%f",&a,&b);
c=hip(a,b);
printf("\n c=%.2f",c);
getch();
}

float hip(float x,float y){
return sqrt(x*x+y*y);
}

2)Izračunaj: 1!+2!+3!+...+n!
long fakt(int);
main(){
long n,s;
int i;
printf("Unesi n:");
scanf("%ld",&n);
s=0;
for(i=1;i<=n;i++) s+=fakt(i);
printf("\nSuma faktorijela je:%ld\n",s);
getch();
}
long fakt(int n){
long i,s=1;
for(i=1;i<=n;i++)s*=i;
return s;
}

Funkcije - zadaci za vežbanje

1. Napisati program koji pomoću funkcije koja računa sumu brojeva od 1 - n izračunava formulu.
F= (1+2+ ... + n)(1+2+ ... +m)/(1+2+...+n*m).

2. Napiši program koji računa sumu S = 1! + 2! + ... + n! , ako se koristi funkcija za faktorijel broja.

3. Napisati program za izračunavanje sume s kvadrata parnih i i kubova neparnih prirodnih brojeva od n do m.

4. Prikazati sve prirodne brojeve manje od n koji su deljivi sa 11. n se unosi preko tastature.

5. Prikazati sve prirodne brojeve manje od n koji su deljivi sa 3 i 4. n se unosi preko tastature.

6. Prikazati sve prirodne brojeve manje od n koji su deljivi sa 3 a nisu sa 4. n se unosi preko tastature.

7. Prikazati sve prirodne brojeve manje od n koji su deljivi sa 3 ili sa 4. n se unosi preko tastature.