83
PROCEDURALNO PROGRAMIRANJE PROGRAMIRANJE Aleksandar Karač Mirsad Subašić MFZE, kancelarija 1111 tel: 449 129 PFZE tel: - [email protected] [email protected] www.pf.unze.ba/pp 2010/2011

Predavanja

Embed Size (px)

Citation preview

Page 1: Predavanja

PROCEDURALNO PROGRAMIRANJEPROGRAMIRANJE

Aleksandar Karač Mirsad Subašić

MFZE, kancelarija 1111

tel: 449 129

PFZE

tel: -

[email protected] [email protected]

www.pf.unze.ba/pp 2010/2011/

Page 2: Predavanja

O kursu Proceduralno programiranje ............

Izvođenje nastave• predavanja: 2 časa sedmično

• vježbe: 2 časa sedmično• vježbe: 2 časa sedmično

Obaveze studenata• redovno prisustvo na predavanjima i vježbama

Provjera znanja

• urađene i kolokvirane domaće zadaće (ukupno 2 zadaće)

• dva testa u toku semestra (uglavnom teorija, kviz pitanja) – obavezno

• pismeni ispit (zadaci)

Konačna ocjena

• prisustvo nastavi: 0 %

• zadaća: 30 %

• testovi: 20 %

• pismeni ispit: 50 %

Svaka od stavki mora biti >50%

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/pp 2

• pismeni ispit: 50 %

Page 3: Predavanja

O kursu Proceduralno programiranje ............

OSNOVNA LITERATURA

•Predavanja, skripta (web, biblioteka), vježbe

DODATNA LITERATURA (za entuzijaste!!!)

B M tik J Š ib D i tifi i i C++ L t Z b 2001• B. Motik, J. Šribar: Demistificirani C++, Lemenet, Zagreb, 2001.• Lippman S., Lajoie J., C++ Primer, 4th edition, Addison Wesley, 2005.• Bjarne Stroustrup, The C++ Programming Language (Special 3rd Edition), Addison-Wesley, 2000• C++ standard – ISO/IEC 14882• Sharam Hekmat C++ Programming Pragmatix Software Pty Ltd (www pragsoft com )Sharam Hekmat, C Programming, Pragmatix Software Pty. Ltd. (www.pragsoft.com )• http://www.cplusplus.com/doc/tutorial/• Randy Davis, C++ for Dummies, 5th edition

St l Li C E ti l Addi W l 2002• Stanley Lippman, C++ Essentials, Addison Wesley, 2002• Jeff Kent, C++ demystified: A self-teaching guide, McGraw-Hill/Osborne, 2004• Jesse Liberty, Sams Teach Yourself C++ in 21 Days, second edition

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/pp 3

Page 4: Predavanja

O kursu Proceduralno programiranje ............

SADRŽAJ KURSA

• Uvod. Kratki istorijat programskih jezika.O proceduralnom programiranju.Programski paket Dev-C ++.

• Osnove programiranja. Struktura programa. Proces kompajliranja. Varijable. Memorija. Ulazno/izlazniusmjerivači toka. Komentari. Imena (identifikatori). Tipovi podataka.

• Operatori. Aritmetički operatori. Relacijski operatori. Logički operatori. Bitovni operatori. Inkrementalni i dekrementalni operatori. Operatori pridruživanja. Uslovni (ternarni) operator. Operator razdvajanja (zarez-operator). sizeof operator. Hijerarhija operatora.

• Naredbe. Jednostavne i složene naredbe. Naredba if. Naredba switch. Naredba while. Naredba do. Naredba for.

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/pp 4

Page 5: Predavanja

O kursu Proceduralno programiranje ............

SADRŽAJ KURSA

• Funkcije. Definicija funkcija. Parametri i argumenti. Globalne i lokalne varijable. Rekurzivne funkcije. Opterećene (overloaded) funkcije.

• Polja (arrays). Definisanje i inicijalizacija polja. Multidimenzionalna polja.

• Pointeri. Osnovno o pointerima. Dinamička memorija. Pointeri i polja. Aritmetika sa pointerima. Funkcijski pointeri. Reference.

• Datoteke. Standardna biblioteka fstream. "Životni" ciklus pristupa datotekama.

• U susret objektno-orijentisanom programiranju. Proceduralno i objektno-orijentisano programiranje. Prednosti objektno-orijentisanog programiranja. karakteristike objektno-orijentisanih jezika. j j

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/pp 5

Page 6: Predavanja

O kursu Proceduralno programiranje ............

PLAN IZVOĐENJA KURSA

Sedmica I: Uvod. Programski paket Dev-C++ …

Sedmica II i III: Osnove programiranja. Operatori

Sedmica IV i V: Naredbe

Sedmica VI i VII: Funkcije

12. april: TEST 1 (pređeno gradivo)

Sedmica IX i X: Polja

Sedmica XI i XII: Pointeri

Sedmica XIII i XIV: Datoteke

31. maj: TEST 2 (Polja, Pointeri, Datoteke ili integralno)

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/pp 6

Page 7: Predavanja

O kursu Proceduralno programiranje ............

ZADAĆA 1: Osnove programiranja, Operatori, Naredbe, Funkcije

Zadata: 08. mart 2011.Rok za predaju: 22. april 2011.

ZADAĆA 2: Polja, Pointeri, Datoteke

Zadata: 19. april 2011.Rok za predaju: 3. juni 2011.p j j

IF (DATUM_PREDAJE > ROK_ZA_PREDAJU)COUT<< “OCJENA ZADACE SE UMANJUJE 20% PO SEDMICI ZAKASNJENJA\N”;

