23_funkcije

3
Uvod u programiranje Gimnazija Bihać Funkcije u C++ C++ dolazi sa bibliotekama unaprijed definiranih funkcija koje možete koristiti u svojim programima. U C++ postoje dvije vrste funkcija, one koje vraćaju(proizvode) neku vrijednost i one koje ne vraćaju vrijednost. Funkcije koje ne vraćaju nikakvu vrijednost se nazivaju void funkcije. Mi smo se već susretali sa funkcijama, kao npr. funkcija sqrt, koja vraća kvadratni korijen nekog broja. Ako ovoj funkciji damo vrijednost 9.0, ona će nam vratiti korijen toga broja, što je broj 3.0. Vrijednost koja se funkciji daje naziva se argument funkcije, a vrijednost koju funkcija vraća se naziva povratna vrijednost , što je u ovom slučaju rezultat korjenovanja. Neke funkcije mogu imati i više argumenata, ali nema funkcije koja vraća više od jedne povratne vrijednosti. Sintaksa korištenja funkcije je jednostavna: korijen=sqrt(9.0); Ovaj gornji izraz se naziva pozivanje funkcije, a pri tom pozivu, funkciji se kao argument može dati konstanta kao broj 9.0, varijabla ili neki komplikovaniji izraz. Poziv funkciji je izraz koji kao takav može biti korišten, pa je potpuno legalan poziv(iako možda malo škrt): bonus=sqrt(promet)/10; Ovdje bi varijable bonus i promet trebale biti tipa double. To je zbog toga što je prototip sqrt funkcije ovakav: double sqrt(double); Dakle iz prototipa funkcije nam je odmah jasno kako se funkcija koristi. Da ponovimo, funkciji sqrt se daje jedan argument tipa double, a ona kao rezultat vraća broj tipa double. Ova funkcija je definirana u datoteci cmath, pa bi kod dosta kompajlera trebalo dodati direktivu #include<cmath>. Naš kompajler to ne zahtijeva, pa funkciju možete koristiti i bez nje. Ipak ako želite da vaš kod radi u bilo kojem razvojnom okruženju, onda je dobra ideja uvijek uključiti gore navedenu direktivu kada koristite funkciju sqrt. Evo prototipova još nekoliko funkcija sa primjerima korištenja: Ime Opis Prototip Primjer korištenja Rezultat Definisana sqrt kvadratni korijen double sqrt(double) sqrt(4.0) 2.0 cmath pow stepena funkcija double pow(double,double) pow(2.0,3.0) 8.0 cmath abs apsolutna vrijednost int abs(int) abs(-7) 7 cstdlib ceil zaokruživanje na gore double ceil(double) ceil(3.2) 4.0 cmath floor zaokruživanje na dole double floor(double) floor(3.7) 3.0 cmath round zaokruživanje double round(double) double(3.6) 4.0 rand slučajni broj int rand(void) rand() zavisi cstdlib srand postavi sjeme za rand void srand(unsigned int) srand(42) ništa cstdlib Ovo je tip koji funkcija vraća kao rezultat. Ovdje vidimo da funkcija uzima jedan argument tipa double. Ime funkcije

Upload: amil-svago

Post on 27-Dec-2015

12 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: 23_funkcije

Uvod u programiranje Gimnazija Bihać

Funkcije u C++

C++ dolazi sa bibliotekama unaprijed definiranih funkcija koje možete koristiti u svojim programima. U C++ postoje dvije vrste funkcija, one koje vraćaju(proizvode) neku vrijednost i one koje ne vraćaju vrijednost. Funkcije koje ne vraćaju nikakvu vrijednost se nazivaju void funkcije. Mi smo se već susretali sa funkcijama, kao npr. funkcija sqrt, koja vraća kvadratni korijen nekog broja. Ako ovoj funkciji damo vrijednost 9.0, ona će nam vratiti korijen toga broja, što je broj 3.0. Vrijednost koja se funkciji daje naziva se argument funkcije, a vrijednost koju funkcija vraća se naziva povratna vrijednost, što je u ovom slučaju rezultat korjenovanja. Neke funkcije mogu imati i više argumenata, ali nema funkcije koja vraća više od jedne povratne vrijednosti. Sintaksa korištenja funkcije je jednostavna:

korijen=sqrt(9.0);

Ovaj gornji izraz se naziva pozivanje funkcije, a pri tom pozivu, funkciji se kao argument može dati konstanta kao broj 9.0, varijabla ili neki komplikovaniji izraz. Poziv funkciji je izraz koji kao takav može biti korišten, pa je potpuno legalan poziv(iako možda malo škrt):

bonus=sqrt(promet)/10;

Ovdje bi varijable bonus i promet trebale biti tipa double. To je zbog toga što je prototip sqrt funkcije ovakav:

d o u b l e s q r t ( d o u b l e ) ;

Dakle iz prototipa funkcije nam je odmah jasno kako se funkcija koristi. Da ponovimo, funkciji sqrt se daje jedan argument tipa double, a ona kao rezultat vraća broj tipa double. Ova funkcija je definirana u datoteci cmath, pa bi kod dosta kompajlera trebalo dodati direktivu #include<cmath>. Naš kompajler to ne zahtijeva, pa funkciju možete koristiti i bez nje. Ipak ako želite da vaš kod radi u bilo kojem razvojnom okruženju, onda je dobra ideja uvijek uključiti gore navedenu direktivu kada koristite funkciju sqrt. Evo prototipova još nekoliko funkcija sa primjerima korištenja:

