PR I - Prezentacije funkcije i nizovi
Tekst dokumenta1285 redova
- == Predavanje 16_17_18.pptx
- Programiranje 1
- FIT Mostar
- Funkcije – pitanja i primjeri
- Primjer 1 – Brojač prostih bojeva
- int brojac_prostih(int n, int m)
- {
- int brojac=0;
- for(int i=n;i<=m;i++)
- {
- int provjera = 0;
- int pomocna;
- pomocna = i;
- for (int j = 2; j<pomocna; j++)
- {
- if (pomocna%j==0)
- {
- provjera++;
- break;
- }
- }
- if (provjera==0)
- brojac++;
- }
- return brojac;
- }
- Primjer 2 – Da li je broj clan
- Fibonacci serije
- Da li je broj clan Fibonacci serije
- bool fibonaci(int n)
- {
- int fiboN, fiboNmin1=1, fiboNmin2=1, counter=1, yes=0;
- cout<<"Enter number: ";
- while (counter <= n)
- {
- fiboN = fiboNmin2 + fiboNmin1;
- fiboNmin1 = fiboNmin2;
- fiboNmin2 = fiboN;
- counter++;
- if (n==fiboN)
- yes=1;
- }
- if (yes == 1)
- return true;
- else
- return false;
- }
- Množenje bez korištenja *
- int mnozenje_sabiranjem(int number, int number2)
- {
- int counter=1, result=0;
- while (counter <= number)
- {
- result = result + number2;
- counter++;
- }
- return result;
- }
- Dijeljenje bez korištenja /
- int dijeljenje_oduzimanjem(int &number, int number2)
- {
- int counter=0;
- while (number >= number2)
- {
- number = number - number2;
- counter++;
- }
- return counter;
- }
- Debug
- Zašto koristimo debug?
- Kako nam pomaže?
- Debug codea
- Praćenje vrijednosti varijabli
- Pregled memorije
- Statički nizovi
- Niz u matematičkom smislu
- niz u skupu R
- 1,2,3,4,5....
- 2,4,6,8,10....
- 1,1,2,3,5,8,13...
- Niz u programskom smislu
- Niz ili Polje (array)
- Niz je najjednostavnija struktura podataka koja omogućava pohranu skupa istovrsnih podataka
- Niz je uređeni skup koji sadrži određeni broj elemenata istog tipa T
- Vrijednosti, odnosno, elementi niza, su pohranjene u kontinuirani memorijski blok
- Niz je skup varijabli istog tipa kojima smo dali jedinstveno ime a pojedinačne elementne razlikujemo po indeksu
- Jednodimenzionalni statički niz
- Statički niz
- Dinamički niz
- Deklaracija niza
- tip identifikator [broj_elemenata];
- int neki_nas_niz [5];
- tip – bilo koji validan tip podatka u C++
- identifikator – bilo koje validno ime u C++
- u uglastim zagradama se navodi broj elemenata (u slučaju statičkih nizova veličina niza mora biti KONSTANTA)
- Niz
- int neki_nas_niz[5];
- int[0] int[1] int[2] int[3] int[4]
- Sadržaj
- 2 bajta
- 5
- 2
- 4
- 6
- 7
- Deklaracija i inicijalizacija
- Samo deklaracija
- int niz[5];
- Inicijalizacija pri deklaraciji
- int niz[5]={}; //Inicijalizacija vrijednošću 0
- float niz1[5]={100.432 , 65.990985 , 45.3, 5.54, 3.9987};
- float niz1[5]={100.432 , 65.990985 , 45.3}; //djelomicna
- Inicijalizacija unosom vrijednosti
- cin>>niz2[i];
- Inicijalizacija eksplicitnom dodjelom
- niz3[i]=float(i)*i*i/7;
- Operacije nad članovima niza
- Operacije ovise o tipu podatka koji je upotrijebljen pri deklaraciji niza – aritmetičke, unos, ispis, usporedba
- Svaki član niza se može posmatrati kao jedna varijabla za koju vrijede sva pravila za taj tip.
- Napomena - Tip podatka određuju:
- skup vrijednosti koje podatak može imati,
- memorijski prostor potreban za smještanje podatka,
- operacije koje mogu da se vrše nad tim podatkom.
- Primjer: Operacije na nizu - računanje prosjeka niza
- float niz4[5]; //
- float prosjek=0;
- for (int i= 0; i<5; i++)
- {
- niz4[i]=i+1.023;
- }
- for (int i= 0; i<5; i++)
- {
- prosjek +=niz4[i];
- }
- prosjek/=5;
- cout<<prosjek<<endl;
- Manpulacija određenim članovima
- float niz4[5];
- for (int i= 0; i<5; i++) //inicijaliziranje niza
- {
- niz4[i]=i+1.023;
- }
- niz4[2]=niz4[0]+niz4[3];
- cout<<niz4[2]<<endl;
- Primjer: Fibonacci niz
- Primjer slučaja gdje korištenje niza uveliko olakšava posao programera
- Primjer: Fibonacci niz
- int niz4[10];
- niz4[0]=0;
- niz4[1]=1;
- for (int i= 2; i<10; i++) //inicijaliziranje Fibonacci niza
- {
- niz4[i]=niz4[i-1]+niz4[i-2];
- }
- for (int i= 0; i<10; i++)
- {
- cout<<setw(3)<<niz4[i];
- }
- Da li je broj clan Fibonacci serije – v.2
- int niz4[20]; //Fibonacci sekvenca - podrazumjevamo da je broj manji od 20-tog elementa Fibonacci niza
- int test_broj;
- cin>>test_broj; //podrazumjevamo broj veci od 2
- niz4[0]=0;
- niz4[1]=1;
- for (int i= 2; i<20; i++)
- {
- niz4[i]=niz4[i-1]+niz4[i-2];
- if (niz4[i]==test_broj)
- {
- cout<<"Broj jeste u Fibonacci nizu"<<endl;
- break;
- }
- else if(niz4[i]>test_broj)
- {
- cout<<"Broj nije u Fibonacci nizu"<<endl;
- break;
- }
- }
- Niz kao parametar funkcije
- U funkciju je moguće proslijediti niz u cjelini, ali i pojedinačne elemente niza
- Niz kao cjelina se proslijeđuje kao pseudoreferentni parametar
- Pojedinačni elementi se mogu prosljeđivati kao:
- parametri po vrijednosti i
- referentni parametri;
- Pitanja?
- == Predavanje 19_20_21.pptx
- Programiranje 1
- FIT Mostar
- Statički nizovi
- Niz u matematičkom smislu
- niz u skupu R
- 1,2,3,4,5....
- 2,4,6,8,10....
- 1,1,2,3,5,8,13...
- Niz u programskom smislu
- Niz ili Polje (array)
- Niz je najjednostavnija struktura podataka koja omogućava pohranu skupa istovrsnih podataka
- Niz je uređeni skup koji sadrži određeni broj elemenata istog tipa T
- Vrijednosti, odnosno, elementi niza, su pohranjene u kontinuirani memorijski blok
- Niz je skup varijabli istog tipa kojima smo dali jedinstveno ime a pojedinačne elementne razlikujemo po indeksu
- Jednodimenzionalni statički niz
- Statički niz
- Dinamički niz
- Deklaracija niza
- tip identifikator [broj_elemenata];
- int neki_nas_niz [5];
- tip – bilo koji validan tip podatka u C++
- identifikator – bilo koje validno ime u C++
- u uglastim zagradama se navodi broj elemenata (u slučaju statičkih nizova veličina niza mora biti KONSTANTA)
- Niz
- int neki_nas_niz[5];
- int[0] int[1] int[2] int[3] int[4]
- Sadržaj
- 2 bajta
- 5
- 2
- 4
- 6
- 7
- Deklaracija i inicijalizacija
- Samo deklaracija
- int niz[5];
- Inicijalizacija pri deklaraciji
- int niz[5]={}; //Inicijalizacija vrijednošću 0
- float niz1[5]={100.432 , 65.990985 , 45.3, 5.54, 3.9987};
- float niz1[5]={100.432 , 65.990985 , 45.3}; //djelomicna
- Inicijalizacija unosom vrijednosti
- cin>>niz2[i];
- Inicijalizacija eksplicitnom dodjelom
- niz3[i]=float(i)*i*i/7;
- Operacije nad članovima niza
- Operacije ovise o tipu podatka koji je upotrijebljen pri deklaraciji niza – aritmetičke, unos, ispis, usporedba
- Svaki član niza se može posmatrati kao jedna varijabla za koju vrijede sva pravila za taj tip.
- Napomena - Tip podatka određuju:
- skup vrijednosti koje podatak može imati,
- memorijski prostor potreban za smještanje podatka,
- operacije koje mogu da se vrše nad tim podatkom.
- Primjer: Operacije na nizu - računanje prosjeka niza
- float niz4[5]; //
- float prosjek=0;
- for (int i= 0; i<5; i++)
- {
- niz4[i]=i+1.023;
- }
- for (int i= 0; i<5; i++)
- {
- prosjek +=niz4[i];
- }
- prosjek/=5;
- cout<<prosjek<<endl;
- Manpulacija određenim članovima
- float niz4[5];
- for (int i= 0; i<5; i++) //inicijaliziranje niza
- {
- niz4[i]=i+1.023;
- }
- niz4[2]=niz4[0]+niz4[3];
- cout<<niz4[2]<<endl;
- Primjer: Fibonacci niz
- Primjer slučaja gdje korištenje niza uveliko olakšava posao programera
- Primjer 2 – Da li je broj clan
- Fibonacci serije (sa i bez nizova)
- Da li je broj clan Fibonacci serije? (bez nizova)
- bool fibonaci(int n)
- {
- int fiboN, fiboNmin1=1, fiboNmin2=1, counter=1, yes=0;
- cout<<"Enter number: ";
- while (counter <= n)
- {
- fiboN = fiboNmin2 + fiboNmin1;
- fiboNmin1 = fiboNmin2;
- fiboNmin2 = fiboN;
- counter++;
- if (n==fiboN)
- yes=1;
- }
- if (yes == 1)
- return true;
- else
- return false;
- }
- Primjer: Fibonacci niz
- int niz4[10];
- niz4[0]=0;
- niz4[1]=1;
- for (int i= 2; i<10; i++) //inicijaliziranje Fibonacci niza
- {
- niz4[i]=niz4[i-1]+niz4[i-2];
- }
- for (int i= 0; i<10; i++)
- {
- cout<<setw(3)<<niz4[i];
- }
- Da li je broj clan Fibonacci serije – v.2
- int niz4[20]; //Fibonacci sekvenca - podrazumjevamo da je broj manji od 20-tog elementa Fibonacci niza
- int test_broj;
- cin>>test_broj; //podrazumjevamo broj veci od 2
- niz4[0]=0;
- niz4[1]=1;
- for (int i= 2; i<20; i++)
- {
- niz4[i]=niz4[i-1]+niz4[i-2];
- if (niz4[i]==test_broj)
- {
- cout<<"Broj jeste u Fibonacci nizu"<<endl;
- break;
- }
- else if(niz4[i]>test_broj)
- {
- cout<<"Broj nije u Fibonacci nizu"<<endl;
- break;
- }
- }
- Niz kao parametar funkcije
- U funkciju je moguće proslijediti niz u cjelini, ali i pojedinačne elemente niza
- Niz kao cjelina se proslijeđuje kao pseudoreferentni parametar
- Pojedinačni elementi se mogu prosljeđivati kao:
- parametri po vrijednosti i
- referentni parametri;
- Pseudoreferentni parametar
- Zašto pseudoreferentni parametar?
- cout<<niz[1];
- cout<<niz[5];
- cout<<niz[i]; //i je integer
- cout<<niz;
- Pseudoreferentni parametar
- Ime niza sadrži adresu prvog elementa tog niza
- cout<<niz; //daje adresu
- Pitanja?
- == Predavanje 22_23_24.pptx
- Programiranje 1
- FIT Mostar
- Dvodimenzionalni nizovi
- Mogu se razumjeti kao matrice ili kao tabele
- Dimenzija 2
- Dimenzija 1
- Dvodimenzionalni nizovi
- niz se može opisati kao niz čiji su elementi nizovi
- elementima niza se pristupa navođenjem indeksa reda i indeksa kolone
- Smještanje niza u memoriji
- const int x=5, y=4;
- int main()
- {
- int tabela[x][y];
- .....
- Smještanje niza u memoriji
- Smještanje niza u memoriji
- Kao i kod 1D niza, 2D niz se smešta u kontinualni memorijski blok
- Dvodimenzionalni nizovi
- Niz: int tabela[x][y], kako se računa lokacija [i][j]
- npr. tabela[2][3]
- &E = &PE + (i*Y+j) ili
- Adresa elementa = Adresa prvog elementa + (i*Y+j)
- PE (adr=0)
- [i][j]
- Y
- X
- Deklaracija niza
- tip identifikator [br_elemenata1] [br_elemenata2];
- int neki_nas_niz [5][8];
- tip – bilo koji validan tip podatka u C++
- identifikator – bilo koje validno ime u C++
- u uglastim zagradama se navode brojevi elemenata
- Napomena: u slučaju statičkih nizova veličina niza mora biti KONSTANTA
- Deklaracija i inicijalizacija
- Inicijalizacija pri deklaraciji:
- int matrica [3][2]={{1,2}, {3,4}, {5,6}}
- ili
- int matrica [3][2]={{1}, {3,4}, {5}};
- int matrica [3][2]={1,3,6,12};
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 3
- 4
- 5
- 1
- 3
- 6
- 12
- Inicijalizacija
- Unosom preko tastature:
- cin>>niz[i][j];
- Eksplicitnom dodjelom
- niz[i][j] = 56;
- Korištenje 2D nizova
- Obično je potrebna ugnježdena petlja za indeksiranje obje dimenzije
- for (int i =0; i<x; i++)
- {
- for (int j=0; j<y; j++)
- {
- niz[i][j]=i*10+j;
- }
- }
- Prosljeđivanje 2D niza u funkciju
- Obavezno navođenje druge dimenzije
- (ili ostalih dimenzija za višedimenzionalne nizove) unutar uglastih zagrada
- Varijanta 1:
- upotreba globalnih konstanti;
- const int v1=3, v2=4;
- void unos(int [][v2]);
- Varijanta 2:
- prosljeđivanje dimenzija 2D niza kao zasebnih parametara
- void unos(int [][4], int, int);
- Pitanja?
- == Predavanje 13_14_15.pptx
- Programiranje 1
- FIT Mostar
- I Parcijalni ispit
- Ukoliko prilikom korištenje while petlje stavimo tačku-zarez iza uvjeta npr. while(i<100); { naredba 1; naredba2; } ishod će biti sljedeći:
- program će raditi, ali neispravno
- kompajler će smatrati da je tijelo petlje prazno
- moguća je beskonačna petlja
- nastaje logička pogreška
- Izraz: a = a - b - c; ekvivalentan je izrazima:
- a-= b + c;
- a = a - (b + c);
- Konstante koristimo iz sljedećih razloga:
- čitljivosti koda
- mogućnost izmjene vrijednosti varijable samo na jednom mjestu
- Tvrdnje koje opisuju pojam algoritma u programiranju:
- svaki zadatak koji se zadaje računaru u vidu poruke – programa, sadrži neki algoritam
- model koji definira akcije koje treba izvršiti po tačno utvrđenom redoslijedu i u konačnom vremenu
- Rezultat = 10
- Rezultat = 8
- Navedene naredbe se izvršavaju sekvencijalno?
- Sekvencijalno?
- Sekvencijalno?
- Unutar while petlje ili unutar uvjeta nužno je da se nalazi naredba koja će promijeniti vrijednost varijabli čije se vrijednosti unutar uvjeta provjeravaju.
- Kad se tip podatka s desne strane operatora dodjele razlikuje od tipa podatka varijable koja se nalazi s lijeve strane u C++ se vrši konverzija vrijednost s desne strane u tip podatka varijable s lijeve strane.
- int i;
- float a=3.2654;
- i=a;
- cout<<i;
- ?
- U smislu kompjuterskog programiranja može se reći da tip podatka određuju sljedeće stavke:
- skup vrijednosti koje podatak može imati
- memorijski prostor potreban za smještanje podatka
- operacije koje mogu da se vrše nad tim podatkom
- ?
- Postoje tri osnovne grupe podataka:
- ulazni podaci
- izlazni podaci
- podaci koji nastaju u vrijeme izvršavanja programa (unutrašnji podaci programa)
- compile-time errors
- link-time errors
- run-time errors
- Ukoliko na kraju nekog slučaja (case) u switch iskazu ZABORAVITE navesti naredbu break?
- Statistka ispita
- Većinska prolaznost-OK ali može još mnogo bolje
- Count of OCJENA
- OCJENA
- Total
- 6
- 51
- 7
- 34
- 8
- 17
- 9
- 8
- 10
- 10
- Grand Total
- 120
- Analiza ispita
- “Šablonski” zadaci <–> “Šablonska” rješenja
- Najmanje tačnih rješenja – zadatak broj 2
- Najviše koristi od zadatka broj 3 koji je nosio najviše bodova
- Kretivnost?
- Problem solving?
- Dobre ideje i nestandardni pristupi - OK
- Do kraja semestra
- Funkcije
- Nizovi
- Jednodimenzionalni
- Dvodimenzionalni
- Čime se rješavaju problemi?
- 14. Funkcije
- main()
- FUNKCIJE
- Svaki C++ program mora imati funkciju main.
- Izvršavanje programa uvijek počinje funkcijom main.
- Bilo koja druga funkcija je potprogram i mora biti pozvana.
- FUNKCIJE
- pow()
- sin()
- cos()
- ....
- FUNKCIJE
- U matematici, proces koji, za dati ulaz (određenog tipa), proizvodi jedinstven izlaz naziva se funkcija.
- Efekt procesa obrade na računaru može se promatrati kao evaluacija funkcija.
- Zato su funkcije najvažnija matematička tema u oblasti kompjuterske obrade.
- FUNKCIJE
- Funkcija F iz skupa X u skup Y prima ulazne vrijednosti iz skupa D
- Svaki element iz skupa D pripada skupu X (X je obično potskup skupa D koji može a i ne mora sadržavati cijeli skup D)
- Za svaki element x iz D, funkcija F proizvodi jedinstven odgovarajući izlaz F(x).
- Ako x nije iz D, F(x) nije definirana.
- Za funkciju F skup X je izvorni skup a skup Y ciljni skup.
- Skup D je domena funkcije F.
- Pišemo F : X -> Y
- FUNKCIJE
- Zašto upotrebljavamo funkcije?
- Raščlanjujemo problem na manje dijelove.
- Razlučujemo dijelove koji imaju zajednička svojstva, tj čine cjelinu.
- Upotrebljavamo funkcije iz svojih ili drugih biblioteka funkcija i iz drugih programa. Stvaramo vlastite biblioteke funkcija!
- Mogućnost poziva istoga programskog modula sa drugim podacima.
- FUNKCIJE
- U programski jezik C++ je ugrađeno mnoštvo funkcija (smješteno u standardne biblioteke funkcija).
- #include <iostream>
- #include <cmath>
- #include <conio>
- #include <iomanip>
- #include “naseFunkcije.h”
- ?
- NEKE MATEMATIČKE FUNKCIJE
- abs(x) aritmetička funkcija, koja izračunava apsolutni iznos nekog parametra x(int). Rezultat ima isti tip kao i parametar.
- atan(x) aritmetička funkcija, koja izračunava arkus tangens nekog parametra x(double). Rezultat ima tip double. Rezultat je dat u stupnjevima.
- cos(x) aritmetička funkcija, koja izračunava (realnu) vrijednost kosinusne funkcije nekog parametra x(double). Parametar x se je u stupnjevima.
- exp(x) aritmetička funkcija, koja izračunava vrijednost eksponencijalne funkcije. Parametar x je tipa double. Rezultat je tip double.
- sin, log, log10, pow, sqrt......
- OSNOVNI ELEMENTI FUNKCIJE
- Program izrađen u programskom jeziku C++ sastoji se, uglavnom, od funkcija koje mogu biti:
- Funkcije, koje rezultate daju kroz listu parametara. Definiraju se i deklariraju kao tip void.
- Funkcije, koje rezultat daju preko svoga imena, imaju tip "zadane vrijednosti".
- TIP FUNKCIJE
- tip_podatka imeFunkcije (argumenti)
- Npr.
- int sabiranje(int a, intb)
- {
- ....
- }
- TIP FUNKCIJE
- void sabiranje()
- int oduzimanje()
- float dijeljenje()
- char izborSlova()
- VOID
- int a=2,b=3;
- void sabiranje()
- {
- int c;
- c = a+b;
- a++;
- cout<< "Rezultat sabiranja je: "<<c<<endl;
- cout<<a<<endl;
- }
- void main()
- {
- sabiranje();
- cout<<a<<endl;
- system("pause");
- //return 0; // ne treba return
- }
- INT, DOUBLE, FLOAT....
- int a=5,b=3;
- int oduzimanje()
- {
- int c;
- c = a-b;
- //cout<< "Rezultat oduzimanja je: "<<c<<endl;
- return c;
- }
- void main()
- {
- int rez;
- rez=oduzimanje();
- cout<< "Rezultat oduzimanja je: "<<rez<<endl;
- system("pause");
- }
- Variable scope (područne, obim)
- Voditi racuna da se ne koriste varijable koje funkcija “ne vidi”,
- Analogija sa petljama,
- Varijable sa stanovišta “scope” djelimo na:
- Lokalne varijable – unutar jedne petlje, bloka ili funkcije
- Globalne varijable – deklarisane van svih funkcija
- Deklariranje i definiranje funkcija
- Deklariranjem funkcije saopćava se ostalom dijelu programa da u tom programu postoji funkcija sa navedenim imenom.
- Definiranjem funkcije se utvrđuje, šta funkcija radi.
- DEKLARACIJA (PROTOTIP) FUNKCIJE
- DEFINICIJA FUNKCIJA
- Deklaracija i Definicija
- int a=5,b=3;
- int mnozenje(); //deklaracija
- void main()
- {
- int rez;
- rez=mnozenje();
- cout<< "Rezultat mnozenja je: "<<rez<<endl;
- system("pause");
- }
- int mnozenje() //definicja
- {
- int c;
- c = a*b;
- //cout<< "Rezultat mnozenja je: "<<c<<endl;
- return c;
- }
- Poziv funkcije
- Poziv void funkcije,
- sabiranje();
- Poziv funkcije koja vraca podatke.
- rez=mnozenje();
- Parametri funkcije
- Argument (actual parameter) - Aktualni parametri su oni parametri, koji pri pozivu funkcije stoje u listi parametara i njihova aktualna vrijednost je poznata.
- Parametar (formal parameter) - Formalni parametri stoje u zaglavlju (dio definicije funkcije) pozvane funkcije i prije poziva ove funkcije nije im dodijeljena vrijednost.
- int povrs_pravoug(int stranica1, int stranica2); //Formalni parametri
- void main()
- {
- int strA =5, strB=4;
- rez=povrs_pravoug(strA, strB); //Aktualni parametri
- cout<< "Povrsina pravougaonika je: “<<rez<<endl;
- system("pause");
- {
- int povrs_pravoug(int stranica1, int stranica2)
- {
- return stranica1*stranica2;
- }
- Prije poziva funkcije u programu, kompajler mora obraditi ili deklaraciju (prototip) funkcije ili njenu definiciju (zaglavlje i tijelo funkcije) !
- Poziv i izvršenje
- Za pozvanu funkciju:
- Određuje se privremeni memorijski prostor
- za vrijednosti njenih parametara i bilo koju lokalnu varijablu,
- za ime funkcije ako vrijednost koju funkcija vraća nije tipa void.
- Zatim kontrola toka izvršavanja programa prelazi na prvi iskaz u tijelu funkcije. Iskazi u tijelu funkcije se izvršavaju sve dok se ne desi nešto od:
- return iskaz (sa ili bez vraćene vrijednosti) ili
- zatvorena vitičasta zagrada tijela funkcije.
- Tada se kontrola izvršavanja programa prenosi ponovo u programski blok - na mjesto odakle je funkcija pozvana.
- Vrste poziva funkcije
- U smislu proslijeđivanja argumenata razlikujemo pozive funkcije:
- Call by value (poziv po vrijednosti)
- Call by reference (poziv po referenci)
- Poziv po vrijednosti
- Prijenos parametara po vrijednosti – formalni parametar prima kopiju vrijednosti argumenata koja im se prenosi.
- Kao posljedica toga, ako funkcija napravi bilo kakvu promjenu na parametrima ovo neće promijeniti vrijednosti argumenta.
- - slijedi detaljniji prikaz na primjeru -
- vrijednost
- in1
- adresa
- vrijednost
- in2
- adresa
- Varijabla in1 u memoriji
- Varijabla in2 u memoriji
- Variajble in1 i in2 upotrijebićemo kao parametre funkcije:
- void fff(int in1, int in2);
- void fff(int in1, int &in2);
- Parametri po vrijednosti
- Parametar po vrijednosti
- Parametar po referenci
- Ili izlazni parametar
- & je adresni operator – funkcija fff “zna” memorijsku adresu varijable in2
- #include <iostream>
- using namespace std;
- void fff(int in1, int in2);
- int main()
- {
- int brojac = 7, indeks = 12;
- cout << "vrijednosti su ";
- cout<<"\t"<<brojac<<"\t"<<indeks<<endl;
- fff(brojac, indeks);
- cout <<"vrijednosti su ";
- cout<<"\t"<<brojac<<"\t"<<indeks<<endl;
- return 0;
- }
- //definicija funkcije
- void fff(int in1, int in2)
- {
- in1 = in1 + 100;
- in2 = in2 + 100;
- cout <<"vrijednosti su ";
- cout<<"\t"<<in1<<"\t"<<in2<<endl;
- }
- Poziv funkcije po vrijednosti :
- Funkciji fff se, kod poziva, daju kopije vrijednosti (7, 12)
- Prikazujemo vrijednosti in1 i in2:
- -prije poziva funkcije fff
- -iz funkcije fff
- -nakon poziva funkcije fff
- 7
- in1
- Adresa 1
- 12
- in2
- Adresa 2
- fff(brojac, indeks);
- Adresa (poziva)
- in1
- in2
- //definicija funkcije
- void fff(int in1, int in2)
- {
- in1 = in1 + 100;
- in2 = in2 + 100;
- cout <<"vrijednosti su ";
- cout<<"\t"<<in1<<"\t"<<in2<<endl;
- }
- Adresa (poziva)
- 7
- 12
- 107
- 112
- 7
- in1
- Adresa 1
- 12
- in2
- Adresa 2
- 7
- 12
- Adresa (poziva)
- (in1 = in1 + 100) je 107
- (in2 = in2 + 100) je 112
- in1
- in2
- //definicija funkcije
- void fff(int in1, int in2)
- {
- in1 = in1 + 100;
- in2 = in2 + 100;
- cout <<"vrijednosti su ";
- cout<<"\t"<<in1<<"\t"<<in2<<endl;
- }
- Adresa (poziva)
- #include <iostream>
- using namespace std;
- void fff(int in1, int in2);
- int main()
- {
- int brojac = 7, indeks = 12;
- cout << "vrijednosti su ";
- cout<<"\t"<<brojac<<"\t"<<indeks<<endl;
- fff(brojac, indeks);
- cout <<"vrijednosti su ";
- cout<<"\t"<<brojac<<"\t"<<indeks<<endl;
- return 0;
- }
- Poziv po referenci
- Proslijeđuje se adresa memorijske lokacije na kojoj je zapisana varijabla
- Sve što funkcija uradi sa proslijeđenom varijablom primjeni se upravo na tu varijablu na njenoj adresi a ne na kopiju varijable
- #include <iostream>
- using namespace std;
- void fff(int in1, int &in2);
- int main()
- {
- int brojac = 7, indeks = 12;
- cout << "vrijednosti su ";
- cout<<"\t"<<brojac<<"\t"<<indeks<<endl;
- fff(brojac, indeks);
- cout <<"vrijednosti su ";
- cout<<"\t"<<brojac<<"\t"<<indeks<<endl;
- return 0;
- }
- //definicija funkcije
- void fff(int in1, int &in2)
- {
- in1 = in1 + 100;
- in2 = in2 + 100;
- cout <<"vrijednosti su ";
- cout<<"\t"<<in1<<"\t"<<in2<<endl;
- }
- Poziv funkcije po referenci :
- Funkciji fff se, kod poziva, daje kopija vrijednosti 7 za parametar po vrijednosti a za referentni parametar funkcija fff “zna” adresu.
- int in1 parametar po vrijednosti
- int &in2 parametar po refrenci
- 7
- in1
- Adresa 1
- 12
- in2
- Adresa 2
- fff(brojac, indeks);
- Adresa (poziva iz main)
- in1
- //definicija funkcije
- void fff(int in1, int &in2)
- {
- in1 = in1 + 100;
- in2 = in2 + 100;
- cout <<"vrijednosti su ";
- cout<<"\t"<<in1<<"\t"<<in2<<endl;
- }
- Adresa (poziva)
- 7
- 107
- 112
- 7
- in1
- Adresa 1
- 12
- in2
- Adresa 2
- 7
- Adresa (poziva iz main)
- (in1 = in1 + 100) je 107
- in1
- //definicija funkcije
- void fff(int in1, int &in2)
- {
- in1 = in1 + 100;
- in2 = in2 + 100;
- cout <<"vrijednosti su ";
- cout<<"\t"<<in1<<"\t"<<in2<<endl;
- }
- Adresa (poziva)
- #include <iostream>
- using namespace std;
- void fff(int in1, int &in2);
- int main()
- {
- int brojac = 7, indeks = 12;
- cout << "vrijednosti su ";
- cout<<"\t"<<brojac<<"\t"<<indeks<<endl;
- fff(brojac, indeks);
- cout <<"vrijednosti su ";
- cout<<"\t"<<brojac<<"\t"<<indeks<<endl;
- return 0;
- }
- 112
- #include <iostream>
- using namespace std;
- void fff(int &in1, int &in2);
- int main()
- {
- int brojac = 7, indeks = 12;
- cout << "vrijednosti su ";
- cout<<"\t"<<brojac<<"\t"<<indeks<<endl;
- fff(brojac, indeks);
- cout <<"vrijednosti su ";
- cout<<"\t"<<brojac<<"\t"<<indeks<<endl;
- return 0;
- }
- //definicija funkcije
- void fff(int &in1, int &in2)
- {
- in1 = in1 + 100;
- in2 = in2 + 100;
- cout <<"vrijednosti su ";
- cout<<"\t"<<in1<<"\t"<<in2<<endl;
- }
- Poziv funkcije po referenci :
- Kod poziva, ne daju se kopije parametara __za referentne parametre funkcija fff “zna” adrese.
- int &in1 parametar po referenci
- int &in2 parametar po refrenci
- 7
- in1
- Adresa 1
- 12
- in2
- Adresa 2
- fff(brojac, indeks);
- Adresa (poziva iz main)
- in1
- //definicija funkcije
- void fff(int &in1, int &in2)
- {
- in1 = in1 + 100;
- in2 = in2 + 100;
- cout <<"vrijednosti su ";
- cout<<"\t"<<in1<<"\t"<<in2<<endl;
- }
- Adresa (poziva)
- 112
- 107
- 7
- in1
- Adresa 1
- 12
- in2
- Adresa 2
- Adresa (poziva iz main)
- //definicija funkcije
- void fff(int &in1, int &in2)
- {
- in1 = in1 + 100;
- in2 = in2 + 100;
- cout <<"vrijednosti iz funkcije su ";
- cout<<"\t"<<in1<<"\t"<<in2<<endl;
- }
- Adresa (poziva)
- #include <iostream>
- using namespace std;
- void fff(int &in1, int &in2);
- int main()
- {
- int brojac = 7, indeks = 12;
- cout << "vrijednosti prije poziva funkcije su ";
- cout<<"\t"<<brojac<<"\t"<<indeks<<endl;
- fff(brojac, indeks);
- cout <<"vrijednosti nakon poziva funkcije su ";
- cout<<"\t"<<brojac<<"\t"<<indeks<<endl;
- return 0;
- }
- 112
- 107
- Grupisanje funkcija u bibliotekama
- Lakše održavanja
- Preglednost code-a
- Ponovno korištenje
- Biblioteke
- #include <iostram>
- #include “mojeFunkcije.h” //mora biti u istom direktoriju
- mojeFunkcije.h i mojeFunkcije.cpp
- I u main.cpp i u mojeFunkcije.cpp moraju biti uključene sve ostale potrebne biblioteke.
- Header file mojeFunkcije.h
- #ifndef MOJEFUNKCIJE_H
- #define MOJEFUNCIJE_H
- int neka_moja_fcija(int a); //Deklaracije funkcija....
- int neka_druga_moja_fcija(int a);
- #endif
- Source file mojeFunkcije.cpp
- #include <iostream>
- #include “mojeFunkcije.h”
- int neka_moja_fcija(int a)
- {
- //Linije code-a funkcije
- }
- int neka_druga_moja_fcija(int a)
- {
- //Linije code-a funkcije
- }
- main.cpp
- #include <iostream>
- #include “mojeFunkcije.h”
- void main()
- {
- int a, b=3;
- a=neka_moja_fcija(b); //poziv funkcije iz biblioteke
- }
- Pitanja?