IF (OCJENA < 50)COUT<< “STUDENT NE MOZE IZACI NA ISPIT\N”

“ I OBAVEZE MOZE ISPUNITI U AKADEMSKOJ 2011/2012\N”<< “ I OBAVEZE MOZE ISPUNITI U AKADEMSKOJ 2011/2012\N”;ELSE

COUT << “STUDENT MOZE IZACI NA PISMENI ISPIT!\N”

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/pp 7

Page 8: Predavanja

Uvod

1822 – zupčanici, diferentna mašina

Istorijat programskih jezika

1822 zupčanici, diferentna mašina1942 – električni signali, ENIAC1945 – Von Neumannovi koncepti: tehnika podjele programa i transfer pomoću uslovne

kontrole1949 Sh t C d (j ik l kt k kl )1949 – Short Code (jezik za elektronske sklopove)1957 – FORTRAN1959 – COBOL1968 – Pascal1968 Pascal1972 – C jezik

’70-80 – OOP jezici

1967 – SIMULA 1978 – SmallTalk1983 – C++1983 – C++1988 – Eifell’90te – Java...

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/pp 8

Page 9: Predavanja

Uvod

Proceduralno ili OOP

Pristupi u analiziranju problema u programiranju

Objekat MarsMars

•Procedura za izračunavanje brzine

•Procedura za izračunavanje trenja

Objekat svemirski brod

•Procedura za izračunavanje trenja

•Potrebna količina goriva

•Težina raketa za polijetanje Objekat Zemlja

•.....

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/pp 9

Page 10: Predavanja

Uvod

Algoritamski (proceduralni) pristup

Ispisni meniji

Izbor: podizanje novca

Izbor: depozit Izbor: dodatna informacija

Upitati korisnika za svotu koju diže

Upitati korisnika za depozit

Upitati korisnika koju informaciju želisvotu koju diže za depozit informaciju želi

Potvrditi svotu

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/pp 10

Page 11: Predavanja

Uvod

Algoritamski (proceduralni) pristup

• Funkcionalna dekompozicija

• Algoritamska dekompozicija

• Strukturno programiranje

• “Top-down” programiranje

• Proceduralno programiranje• Proceduralno programiranje

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/pp 11

Page 12: Predavanja

Uvod

Download

Programski paket Dev-C++

www.pf.unze.ba/PPbl d h d t/d /d ht l

Download

www.bloodshed.net/dev/devcpp.html

devcpp-4.9.9.2_setup.exe

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/pp 12

Page 13: Predavanja

Uvod

Osnovni prozor

Programski paket Dev-C++

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/pp 13

Page 14: Predavanja

Uvod

Otvaranje nove datoteke

Programski paket Dev-C++

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/pp 14

Page 15: Predavanja

Uvod

Kreiranje prvog programa

Programski paket Dev-C++

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/pp 15

Page 16: Predavanja

Uvod

Kompajliranje prvog programa

Programski paket Dev-C++

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/pp 16

Page 17: Predavanja

Uvod

Pokretanje prvog programa

Programski paket Dev-C++

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/pp 17

Page 18: Predavanja

Osnove programiranja u C++

Struktura programa

1 #include <iostream>2 using namespace std;3 int main()

{4 {5 cout << “Vozdra, raja!” << endl;6 system("PAUSE");7 return 0;7 return 0;8 }

P i j i d

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 18

Primjeri: vozdra.cpp

Page 19: Predavanja

Osnove programiranja u C++

Proces kompajliranja

C++program

C++prevodilac

Ckod

Ckompajler

C++Objektni

kodC++program

prirodnikompajler

linker Izvršnadatoteka

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 19

Page 20: Predavanja

Osnove programiranja u C++

• Tip

Varijable

Definisanje, deklarisanje i inicijalizacija varijabli

p

• Vrijednost

#include <iostream> using namespace std;main()a (){

int a,b,c;float x = 4.32;int e f g;int e,f,g;char ime;e = 4;f = g = 12;ime = 'C'ime = C

}

extern int broj; // deklarise ali ne i definise brojint broj; // deklarise i definise broj

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 20

int broj; // deklarise i definise broj

Page 21: Predavanja

Osnove programiranja u C++

adresa

Memorija

1211 1212 1213 1214 1215 1216 1217 ... bajt bajt bajt bajt bajt bajt bajt ... Memorija

adresa

1 1 0 1 0 0 0 11 1 0 1 0 0 0 1

int zarada = 500;

1211 1212 1213 1214 1215 1216 1217b j b j b j 10110011 10110011 b j b j M ij

int zarada = 500;

... bajt bajt bajt 10110011 10110011 bajt bajt ... Memorija

zarada

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 21

Page 22: Predavanja

Osnove programiranja u C++

Ulazno-izlazne naredbe (>> , <<)

#include <iostream>using namespace std;

int main (void)int main (void){

int radniDani = 22;float radniSati = 7.5;fl t t i l tfloat satnica, plata;

cout << "Kolika je satnica? ";cin >> satnica;

plata = radniDani * radniSati * satnica;cout << "Plata = ";cout << plata;cout << '\n';

}

P i j i UI db

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 22

Primjeri: UInaredbe.cpp

Page 23: Predavanja

Osnove programiranja u C++

#i l d i t