Ime Opis Prototip Primjer korištenja Rezultat Definisana

sqrt kvadratni korijen double sqrt(double) sqrt(4.0) 2.0 cmath

pow stepena funkcija double pow(double,double) pow(2.0,3.0) 8.0 cmath

abs apsolutna vrijednost int abs(int) abs(-7) 7 cstdlib

ceil zaokruživanje na gore double ceil(double) ceil(3.2) 4.0 cmath

floor zaokruživanje na dole double floor(double) floor(3.7) 3.0 cmath

round zaokruživanje double round(double) double(3.6) 4.0

rand slučajni broj int rand(void) rand() zavisi cstdlib

srand postavi sjeme za rand void srand(unsigned int) srand(42) ništa cstdlib

Ovo je tip koji funkcija vraća kao rezultat.

Ovdje vidimo da funkcija uzima jedan argument tipa double.

Ime funkcije

Page 2: 23_funkcije

Uvod u programiranje Gimnazija Bihać

Void funkcije su funkcije koje izvršavaju neku akciju ali ne vraćaju nikakvu vrijednost. Poziv void funkciji se piše na sličan način kao i funkciji koja vraća vrijednost, s tim da se koristi kao izjava a ne izraz čija vrijednost bi se dodjeljivala nekoj varijabli, npr.

srand(42);

Prebaci sljedeće matematičke izraze u u C++ aritmetičke izraze:

x y7⌈ v pn ⌉ ⌊ 2x−

1x3

⌋∣x∣12−d

Generator slučajnih brojeva je funkcija koja vraća “nasumice odabrani” broj. Ona se često koristi da bi se simulirao neki slučajni događaj, kao bacanje novčića ili kocke. Ova funkcija vraća broj u intervalu od 0 do RAND_MAX, što je broj definiran u datoteci cstdlib. Ovaj broj je minimalno 32767(max. cijeli pozitivni broj predstavljen u dva bajta), ali može biti i veći, što ovisi o sistemu. Šta ukoliko vam trebaju brojevi u nekom manjem intervalu? Smanjite ovaj interval operacijom modulo, npr. ako vam trebaju brojevi od 0 do 10, onda to radite ovako: rand()%11Generator slučajnih brojeva ne vraća stvarno slučajne brojeve, nego brojeve koji izgledaju kao slučajni, ali to nisu. Niz brojeva koji bi se formirao neprestanim pozivima funkciji rand je određen jednim početnim brojem koji se naziva sjeme.

srand(99);for(int i=1 ; i<10 ; i++) cout<<(rand()%11)<<endl;srand(99);for(int i=1 ; i<10 ; i++) cout<<(rand()%11)<<endl;

Ako pokrenete generator slučajnih brojeva sa istim sjemenom, uvijek ćete dobiti isti niz ”slučajnih brojeva”.Ovaj dio koda postavlja za sjeme broj 99 generatoru slučajnih brojeva, a zatim se u petlji štampa 10 slučajnih brojeva u intervalu od nula do 10. Kada se sjeme ponovo postavi na 99 i ponovo na isti način zove generator brojeva, dobićemo isti niz “slučajnih” brojeva. Zbog toga stoje navodnici oko riječi slučajnih.

Kada radimo u C++, mi nismo ograničeni samo na funkcije koje dolaze u standardnim bibliotekama, nego možemo kreirati i svoje vlastite funkcije. Opis funkcije se daje u dva dijela. Prvi dio se zove deklaracija funkcije ili prototip funkcije, što smo već vidjeli kod funkcije sqrt.

Evo prototipa jedne funkcije iz domaće kuhinje:

i n t s a b e r i ( i n t , i n t ) ;

x yy

Funkcija vraća cijeli broj

Ime funkcije je saberi

Vidimo da funkcija kao argumente uzima dva cijela broja.

Page 3: 23_funkcije

Uvod u programiranje Gimnazija Bihać

// primjer funkcije#include <iostream>using namespace std;int saberi(int, int);int main (){ int a,b,zbir; cout<<"Unesi dva broja: "; cin>>a>>b; zbir=saberi(a,b); cout<<"Zbir iznosi: "<<zbir; system("Pause"); return 0;}int saberi(int x, int y){ return x+y; }

U drugom dijelu, tj. definiciji funkcije, mi definišemo kako funkcija izračunava povratnu vrijednost. Definicija funkcije se sastoji od zaglavlja funkcije i tijela funkcije. Zaglavlje funkcije je gotovo identično deklaraciji, samo što nema tačka-zarez na kraju. Tijelo funkcije slijedi odmah nakon zaglavlja i sastoji se od izjava zatvorenih unutar para vitičastih zagrada. Vrijednost koju funkcija vraća je određena kada se izvrši return izjava unutar funkcije. U našem primjeru se vidi kako deklaracija funkcije ide prije, a definicija poslije main funkcije. Dvije varijable x i y su formalni parametri funkcije saberi i “vide” se samo u funkciji saberi, tj. one ne postoje u main funkciji. Zbog toga se te varijable zovu i lokalne varijable. Ako napišete neku izjavu unutar main funkcije koja uključuje varijablu x ili y, program neće kompajlirati jer one tamo ne postoje!

1.Napišite void funkciju čiji jedini zadatak jeste da štampa riječ Zdravo na ekran.

2. Napišite funkciju koja datu brzinu iz m/s prebacuje u km/h!

Deklaracija funkcije se daje prije main funkcije

Definicija funkcije ide nakon main funkcije. U tijelu funkcije je definisano kako funkcija radi.