Komentari (//, /* ........*/)

#include <iostream>using namespace std;

/* Ovaj program racuna ukupnu platu radnika, koja se zasniva na ukupnom broju radnih sati i satnici. */

int main (void){

int radniDani = 22; // Broj radnih dana u mjesecufloat radniSati = 7.5; // Broj radnih sati u danufloat satnica = 33.50; // Satnicafloat plata; // Ukupna mjesecna platap ; p j p

// Racunanje i ispis plate

plata = radniDani * radniSati * satnica;plata radniDani radniSati satnica;cout << "Plata = " << plata << '\n';

}

P i j i k t i

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 23

Primjeri: komentari.cpp

Page 24: Predavanja

Osnove programiranja u C++

• ime treba da se sastoji od jednog ili više karaktera, od kojih bilo koji može biti

Imena identifikatori

ime treba da se sastoji od jednog ili više karaktera, od kojih bilo koji može biti slovo (tj, slova engleske abecede a-z i A-Z), broj (0-9) i znak “_", pri čemu na prvom mjestu ne može da bude broj.

• velika i mala slova se razlikuju (zarada nije isto što i Zarada)

• ime ne može biti ključna riječ u C++

Ključne riječi u C++ (nepotpuna lista)j j ( p p )

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 24

Page 25: Predavanja

Osnove programiranja u C++

Brojevi

Tipovi podataka

j

• cijeli brojevi (short, int, long)

short a;

int b = - 5;

long c;

unsigned short a;

unsigned int b = 5;

unsigned long c;long c; unsigned long c;

int – 4 bajta = 32 bita

Minimalan broj: 312 2147483648− = −

Maksimalan broj: 312 1 2147483647− =

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 25

Page 26: Predavanja

Osnove programiranja u C++

-oktalni zapis

int a = 010;int a 010;

-heksadecimalni zapis

int a = 0x0C;

l i b j i (fl d bl )• realni brojevi (float, double)

float pi = 3.1415926; unsigned double a = 3.1415926;

float brzinaSvjetlosti = 2.997925e8;

float naboj = -1.6E-19;

unsigned float = 2.997;

P i j i ij li d i l i

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 26

Primjeri: cijeli.cpp decimalni.cpp

Page 27: Predavanja

Osnove programiranja u C++

• ograničenja brojevnih tipova (climits, cfloat)

cout << "Najmanji int: " << INT MIN << endl;cout << Najmanji int: << INT_MIN << endl;

cout << "Najveci int: " << INT_MAX << endl;

cout << "Najmanji long: " << LONG_MIN << endl;

cout << "Najveci int: " << LONG_MAX << endl;

cout << "Najveci float: " << FLT_MAX << endl;

cout << "Najmanji double:" << DBL MIN << endl;cout Najmanji double: DBL_MIN endl;

• simboličke konstante

const float pi = 3.1415926;

#define pi 3.1415926

P i j i i j i b li k

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 27

Primjeri: ogranicenja.cpp simbolicke.cpp

Page 28: Predavanja

Osnove programiranja u C++

bool jaSamStudent = true;

Logički tipovi (bool)

j

bool autoLeti = false;

Karakteri (char)Karakteri (char)

char slovoAbecede = ‘a’;

‘\n’ – novi red‘\t’ – novi tabulator‘\v’ – novi vertikalni tabulator\v – novi vertikalni tabulator‘\b’ – backspace‘\’’ – znak navoda (apostrof)‘\”’ – dvostruki znak navoda‘\\’ – backslash (/)‘\a’ – zvučni signal

P i j i l i ki k kt i

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 28

Primjeri: logicki.cpp karakteri.cpp

Page 29: Predavanja

Operatori

Operator Ime Primjer

Aritmetički operatori

Operator Ime Primjer+ Sabiranje 12 + 4.9 // daje 16.9 - Oduzimanje 3.98 - 4 // daje -0.02 * Množenje 2 * 3.4 // daje 6.8 / Dijeljenje 9 / 2.0 // daje 4.5% Ostatak pri dijeljenju 13 % 3 // daje 1

Pojam preljeva0 1 2-1

-2

oduzimanje sabiranje

j p j

int

32767-32768

-32767 32766

P i j i it ti ki lj

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 29

Primjeri: aritmeticki.cpp preljev.cpp

Page 30: Predavanja

Operatori

Operator Ime Primjer

Relacijski operatori

== Jednakost 5 == 5 // daje 1!= Nejednakost 5 != 5 // daje 0 < Manje od 5 < 5.5 // daje 1 <= Manje ili jednako 5 <= 5 // daje 1 > Veće od 5 > 5 5 // daje 0> Veće od 5 > 5.5 // daje 0>= Veće ili jednako 6.3 >= 5 // daje 1

Logički operatori

Operator Ime Primjer ! Logička negacija !(5 == 5) // daje 0 && Logičko i 5 < 6 && 6 < 6 // daje 1 || Logičko ili 5 < 6 || 6 < 5 // daje 1

P i j i l ij ki l i ki

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 30

Primjeri: relacijski.cpp logicki.cpp

Page 31: Predavanja

Operatori

Bitovni operatori

P i j i bit i

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 31

Primjeri: bitovni.cpp

Page 32: Predavanja

Operatori

Inkrementi i dekrementi

Operator Ime Primjer ++ Inkrement (prefiks) ++k + 10 // daje 16 ++ Inkrement (postfiks) k++ + 10 // daje 15 -- Dekrement (prefiks) --k + 10 // daje 14 Dekrement (prefiks) k + 10 // daje 14-- Dekrement (postfiks) k-- + 10 // daje 15

P i j i i k t

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 32

Primjeri: inkrement.cpp

Page 33: Predavanja

Operatori

Operatori pridruživanja

int m, n, p; m = n = p = 5; // znači: m = (n = (p = 100));

m = (n= p = 100) + 2; // znači: m = (n = (p = 5)) + 2;

m = 100; m += n = p = 5; // znači: m = m + (n = p = 5);

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 33

Page 34: Predavanja

Operatori

d1 ? d2 d3

Uslovni (ternarni) operator

operand1 ? operand2 : operand3

int m = 1 n = 2;int m = 1, n = 2;int min = (m < n ? m : n); // min dobija vrijednost 1

Operator razdvajanja (zarez-operator)

int m, n, min;

int mBroji =0, nBroji=0;

......

min = (m < n ? mBroji++, m : nBroji++, n);

P i j i l i

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 34

Primjeri: uslovni.cpp

Page 35: Predavanja

Operatori

Ključna riječ typedef

Ključna riječ typedef omogućava uvođenje novog imena za već postojeći ugrađeni ili korisnički definisani tip podataka

typedef int broj;

Identifikator broj postaje sinonim za tip int, pa se može pisati:

broj prim = 11;

typedef double MATRICA[3][3];typedef double VEKTOR[3];

MATRICA {{1 2 0} {2 1 1} {0 1 1}}MATRICA m = {{1,2,0},{2,1,1},{0,1,1}};;VEKTOR v = {2,2,1};

P i j i t d f

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 35

Primjeri: typedef.cpp

Page 36: Predavanja

Operatori

sizeof operator

#include <iostream>using namespace std;

int main (void){

cout << "char size = " << sizeof(char) << " bytes\n";cout << "short size = " << sizeof(short) << " bytes\n";cout << "int size = " << sizeof(int) << " bytes\n";( ) y ;cout << "long size = " << sizeof(long) << " bytes\n";cout << "float size = " << sizeof(float) << " bytes\n";cout << "double size =" << sizeof(double) << " bytes\n";cout << "HELLO size = " << sizeof("HELLO") << " bytes\n";cout HELLO size sizeof( HELLO ) bytes\n ;system("pause");

}

P i j i i f

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 36

Primjeri: sizeof.cpp

Page 37: Predavanja

Operatori

HIJERARH

O P H

IJ

E RAA ATORRA

P i j i hij hij

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 37

Primjeri: hijerarhija.cpp

Page 38: Predavanja

Naredbe

Jednostavne i složene naredbe

int i; // deklaraciona naredba

• jednostavne naredbe

++i; // naredba sa popratnim efektomdouble d = 10.5; // deklaraciona naredbad + 5; // beskorisna naredba

{ int min i 10 j 20

• složene naredbe

int min, i = 10, j = 20;min = (i < j ? i : j);cout << min << '\n';

}}

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 38

Page 39: Predavanja

Naredbe

IF naredba

• tip I

if (izraz)naredba;

if (djelilac != 0)kolicnik=djelitelj/djelilac;

• tip I

naredba; kolicnik=djelitelj/djelilac;

i II

if (izraz)if ((broj%2) != 0)

cout << “Broj je neparan”;

• tip II

( )naredba1;

elsenaredba2;

j j p ;else

cout << “Broj je paran”;

P i j i t

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 39

Primjeri: parnost.cpp

Page 40: Predavanja

Naredbe

IF naredba

• tip III

if (izraz1)

• tip III

naredba1;else if (izraz2)

naredba2;else if (izraz3)else if (izraz3)

naredba3;…..

elsenaredba_n;

P i j i k d t

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 40

Primjeri: kvadratna.cpp

Page 41: Predavanja

Naredbe

SWITCH naredba

switch (izraz) {case konstanta_1:

dbnaredbe;break;case konstanta_2:naredbe;naredbe;break;...case konstanta_n:

dbnaredbe;break;default:

naredbe;naredbe;}

P i j i it h

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 41

Primjeri: switch.cpp

Page 42: Predavanja

Naredbe

WHILE naredba

while (izraz)naredba;

i = 1;sum = 0;while (i <= n)naredba; while (i n)

sum += i++;

Primjer 1. Faktorijel

Primjer 2. Neparni faktor

Primjer 3. Vrijednost funkcije sinus2 1

sin( ) ( 1)(2 1)!

ii xx

i

+∞

= −∑j j j0 (2 1)!i i= +∑

P i j i hil f kt ij l hil f kt hil i

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 42

Primjeri: while_faktorijel.cpp while_faktor.cpp while_sinus.cpp

Page 43: Predavanja

Naredbe

DO naredba

do do {

cin >> n;naredba;

while (izraz);

cin >> n;cout << n * n << '\n';

} while (n != 0);

Primjer 1. Faktorijel

Primjer 2. Kvadrat

P i j i f kt ij l

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 43

Primjeri: faktorijel.cpp

Page 44: Predavanja

Naredbe

FOR naredba

izraz1; for (izraz1; izraz2; izraz3)

naredba;

;while (izraz2) {

naredba;izraz3;

}

≡}

Primjer 1. Faktorijel

P i j 2 T bli ž jPrimjer 2. Tablica množenja

Primjer 3. ASCII tabela

Primjer 4. Vrijednost funkcije sinus2 1

0sin( ) ( 1)

(2 1)!

ii

i

xxi

+∞

=

= −+∑

Primjeri: for_faktorijel.cpp for_tabMnoz.cpp for_ascii.cpp

f i tlj i

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 44

for_sinus.cpp petlja_sinus.cpp

Page 45: Predavanja

Funkcije

Definicija funkcije

tip ime parametri (potpis)

int Stepen (int baza, int eksponent){

int rezultat = 1;

Zaglavlje, interfejs, prototip

for (int i = 0; i < eksponent; ++i)rezultat *= baza;

return rezultat;Tijelo funkcije

return rezultat;}

Pozivanje funkcije

Stepen (a, b)

argumenti

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 45

Page 46: Predavanja

Primjeri:

Funkcije

#include <iostream>using namespace std;

int Stepen (int baza, unsigned int eksponent)

Primjeri:

• stepenOsnovni.cpp

{int rezultat = 1;

for (int i = 0; i < eksponent; ++i)

• stepen2.cpp• stepenFile.cpp ( p )

rezultat *= baza;return rezultat;

}

main (){

int a,b; cout << "Unesi bazu:";cout << Unesi bazu: ;cin >> a;cout << "\nUnesi eksponent:";cin >> b;cout << a<<"^" <<b<<"= " << Stepen(a b) << '\n';

• sinusRed.cppcout << a<< <<b<< = << Stepen(a,b) << \n ;system("PAUSE");

}2 1

0sin( ) ( 1)

(2 1)!

ii

i

xxi

+∞

=

= −+∑

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 46

Page 47: Predavanja

Funkcije

Parametri i argumenti

#include <iostream>i tdusing namespace std;

void Funkcija (int broj){

Prosljeđivanje po vrijednostibroj = 0;cout << “broj = " << broj << '\n';

}

Prosljeđivanje po referenciint main (){

int x = 10;

Prosljeđivanje po referenci

Funkcija(x);cout << "x = " << x << '\n';system("PAUSE");return 0;0;

}

P i j i lij di G li i ij

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 47

Primjeri: proslijedi.cpp Gauss_eliminacija.cpp

Page 48: Predavanja

Funkcije

Globalno i lokalno područje (scope)

int godina = 1994; // globalna varijablaint Maksimum (int int); // globalna funkcijaint Maksimum (int, int); // globalna funkcijaint main (void) // globalna funkcija{//...}

int xyz; // globalna varijablavoid Funkcija (int xyz) // lokalna prema tijelu funkcije Funkcijavoid Funkcija (int xyz) // lokalna prema tijelu funkcije Funkcija{

if (xyz > 0) {double xyz; // lokalna u bloku if naredbe

//...}

}

Scope operator ::

P i j i d j

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 48

Primjeri: podrucje.cpp

Page 49: Predavanja

Funkcije

Rekurzivne funkcije

#include <iostream>#include <iostream>using namespace std;

int Faktorijel (unsigned int n){

return n == 0 ? 1 : n * Faktorijel(n-1);}

main (){

int n;;cout<<"Unesite prirodan broj:";cin>>n;cout<<"\nFaktorijel broja n je "<<Faktorijel(n)<<endl;

t ("PAUSE")system("PAUSE");}

P i j i F kt ij l

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 49

Primjeri: Faktorijel.cpp

Page 50: Predavanja

Funkcije

Opterećene (overloaded) funkcije

int Stepen (int baza, int eksponent){

int rezultat = 1;

for (int i = 0; i < eksponent; ++i)rezultat *= baza;

return rezultat;}}

double Stepen (double baza, double eksponent){

return exp(eksponent*log(baza));p( p g( ));}

double Stepen (double eksponent){{

return Stepen(2.0,eksponent);}

P i j i t O t

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 50

Primjeri: stepenOpterecen.cpp

Page 51: Predavanja

Polja (arrays)

Definisanje i inicijalizacija polja

int visina[10];

visina[3]=654;visina[3]=654;

•Eksplicitna inicijalizacijap j j

double broj[3]={3.14,5.25,7.0};

double broj[3] {3 14 5 25}; // znači broj[2] 0;double broj[3]={3.14,5.25}; // znači broj[2]=0;

•Implicitna inicijalizacijap j j

double broj[]={3.14,5.25,7.0};

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 51

Page 52: Predavanja

Polja (arrays)

#include <iostream>using namespace std;

main (){

int velicina;;cout <<"Broj elemenata ....";cin >> velicina;int n[velicina];

// Unos podatakafor(int i=0 ; i < velicina; i++){

cout<< "n[" << i << "]= ";

//Racunanje zbira svih elemenata nizafor (int i = 0; i < velicina; ++i)

srednja += n[i];cout<< n[ << i << ]= ;cin>>n[i];}

double srednja = 0;

srednja/=velicina;

cout << "Srednja vrijednost je .... "<<srednja << "\n";

system("PAUSE");}

P i j i d j

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 52

Primjeri: srednja.cpp

Page 53: Predavanja

Polja (arrays)

#include <iostream>using namespace std;int main ()int main (){

// DEKLARACIJAint x[10];int y[10];int y[10];int i, j, n;// UNOSENJE cout << "Unesite broj članova polja: ";cin >> n

// SORTIRANJEfor (i = 0; i < n-1; i++)

{cin >> n;for (i = 0; i < n; i++)

{cout << "Unesite clan br. " << i << ": ";i [i]

for (j = i+1; j < n; j++){

if (y[i] < y[j]) swap(y[i],y[j]);}

cin >> x[i];y[i] = x[i];

}

}// STAMPANJEcout << "x:" << '\t' << "y:" << endl;for (i = 0; i < n; i++)( )

{cout << x[i] << '\t' << y[i] << endl;

}}P i j i ti j

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 53

}Primjeri: sortiranje.cpp

Page 54: Predavanja

Polja (arrays)

Znakovni nizovi

char fakultet[] = “Pedagoski fakultet”;

P i j i k i

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 54

Primjeri: znakovni.cpp

Page 55: Predavanja

Polja (arrays) - višedimenzionalna polja

Definisanje i inicijalizacija

Proljeće Ljeto Jesen Zima

Sarajevo 10 20 10 1j

Tuzla 13 21 12 3

Zenica 14 23 11 4

int godDobTemp[3][4];

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 55

Organizacija varijable godDobTemp u memoriji

Page 56: Predavanja

Polja (arrays) - višedimenzionalna polja

int godDobTemp[3][4] = {{10, 20, 10, 1},{ , , , },{13, 21, 12, 3},{14, 23, 11, 4}

};

int godDobTemp[3][4] = {10,20,10,1,13,21,12,3,14,23,11,4

};

int godDobTemp[3][4] = {{10}, {13}, {14}};

int godDobTemp[][4] = {{10, 20, 10, 1},{13, 21, 12, 3},{14 23 11 4}{14, 23, 11, 4}

};

P i j i T

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 56

Primjeri: maxTemp.cpp

Page 57: Predavanja

Polja (arrays) - višedimenzionalna polja

Primjer primjene – Gaussova metoda eliminacije (rješavanje sistema linearnih jednačina)

a x a x a x a+ + + = x nepoznate promjenljive00 0 10 1 1,0 1 ,0

12 0 11 1 1,1 1 ,1

......

............................................

n n n

n n n

a x a x a x aa x a x a x a

− −

− −

+ + + =

+ + + =

xi – nepoznate promjenljive

Aij – koeficijenti nepoznatih promjenljivih

An,i – nehomogeni članovi1, 1 0 1, 1 1 1, 1 1 , 1...n n n n n n na x a x a x a− − − − − −+ + + =

n,i g

i,j = 0,1,...,n-1

Proces eliminacije

0, 2, 1, 1, , k=ikij ij kj

kk

aa a a i n j i n i na

⎛ ⎞= − = − = + −⎜ ⎟

⎝ ⎠

Zamjena unazad1n

a a x−

∑,1, 1

11, 1

i n ij j

j in nn i

n n ii

a a xa

x xa a

= +−−

− −

−= =

P i j i G li i ij G J d H

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 57

Primjeri: Gauss_eliminacija.cpp Gauss_Jordan.cpp Horner.cpp

Page 58: Predavanja

Polja (arrays) - višedimenzionalna polja

#include <iostream>

using namespace std;

int main ()()

{

int n;

t "U it b j j d i \ "cout << "Unesite broj jednacina ...\n";

cout << "n="; cin >> n;

double x[n];

double Ab[n][n+1];

double m[n][n];// Unos elemenata sistema

t "U it k fi ij t t i A i kt b \ "cout << "Unesite koeficijente matrice A i vektora b ....\n";

for (int i=0;i<n;i++){

for (int j=0;j<=n;j++){

cout<<"A[" <<i<<"]["<<j<<"]="; cin >>Ab[i][j];

}

}

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 58

}

Page 59: Predavanja

Polja (arrays) - višedimenzionalna polja

//Gaussov algoritam

for (int i=0;i<n-1;i++){

for (int j=i+1;j<n;j++){( j j j ){

m[j][i]=Ab[j][i]/Ab[i][i];

for (int k=i;k<n+1;k++)

Ab[j][k] [j][i]*Ab[i][k]Ab[j][k]-=m[j][i]*Ab[i][k];

}

}

//Zamjena unazad

x[n-1]=Ab[n-1][n]/Ab[n-1][n-1];

for (int i=n 2;i>=0;i ){

// Ispis rješenja

cout << " \nRjesenje sistema je:\n";for (int i=n-2;i>=0;i--){

double sum=0.0;

for (int j=i+1;j<n;j++)

cout << \nRjesenje sistema je:\n ;

for (int i=0;i<n;i++){

cout <<"x"<<i<<"="<<x[i]<<endl;

sum=sum+Ab[i][j]*x[j];

x[i]=(Ab[i][n]-sum)/Ab[i][i];

}

}

system ("PAUSE");

}

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 59

} }

Page 60: Predavanja

Pointeri

Definisanje

Pointeri (pokazivači) predstavljaju adresu neke memorijske lokacije i omogućuju indirektni način pristupa podacima u memoriji.

int *ptr1; // pointer cijelog brojachar *ptr2; // pointer karaktera

Definisanje

p ; p

int broj;int broj;ptr1 &broj; prt1 broj

adresa varijable broj je pridružena ptr1

& - adresni operator: uzima varijablu kao argument i vraća memorijsku adresu te varijable

*ptr1; dereferencira ptr1 kako bi se dobilo ono što pokazuje ekvivalentno sa broj!pokazuje – ekvivalentno sa broj!

* - operator dereferenciranja: uzima pointer kao argument i vraća sadržaj memorijske lokacije na koju pokazuje.

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 60

Page 61: Predavanja

Pointeri

Konvertovanje

• tip pointera mora odgovarati tipu podatka na koji pokazuje

• pointer tipa void odgovara bilo kojem tipu

ptr2 = (char*) ptr1; konvertuje ptr1 u pointer karaktera prije nego se pridruži ptr2

P i j i i t iO i

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 61

Primjeri: pointeriOsnovni.cpp

Page 62: Predavanja

Pointeri

Dinamička memorija i objekti

• programski stog (stack) – pohranjivanje globalnih varijabli, blokova stogova za pozivanje funkcija, ...: p g g ( ) p j j g j g p j jSTATIČKA MEMORIJA

• Hrpa (heap) – dinamičko alociranje memorijskih blokova u toku izvršenja programa: DINAMIČKA (JAVNA) MEMORIJA

Alociranje memorijskih blokova u hrpiAlociranje memorijskih blokova u hrpi

• operator new: uzima tip podatka kao argument i alocira memorijski prostor za objekat tog tipa

int *ptr = new int; //alocira prostor za jedan cijeli brojchar *str = new char[10]; //alocira prostor za niz od 10 karaktera

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 62

Page 63: Predavanja

Pointeri

Područje definisanosti u hrpi

• memorija alocirana iz hrpe ne ispunjava ista pravila područja definisanosti kao normalne varijable

void Funkcija (void){

varijable

Pri vraćanju vrijednosti pozivom funkcijechar *str = new char[10];// .....

}

Pri vraćanju vrijednosti pozivom funkcije Funkcija, lokalna str varijabla je uništena, ali memorijeski prostor koji pokazuje na str nije.

Dealociranje (oslobađanje) memorijskih blokova u hrpi

d l t i i k i l b đ ij ki k ji j i k j

delete ptr; // briše neki objekat ili prvi član niza (ukoliko ptr pokazuje na niz)delete [] str; // briše niz objekata

• operator delete: uzima pointer kao argument i oslobađa memorijski prostor na koji taj pointer pokazuje

delete [] str; // briše niz objekata

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 63

Page 64: Predavanja

Pointeri

Pointeri i polja

• Pointeri i polja su povezani, jer se elementima polja pristupa preko pointera

int cijeliBroj[10];

Ime arijable cijeliBroj ima smisao pointera na pr i elemenat polja cijeliBroj[0]Ime varijable cijeliBroj ima smisao pointera na prvi elemenat polja, cijeliBroj[0]

i t b j ij liB j[3]uzmi adresu prvog elementa polja, povećaj je za 3 pogledaj šta se nalaziint broj = cijeliBroj[3]; int broj = *(cijeliBroj+3) povećaj je za 3, pogledaj šta se nalazi na toj adresi, te pridruži tu vrijednost varijabli broj

P i j i i t iP lj

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 64

Primjeri: pointeriPolja.cpp

Page 65: Predavanja

Pointeri

Aritmetika sa pointerima

char *str = "VOZDRA";

int broj[] = {10, 20, 30, 40};

int *ptr =&broj[0];

V O Z D R A \0 10 20 30 40

str

str++

ptr

ptr++

int *ptr1 = &broj[1];

int *ptr2 = &broj[3];int ptr2 &broj[3];

int n = ptr2 - ptr1; // n postaje 2

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 65

Primjeri: pointeriAritmetika.cpp

Page 66: Predavanja

Pointeri

void CopyString (char *dest, char *src)

{

while (*dest++ = *src++)while (*dest++ = *src++)

;

}

int najTemp (const int *temp, const int redovi, const int kolone)

{

int najveca = 0;

for (int i = 0; i < redovi; ++i)

for (int j = 0; j < kolone; ++j)for (int j = 0; j < kolone; ++j)

if (*(temp + i * kolone + j) > najveca)

najveca = *(temp + i * kolone + j);

return najveca;

}

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 66

Primjeri: pointeriAritmetikaCopy.cpp pointeriAritmetikaNaj.cpp

Page 67: Predavanja

Pointeri

Funkcijski pointeri

• uzima se adresa funkcije i pohranjuje kao pointer funkcije – za indirektno pozivanje funkcije

Definiše pointer na funkciju Uporedi koja može zadržati adresu bilo koje funkcije koja za argumente uzima dva konstantna pointera tipa int (*Uporedi)(const char*, const char*);char i vraća cjelobrojnu vrijednost.

U di & t // f k ij U di k j t f k ijUporedi = &strcmp; // funkcija Uporedi pokazuje na strcmp funkciju

ili

Uporedi = strcmp; // funkcija Uporedi pokazuje na strcmp funkciju

ili

int (*Uporedi)(const char*, const char*) = strcmp; // jer int strcmp(const char*, const char*);

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 67

Page 68: Predavanja

Pointeri

strcmp("Suljo","Mujo"); // direktni poziv

(*Uporedi)("Suljo","Mujo"); // indirektni poziv

Uporedi("Suljo","Mujo"); // indirektni poziv (skraćeno)

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 68

Primjeri: funkcijskiPointeri.cpp funkcijskiPointeriIntegral.cpp

Page 69: Predavanja

Pointeri

Reference

• (simbolički) nadimak za neki objekat

double broj1 = 3.14;

double &broj2 = broj1;

• pri definisanju reference se MORAJU inicijalizirati

double &broj3; // nepravilno: referenca je bez inicijalizatora!!!

broj3 = broj1;

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 69

Primjeri: referenceOsnovno.cpp

Page 70: Predavanja

Pointeri

void Zamijeni1 (int x, int y) // po vrijednosti (objekti){

int temp = x;int temp x;x = y;y = temp;

}

void Zamijeni2 (int *x, int *y) // po vrijednosti (pointeri){

int temp = *x;*x = *y;x = y;*y = temp;

}

id Z ij i3 (i t & i t & ) // f ivoid Zamijeni3 (int &x, int &y) // po referenci{

int temp = x;x = y;y = temp;

}

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 70

Primjeri: reference.cpp

Page 71: Predavanja

Datoteke

#include <fstream>

ofstream – za kreiranje datoteka i zapisivanje u datoteku (output)ifstream – za čitanje podataka iz datoteka (input)fstream – za čitanje podataka iz datoteka, kreiranje datoteka i zapisivanje u datotekuj p j p j

‘Životni’ ciklus pristupa datotekamaŽivotni ciklus pristupa datotekama

• Otvaranje datoteke

• Rad sa datotekom

• Zatvaranje datoteke

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 71

Page 72: Predavanja

Datoteke

ofstream objekat

Otvaranje datoteke za pisanje

ofstream uDat;uDat.open("studenti.dat");

ofstream uDat; uDat.open("c:\\fakultet\\godina\\studenti.dat");

ofstream uDat;ofstream uDat; char imeDatoteke[80]; cout << “Unesite ime datoteke: "; cin >> imeDatoteke;

D t (i D t t k )uDat.open(imeDatoteke);

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 72

Primjeri: upisOsnovni.cpp

Page 73: Predavanja

Datoteke

ios::appios::binary

Korištenje drugog argumenta (file mode flags) – kao fstream objekat

ios::binaryios::inios::out

fstream uDat;fstream uDat; uDat.open("studenti.dat", ios::out);

ofstream uDat(“studenti.dat");

Otvaranje pomoću konstruktora

fstream uDat(“studenti.dat", ios:out);

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 73

Page 74: Predavanja

Datoteke

Otvaranje datoteke za čitanje

ifstream saDat; saDat.open("studenti.dat");

fstream saDat;fstream saDat; saDat.open("studenti.dat", ios::in);

k k

ifstream saDat ("studenti.dat");fstream saDat ("studenti.dat", ios::in);

Otvaranje pomoću konstruktora

( )

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 74

Primjeri: ispisOsnovni.cpp

Page 75: Predavanja

Datoteke

Otvaranje datoteke za pisanje i čitanje

fstream datoteka; datoteka.open("studenti.dat", ios::in | ios::out);

Ot j ć k t kt

fstream datoteka("studenti.dat", ios::in | ios::out);

Otvaranje pomoću konstruktora

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 75

Primjeri: upisIspisOsnovni.cpp

Page 76: Predavanja

Datoteke

#include <fstream>#include <iostream>using namespace std;

Provjera da li je datoteka otvorena

using namespace std;

int main (){ ifstream saDat; saDat.open("studenti.dat");

Za čitanje

cout << "(saDat) = " << saDat << endl; cout << "(saDat.fail()) = " << saDat.fail() << endl; return 0;

}

#include <fstream>#include <iostream>using namespace std;

Za pisanjeint main (){

ofstream uDat; uDat.open("studenti.dat"); cout << "( uDat) = " << uDat << endl; co t << "( Dat fail()) " << Dat fail() << endlcout << "( uDat.fail()) = " << uDat.fail() << endl; return 0;

}

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 76

Primjeri: provjeraUpis.cpp provjeraUpis2.cpp provjeraIspis.cpp

Page 77: Predavanja

Datoteke

Zapisivanje u datoteku

f t D tofstream uDat; uDat.open("studenti.dat");

uDat << podaci << endl;

Čitanje iz datoteke

ifstream saDat; saDat.open("studenti.dat");

saDat >> podaci;

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 77

Primjeri: ispisOsnovno.cpp

Page 78: Predavanja

Datoteke

Zatvaranje datoteke

f t D t

Za pisanje

ofstream uDat; uDat.open("studenti.dat"); // skup naredbi uDat.close();

if D

Za čitanje

ifstream saDat; saDat.open("studenti.dat"); // skup naredbisaDat.close();

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 78

Page 79: Predavanja

Zapisivanje u datoteku

Datoteke

#include <fstream>#include <iostream>

i td

Zapisivanje u datoteku

using namespace std;

int main (){ char podaci[80];

f t D tofstream uDat; uDat.open("studenti.dat"); cout << “Upisivanje u datoteku" << endl; cout << "===================" << endl; cout << “Unesite ime razreda: "; cin.getline(podaci, 80); uDat << podaci << endl; cout << “Unesite broj studenata: "; jcin >> podaci; cin.ignore(); uDat << podaci << endl; uDat.close(); ();return 0;

}

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 79

Primjeri: upis.cpp

Page 80: Predavanja

Zapisi anje datotek

Datoteke

#include <iostream>#include <string>

Zapisivanje u datoteku

#include <string>#include <fstream>using namespace std;int main (){{

string x;ofstream uDat;uDat.open("podaci.txt", ios::app);while (x != "***") {

cout << "Unesite neki tekst (za kraj unesite ***):" << endl;cin >> x;uDat << x << endl;

}uDat.close();

}}

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 80

Primjeri: upisDodaj.cpp

Page 81: Predavanja

Zapisivanje u i ispisivanje sa datoteke

Datoteke

#include <fstream>#include <iostream>using namespace std;

Zapisivanje u i ispisivanje sa datoteke

using namespace std;int main (){

char podaci[80]; ofstream uDat; uDat open("studenti dat");uDat.open( studenti.dat ); cout << “Upisivanje u datoteku" << endl; cout << "===================" << endl; cout << “Unesite ime razreda: "; cin getline(podaci 80);

ifstream saDat; cin.getline(podaci, 80); uDat << podaci << endl; cout << “Unesite broj studenata: "; cin >> podaci; cin ignore();

cout << “Citanje sa datoteke" << endl; cout << "=====================" << endl; saDat.open("studenti.dat"); saDat >> podaci;

cin.ignore(); uDat << podaci << endl; uDat.close();

cout << podaci << endl; saDat >> podaci; cout << podaci << endl; saDat.close(); ();return 0;

}

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 81

Primjeri: upisIspis.cpp upisIspis2.cpp

Page 82: Predavanja

Sukcesivno citanje sa datoteke

Datoteke

ifstream saDat;saDat.open(“podaci.dat");

Sukcesivno citanje sa datoteke

p ( p );saDat >> podaci;

while(!saDat.eof()) { saDat >> podaci; cout << podaci;cout podaci;

} saDat.close();

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 82

Primjeri: sukcCitanje.cpp datotekaOpsti.cpp

Page 83: Predavanja

U susret OOP I

Obj kt ij ti i jObjektno – orijentisano programiranje

• Klase (razredi)

• Overloading• Overloading

• Nasljeđivanje

• Templejtip j

• Windows projekti

PROCEDURALNO PROGRAMIRANJE www.pf.unze.ba/PP 83