You are on page 1of 65

Fizicki Fakultet Beograd Smer: Fizika i informatika Predmet: Programiranje I (Fond casova 2+2 nedeljno, I godina II semestar) Predmetni

nastavnik: Docent dr Goran Poparic

Plan predavanja:

1. Shema rada racunara. Organizacija procesora. Mainski jezik, asembleri, simbolicki jezici. Proceduralno i objektno orjentisano programiranje. Kompajleri, linkeri. 2. Tipovi podataka: int, float, long, double, char. Elementarni programi. Pretprocesor. Editor. Kompajler. Linker. 3. Sintaksa i semantika. Algoritmi. Simbolicki prikaz elementarnih naredbi deklaracije, ulaza, izlaza naredbi grananja. Simbolicki prikaz naredbi iteracije. 4. Operatori dodeljivanja. Aritmeticki i logicki operatori. Prioritet operatora. Elementarna programska grananja. If else grananje. Primeri. 5. Blok naredbe. Naredbe iteracije. While i Do while iteracije. Naredbe iteracije sa For petljama. 6. Switch naredbe. Nizovi, njihova deklaracija i inicijalizacija. Viedimenzionalni nizovi. 7. Funkcije. Prototip, deklaracija i definicija i upotreba. Globalne i lokalne promenljive. Pozivanje funkcije po vrednosti. Polimorfizam funkcija. Rekurzije. 8. Pointeri. Deklaracija i upotreba. Pozivanje funkcija po referenci preko pointera. 9. Reference. Deklaracija i upotreba. Pozivanje funkcija po referenci preko referenci. 10.Stek i slobodni prostor memorije. Alociranje memorije. Upotreba slobodnog prostora. Naredbe NEW, DELETE. 11.Elementarne klase. Deklaracija, definicija. i upotreba. Kreiranje objekata i upotreba. 12.Klase.Kljucne reci public:, private:, i protected:. Konstuktori i destruktor.
1

Konstruktor za kopiranje. Metodi pristupa. Enkapsulacija podataka. Metodi klasa. Preopterecivanje metoda (overload). 13.Klase. Bazna i izvedena klasa. Hijerarhija i nasledivanje. Izvedena klasa. Preskakanje metoda bazne klase (override). Eksplicitno pozivanje metoda bazne klase. 14.Klase. Virtuelni metodi. Polimorfizam. 15.Upisivanje u fajl. Modovi pristupa. Stringovi. Elementarne funkcije za rad sa stringovima. Generator slucajnih brojeva. Osobine i test validnosti. Elementi matematickog modeliranja. Primeri.

Spisak ispitnih pitanja:

Proceduralno programiranje. Objektno orjentisano programiranje. Kompajler. Linker. Pretprocesor. Sintaksa i semantika. Algoritmi. Simbolicki prikaz elementarnih naredbi deklaracije, ulaza, izlaza naredbi grananja. 8. Algoritmi. Simbolicki prikaz naredbi iteracije. 9. Tipovi podataka: int, float, long, double, char. Njihov opseg. 10.Operatori dodeljivanja. Aritmeticki i logicki operatori. Prioritet operatora. 11.Elementarna programska grananja. If else grananje. Primeri. 12.Blok naredbe. 13.Naredbe iteracije. While i Do while iteracije. 14.Naredbe iteracije. For petlje. 15.Switch naredbe. Naredbe break i continue. 16.Nizovi, njihova deklaracija i inicijalizacija. Viedimenzionalni nizovi. 17.Funkcije. Prototip, deklaracija, definicija i upotreba. 18.Globalne i lokalne promenljive. Pozivanje funkcije po vrednosti. 19.Polimorfizam funkcija. 20.Rekurzije. 21.Pointeri. Deklaracija i upotreba. 22.Pozivanje funkcija po referenci preko pointera. 23.Reference. Deklaracija i upotreba. 24.Pozivanje funkcija po referenci preko referenci. 25.Stek i slobodni prostor memorije. Alociranje memorije. 26.Upotreba slobodnog prostora. Naredbe NEW, DELETE. 27.Elementarne klase. Deklaracija, definicija. i upotreba. 28.Elementarne klase. Kreiranje objekata i upotreba. 29.Klase.Kljucne reci public:, private:, i protected:. 30.Klase. Konstuktori i destruktor. 31.Klase. Konstuktor za kopiranje. 32.Klase. Metodi pristupa. Enkapsulacija podataka. 33.Klase. Metodi klasa. Preopterecivanje metoda (overload). 34.Klase. Bazna i izvedena klasa. Hijerarhija i nasledivanje. 35.Klase. Izvedena klasa. Preskakanje metoda bazne klase (override). 36.Klase. Eksplicitno pozivanje metoda bazne klase. 37.Klase. Virtuelni metodi.
3

1. 2. 3. 4. 5. 6. 7.

38.Klase. Polimorfizam. 39.Upisivanje u fajl. Modovi pristupa. 40.Stringovi. Elementarne funkcije za rad sa stringovima. 41.Generator slucajnih brojeva. Osobine i test validnosti. 42.Elementi matematickog modeliranja. Primeri.

Preporucena literatura: Jesse Liberty C++ (sedmo izdanje), Pitanja su pokrivena sa prvih 12 poglavlja knjige.

Zbirka programa radenih na vebama iz predmeta Programiranje I

//Programiranje I //Vezbe: Program broj 1 //Program za izracunavanje modula broja //demonstrira if grananje #include <iostream.h> int main() { float a; cout<<"Ovo je program za izracunavanje modula nekog broja\n\n"; cout<<"Unesite broj a:"; cin>>a; if(a<0) a=-a; cout<<"\nVrednost modula broja a:"<<a; return 0; }

//Programiranje I //Vezbe: Program broj 2 //Program za izracunavanje korena nekog broja //demonstrira if else grananje #include <iostream.h> #include <math.h> int main() { float a; float b; cout<<"Ovo je program za izracunavanje korena nekog broja\n"; cout<<"Unesite broj a:"; cin>>a; if(a<0) { b=-a; b=sqrt(b); cout<<"\nVrednost korena broja a:"<<a<<" je: i*"<<b; } else { b=a; b=sqrt(b); cout<<"\nVrednost korena broja a:"<<a<<" je: "<<b; } return 0; }

//Programiranje I //Vezbe: Program broj 3 //Program za izracunavanje 1/moduo(a) //demonstrira dvostruko if else grananje #include <iostream.h> int main() { float a; float b; cout<<"Ovo je program za izracunavanje 1/modua(a)\n"; cout<<"Unesite broj a:"; cin>>a; if(a<0) { b=1/(-a); cout<<"\nVrednost funkcije je:"<<b; } else { if(a==0) cout<<"Funkcija nije definisana!"; else { b=1/a; cout<<"\nVrednost funkcije je:"<<b; } } return 0; }

//Programiranje I //Vezbe: Program broj 4 //Program za izracunavanje faktorijela celobrojne vrednosti n //demonstrira naredbu iteracije while //ekvivalentno moze da se resi i preko for petlje #include <iostream.h> int main() { int n,m; int fakt=1; cout<<"Ovo je za izracunavanje faktorijela celobrojne vrednosti n\n"; cout<<"\nUnesite ceo pozitivan broj n:"; cin>>n; if (!(n<0)) { m=n; while(m>0) { fakt=fakt*m; m-=1; } cout<<"\nFaktorijel broja n je n!:"<<fakt; } else cout<<"\nUneli ste negativan broj"; return 0; }

//Programiranje I //Vezbe: Program broj 5 //Program za izracunavanje maksimuma 3 broja a,b,c //demonstrira visestruko if else grananje #include <iostream.h> int main() { float a,b,c; float max,min; cout<<"Ovo je program za izracunavanje maksimuma 3 broja a,b,c\n"; cout<<"\nUnesite broj a:"; cin>>a; cout<<"\nUnesite broj b:"; cin>>b; cout<<"\nUnesite broj c:"; cin>>c; if(a<b) { min=a; max=b; if(b<c) max=c; else if(c<a) min=c; } else { min=b; max=a; if(c<b) min=c; else if(a<c) max=c; } cout<<"\nMaksimalna vrednost brojeva je:"<<max; cout<<"\nMinimalna vrednost brojeva je:"<<min; return 0; }

//Programiranje I //Vezbe: Program broj 6 //Program za ispitivanje da li je dati broj prost //demonstrira naredbu iteracije while //ekvivalentno moze da se resi i preko for petlje #include <iostream.h> int main() { int n,m,p; bool prost=true; cout<<"Ovo je program za ispitivanje da li je dati broj prost\n"; cout<<"\nUnesite ceo pozitivan broj n:"; cin>>n; if (!(n<=0)) { m=2; while(m<n) { p=n%m; if(p==0) { prost=false; break; } m+=1; } if(prost) { cout<<"\nBroj: "<<n<<" je prost broj:"; } else { cout<<"\nBroj: "<<n<<" nije prost broj:"; } } else cout<<"\nNiste uneli pozitivan broj veci od nule"; return 0; }

10

//Programiranje I //Vezbe: Program broj 7 //Program za izracunavanje sume a(n)=1*2+...+n*(n+1) //demonstrira naredbu iteracije do while //ekvivalentno moze da se resi i preko for petlje // Rezultat je: a(n)=n*(n+1)*(n+2)/3 #include <iostream.h> int main() { int n,m,a; cout<<"Ovo je program za za izracunavanje sume a(n)=1*2+...+n*(n+1)\n"; cout<<"\nUnesite ceo pozitivan broj n:"; cin>>n; m=0; a=0; do { m+=1; a+=m*(m+1); } while(m<n); cout<<"Vrednost sume a("<<n<<")="<<a; return 0; }

11

//Programiranje I //Vezbe: Program broj 8 //Program za izracunavanje minimuma i maksimuma niza a(i) //demonstrira upotrebu nizova i for petlje #include <iostream.h> int main() { int i,min,max; int a[100],n; cout<<"Ovo je program za minimuma i maksimuma niza a(i)"; cout<<"\nUnesite broj clanova niza n:"; cin>>n; cout<<"\nUnesite clanove niza:\n"; for(i=0;i<n;i++) { cout<<"a("<<i+1<<")="; cin>>a[i]; } min=a[0]; max=a[0]; for(i=1;i<n;i++) { if(a[i]<min) min=a[i]; if(a[i]>max) max=a[i]; } cout<<"\nMaksimalni clan niza:"<<max; cout<<"\nMinimalni clan niza:"<<min; return 0; }

12

//Programiranje I //Vezbe: Program broj 9 //Program za uredjenje niza po velicini njegovih elemenata a(i) //demonstrira upotrebu nizova i for petlje //metoda uredjenja je najprostija tzv. "direktno odabiranje" #include <iostream.h> int main() { int i,j,min,index,temp; int a[100],n; cout<<"Ovo je program za uredjenje niza u rastuci a(i)"; cout<<"\nUnesite broj clanova niza n:"; cin>>n; cout<<"\nUnesite clanove niza:\n"; for(i=0;i<n;i++) { cout<<"a("<<i+1<<")="; cin>>a[i]; } for(j=0;j<n;j++) { min=a[j]; for(i=j;i<n;i++) { if(a[i]<min) { min=a[i]; index=i; } } if (min<a[j]) { temp=a[j]; a[j]=a[index]; a[index]=temp; } } cout<<"Rastuci niz je:\n"; for(i=0;i<n;i++) { cout<<"a("<<i+1<<")="<<a[i]<<"\n"; } return 0; }

13

//Programiranje I //Vezbe: Program broj 10 //Program za odredjivanje preseka dva niza a(i) i b(i) //demonstrira upotrebu nizova i for petlje #include <iostream.h> int main() { int i,j,min,index,temp; int a[100],b[100],c[100],n,m; cout<<"Ovo je program za odredjivanje preseka dva niza a(i) i b(i)"; cout<<"\nUnesite broj clanova prvog niza n:"; cin>>n; cout<<"\nUnesite clanove prvog niza:\n"; for(i=0;i<n;i++) { cout<<"a("<<i+1<<")="; cin>>a[i]; } cout<<"\nUnesite broj clanova drugog m:"; cin>>m; cout<<"\nUnesite clanove drugog niza:\n"; for(i=0;i<m;i++) { cout<<"b("<<i+1<<")="; cin>>b[i]; } //inicijalizacija kontrolnog niza preseka dva niza for(i=0;i<n;i++) { c[i]=0; } for(i=0;i<n;i++) { for(j=0;j<m;j++) { if(a[i]==b[j]) c[i]=1; } } cout<<"Niz presek nizova a[i] i b[j] je:\n"; for(i=0;i<n;i++) { if(c[i]!=0) cout<<"a presek b:"<<a[i]<<"\n"; } return 0; }

14

15

//Programiranje I //Vezbe: Program broj 11 //Program za izracunavanje sume geometrijskog niza //demonstrira upotrebu funkcije #include <iostream.h> float stepen(float a, int n); int main() { float a,q; int n; int i; float s=0; cout<<"Ovo je program za izracunavanje sume geometrijskog niza"; cout<<"\nUnesite prvi clan niza a1:"; cin>>a; cout<<"Unesite kolicnik niza q:"; cin>>q; cout<<"Unesite broj clanova niza:"; cin>>n; for(i=0;i<=n-1;i++) { s+=a*stepen(q,i); } cout<<"Vrednost sume je:"<<s; return 0; }

float stepen(float a, int n) { int i; float b=1; for(i=1;i<=n;i++) { b*=a; } return b; }

16

//Programiranje I //Vezbe: Program broj 12 //Izracunavanje binomnog koeficijena (n k) = n!/(k!(n-k)!) //Demonstrira poyivanje funkcije unutar druge funkcije #include <iostream.h> float faktorijel(int n); float binom(int n, int k); int main() { int i; int n; cout<<"Ovo je program za izracunavanje binomnih koeficijenata (n k)"; cout<<"\nUnesite n:"; cin>>n; for(i=0;i<=n;i++) { cout<<"\n"; cout<<"Vrednost binomnog koeficijena ("<<n<<" "<<i<<") je:"<<binom(n,i)<<endl; } return 0; } float binom(int n, int k) { float b; b=faktorijel(n); b=b/faktorijel(k); b=b/faktorijel(n-k); return b; } float faktorijel(int n) { int i; float f=1; for(i=1;i<=n;i++) { f*=i; } return f; }

17

//Programiranje I //Vezbe: Program broj 13 //Program sa menijem koji izracunava: // 1) Mnozenje matrice skalarom // 2) Zbir dve matrice // 3) Proizvod dve matrice #include <iostream.h> void skalar(); void sabiranje(); void mnozenje(); int main() { int index; do { cout<<"\nMeni:"; cout<<"\n1 - Mnozenje matrice skalarom:"; cout<<"\n2 - Sabiranje matrica:"; cout<<"\n3 - Mnozenje matrica:"; cout<<"\n4 - izlaz"; cout<<"\nUnesite zeljeni izbor:"; cin>>index; switch(index) { case 1:skalar();break; case 2:sabiranje();break; case 3:mnozenje();break; case 4:cout<<"kraj programa";break; default:cout<<"Nedefinisan izbor!"; } } while(index!=4); return 0; } void skalar() { int i,j,n,m; float a[20][20]; float scalar; cout<<"\nMnozenje matrice skalarom:"; // Unos matrice cout<<"\nUnesite broj redova matrice n=";cin >> n; cout<<"\nUnesite broj kolona matrice m=";cin >> m; for(i=0;i<=n-1;++i)

18

{ for(j=0;j<=m-1;++j) { cout<<"\nUnesi element matrice a(";cout<<i+1;cout<<")(";cout<<j+1;cout<<")="; cin >> a[i][j]; } } //unos skalara cout<<"\nUnesi skalar="; cin >> scalar; //mnozenje for(i=0;i<=n-1;++i) { for(j=0;j<=m-1;++j) { a[i][j]=a[i][j]*scalar; } } // Stampanje matrice for(i=0;i<=n-1;++i) { for(j=0;j<=m-1;++j) { cout<<"\nElement matrice a(";cout<<i+1;cout<<")(";cout<<j+1;cout<<")="; cout<<a[i][j]; } } }

void sabiranje() { int i,j; int n,m; float a[20][20]; float b[20][20]; float c[20][20]; cout<<"\nSabiranje matrica:"; // Unos matrica cout<<"\nUnesite broj redova matrica n=";cin >> n; cout<<"\nUnesite broj kolona matrica m=";cin >> m; for(i=0;i<=n-1;++i) { for(j=0;j<=m-1;++j) { cout<<"\nUnesi element matrice a(";cout<<i+1;cout<<")(";cout<<j+1;cout<<")="; cin >> a[i][j]; } } for(i=0;i<=n-1;++i)

19

{ for(j=0;j<=m-1;++j) { cout<<"\nUnesi element matrice b(";cout<<i+1;cout<<")(";cout<<j+1;cout<<")="; cin >> b[i][j]; } }

//Inicijalizacija for(i=0;i<=n-1;++i) { for(j=0;j<=m-1;++j) { c[i][j]=0.; } } //Sabiranje for(i=0;i<=n-1;++i) { for(j=0;j<=m-1;++j) { c[i][j]=a[i][j]+b[i][j]; } } // Stampanje matrice for(i=0;i<=n-1;++i) { for(j=0;j<=m-1;++j) { cout<<"\nElement matrice c(";cout<<i+1;cout<<")(";cout<<j+1;cout<<")="; cout<<c[i][j]; } } } void mnozenje() { int i,j,k; int n,m,p,q; float a[20][20]; float b[20][20]; float c[20][20]; cout<<"\nMnozenje matrica:"; // Unos matrica cout<<"\nUnesite broj redova prve matrica n=";cin >> n; cout<<"\nUnesite broj kolona prve matrica m=";cin >> m; cout<<"\nUnesite broj redova druge matrica p=";cin >> p; cout<<"\nUnesite broj kolona druge matrica q=";cin >> q; if(m==p) { for(i=0;i<=n-1;++i) {

20

for(j=0;j<=m-1;++j) { cout<<"\nUnesi element matrice a(";cout<<i+1;cout<<")(";cout<<j+1;cout<<")="; cin >> a[i][j]; } } for(i=0;i<=p-1;++i) { for(j=0;j<=q-1;++j) { cout<<"\nUnesi element matrice b(";cout<<i+1;cout<<")(";cout<<j+1;cout<<")="; cin >> b[i][j]; } } //Inicijalizacija for(i=0;i<=n-1;++i) { for(j=0;j<=q-1;++j) { c[i][j]=0.; } } //Mnozenje for(i=0;i<=n-1;++i) { for(j=0;j<=q-1;++j) { for(k=0;k<=m-1;++k) { c[i][j]=c[i][j]+a[i][k]*b[k][j]; } } } // Stampanje matrice for(i=0;i<=n-1;++i) { for(j=0;j<=q-1;++j) { cout<<"\nElement matrice c(";cout<<i+1;cout<<")(";cout<<j+1;cout<<")="; cout<<c[i][j]; } } } else { cout<<"\nMnozenje nije definisano !"; } }

21

//Programiranje I //Vezbe: Program broj 14 //Program koji izracunava transponovanu matricu #include <iostream.h> void transponovana(); int main() { transponovana(); return 0; } void transponovana() { int n,m,i,j; float a[10][10],b[10][10]; // Unos matrice cout<<"\nUnesite broj redova matrice n=";cin >> n; cout<<"\nUnesite broj kolona matrice m=";cin >> m; for(i=0;i<=n-1;++i) { for(j=0;j<=m-1;++j) { cout<<"\nUnesi element matrice a(";cout<<i+1;cout<<")(";cout<<j+1;cout<<")="; cin >> a[i][j]; } } for(i=0;i<=n-1;++i) { for(j=0;j<=m-1;++j) { b[j][i]=a[i][j]; } } // Stampanje matrice for(i=0;i<=n-1;++i) { for(j=0;j<=m-1;++j) { cout<<"\nElement matrice a(";cout<<i+1;cout<<")(";cout<<j+1;cout<<")="; cout<<a[i][j]; } }

22

// Stampanje transponovane matrice cout<<"\nTransponovana matrica je: a\n"; for(i=0;i<=m-1;++i) { for(j=0;j<=n-1;++j) { cout<<"\nElement matrice b(";cout<<i+1;cout<<")(";cout<<j+1;cout<<")="; cout<<b[i][j]; } } }

23

//Programiranje I //Vezbe: Program broj 15 //Program koji izracunava determinantu matrice #include <iostream.h> void determinanta(); int main() { determinanta(); return 0; } void determinanta() { int n,m,i,j,k,p,q; float a[10][10],b[10][10]; float det=1.; float indexdet=1.; float temp; // Unos matrice cout<<"\nUnesite broj redova matrice n=";cin >> n; for(i=0;i<=n-1;++i) { for(j=0;j<=n-1;++j) { cout<<"\nUnesi element matrice a(";cout<<i+1;cout<<")(";cout<<j+1;cout<<")="; cin >> a[i][j]; } } // Preuzimanje matrice for(i=0;i<n;++i) { for(j=0;j<n;++j) { b[i][j]=a[i][j]; } } for(k=0;k<n;k++) { if (b[k][k]==0.) { for(p=k+1;p<n;p++) { indexdet=indexdet*(-1.); if (b[p][k]!=0.) { for(q=k;q<n;q++) { temp = b[k][q];

24

b[k][q] = b[p][q]; b[p][q] = temp; } p=n; } } }

for(i=k+1;i<n;i++) { for(j=n-1;j>=k;j--) { if (b[k][k]!=0.) { b[i][j]=b[i][j]-b[i][k]*b[k][j]/b[k][k]; } } } } // Stampanje matrice cout<<"\nMatrica a=\n"; for(i=0;i<n;++i) { for(j=0;j<n;++j) { cout<<a[i][j]<<"\t"; } cout<<"\n"; } // Stampanje trougaone matrice cout<<"\nTrougaona matrica b=\n"; for(i=0;i<n;++i) { for(j=0;j<n;++j) { cout<<b[i][j]<<"\t"; } cout<<"\n"; } for(i=0;i<n;++i) { det=det*b[i][i]; } det *= indexdet; cout<<"Index permutacije vrsta je:"<<indexdet; cout<<"\n"; cout<<"Determinanta matrice je:"<<det; }

25

//Programiranje I //Vezbe: Program broj 16 //Program koji demonstrira rekurziju pri izracunavanju // n-tog clana Fibonacci-jevog niza #include <iostream.h> int fibonacci(int n); int main() { int n,a; cout<<"Unesi n:"; cin>>n; a=fibonacci(n); cout<<"\n"<<n<<"-ti clan niza je:"<<a; return 0; } int fibonacci(int n) { int b; cout<<"U toku je fibonacci("<<n<<")\n"; if (n>2) b=fibonacci(n-1)+fibonacci(n-2); else b=1; return b; }

26

//Programiranje I //Vezbe: Program broj 17 //Program koji demonstrira globalne i lokalne promenljive #include <iostream.h> int i=-1; void funk1(); void funk2(); void funk3(); int main() { i=0; cout<<i; cout<<"\n"; funk1(); cout<<"\n"; cout<<i; cout<<"\n"; funk2(); cout<<"\n"; cout<<i; cout<<"\n"; funk3(); cout<<"\n"; cout<<i; cout<<"\n"; return 0; }

void funk1() { int i=1; cout<<i; } void funk2() { i=2; cout<<i; } void funk3() { i=3; cout<<i; } //Programiranje I //Vezbe: Program broj 18

27

//Program koji demonstrira globalne i lokalne funkcije #include <iostream.h> int i=-1; void funk1(); void funk2(); int main() { i=0; void funk3(); cout<<i; cout<<"\n"; funk1(); cout<<"\n"; cout<<i; cout<<"\n"; funk2(); cout<<"\n"; cout<<i; cout<<"\n"; funk3(); cout<<"\n"; cout<<i; cout<<"\n"; return 0; } void funk1() { int i=1; cout<<i; funk2(); } void funk2() { i=2; cout<<i; // funk3(); } void funk3() { i=3; cout<<i; funk1(); funk2(); }

28

//Programiranje I //Vezbe: Program broj 19 //Program koji demonstrira pozivanje sakriveno implementirane funkcije //Kompajliranje mora ukljuciti i fajl 19a.cpp, gde je funkcija implementirana // kao i fajl 19h.h, gde je prototip funkcije #include <iostream.h> #include "19h.h" int main() { cout << funkc(5); return 0; }

//Programiranje I //Vezbe: Program broj 19 //Program koji demonstrira pozivanje sakriveno implementirane funkcije //Kompajliranje mora ukljuciti i fajl 19a.cpp, gde je funkcija implementirana // kao i fajl 19h.h, gde je prototip funkcije int funkc(int a) { return a; }

//Programiranje I //Vezbe: Program broj 19 //Program koji demonstrira pozivanje sakriveno implementirane funkcije //Kompajliranje mora ukljuciti i fajl 19a.cpp, gde je funkcija implementirana // kao i fajl 19h.h, gde je prototip funkcije int funkc(int a); int funkc(int a) { return a; }

29

//Programiranje I //Vezbe: Program broj 20 //Program koji demonstrira upotrebu pointera #include <iostream.h> int main() { int a = 5; int b = 7; int * c = NULL; c=&a; cout<<"Vrednosti a i pokazivaca na a:\n"; cout <<"a="<<a; cout<<"\n"; cout <<"*c="<<*c; cout<<"\n"; cout<<"Adresa a i adresa memorisana u pokazivacu na a:\n"; cout <<"&a="<<&a; cout<<"\n"; cout <<"c="<<c; cout<<"\n"; c=&b; cout<<"Vrednosti b i pokazivaca na b:\n"; cout <<"b="<<b; cout<<"\n"; cout <<"*c="<<*c; cout<<"\n"; cout<<"Adresa b i adresa memorisana u pokazivacu na b:\n"; cout <<"b&="<<&b; cout<<"\n"; cout <<"c="<<c; cout<<"\n"; a=a+b; cout<<"Vrednosti a, nakon dodavanja b po vrednosti:\n"; cout <<"a="<<a; cout<<"\n"; a=a+*c; cout<<"Vrednosti a, nakon ponovnog dodavanja b preko pointera:\n"; cout <<"a="<<a; cout<<"\n"; return 0; }

30

//Programiranje I //Vezbe: Program broj 21 //Program koji demonstrira upotrebu referenci #include <iostream.h> int main() { int a = 5; int b = 7; int & c = a; cout<<"Vrednosti a i reference na a:\n"; cout <<"a="<<a; cout<<"\n"; cout <<"c="<<c; cout<<"\n"; cout<<"Adresa a i adresa reference na a:\n"; cout <<"&a="<<&a; cout<<"\n"; cout <<"c="<<&c; cout<<"\n";

a=a+b; cout<<"Vrednosti a i reference na a, nakon dodavanja b:\n"; cout <<"a="<<a; cout<<"\n"; cout <<"c="<<c; cout<<"\n"; c=c+b; cout<<"Vrednosti a i reference na a, nakon dodavanja b referenci na a:\n"; cout <<"a="<<a; cout<<"\n"; cout <<"c="<<c; cout<<"\n"; return 0; }

31

//Programiranje I //Vezbe: Program broj 22 //Program koji demonstrira pozivanje funkcije po vrednosti #include <iostream.h> void izmena(int a,int b); int main() { int a=5; int b=7; cout<<"Vrednosti pre poziva funkcije:\n"; cout <<"a="<<a; cout<<"\n"; cout <<"b="<<b; cout<<"\n"; izmena(a,b); cout<<"Vrednosti posle poziva funkcije:\n"; cout <<"a="<<a; cout<<"\n"; cout <<"b="<<b; cout<<"\n"; return 0; } void izmena(int a,int b) { int pomocna; pomocna=a; a=b; b=pomocna; cout<<"Vrednosti u funkciji:\n"; cout <<"a="<<a; cout<<"\n"; cout <<"b="<<b; cout<<"\n"; }

32

//Programiranje I //Vezbe: Program broj 23 //Program koji demonstrira pozivanje funkcije po referenci preko pointera #include <iostream.h> void izmena(int * a,int * b); int main() { int a=5; int b=7; cout<<"Vrednosti pre poziva funkcije:\n"; cout <<"a="<<a; cout<<"\n"; cout <<"b="<<b; cout<<"\n"; izmena(&a,&b); cout<<"Vrednosti posle poziva funkcije:\n"; cout <<"a="<<a; cout<<"\n"; cout <<"b="<<b; cout<<"\n"; return 0; } void izmena(int * a,int * b) { int pomocna; pomocna=*a; *a=*b; *b=pomocna; cout<<"Vrednosti u funkciji:\n"; cout <<"a="<<*a; cout<<"\n"; cout <<"b="<<*b; cout<<"\n"; }

33

//Programiranje I //Vezbe: Program broj 24 //Program koji demonstrira pozivanje funkcije po referenci preko referenci #include <iostream.h> void izmena(int & a,int & b); int main() { int a=5; int b=7; cout<<"Vrednosti pre poziva funkcije:\n"; cout <<"a="<<a; cout<<"\n"; cout <<"b="<<b; cout<<"\n"; izmena(a,b); cout<<"Vrednosti posle poziva funkcije:\n"; cout <<"a="<<a; cout<<"\n"; cout <<"b="<<b; cout<<"\n"; return 0; } void izmena(int & a,int & b) { int pomocna; pomocna=a; a=b; b=pomocna; cout<<"Vrednosti u funkciji:\n"; cout <<"a="<<a; cout<<"\n"; cout <<"b="<<b; cout<<"\n"; }

34

//Programiranje I //Vezbe: Program broj 25 //Program koji demonstrira upotrebu pointera za rukovanje nizovima #include <iostream.h> int main() { int i; int b[10]={1,2,3,4,5,6,7,8,9,10}; int * c = b; for(i=0;i<10;i++) { cout<<*c<<" "; c++; } return 0; }

35

//Programiranje I //Vezbe: Program broj 26 //Program koji demonstrira upotrebu pointera za kreiranje i koriscenje //memorije na heap-u, i pristupanje iz funkcije #include <iostream.h> void promena(int * x,int * y); int main() { int a=5; int * b=&a; int * c = new int; if(c==NULL) { cout<<"Nema slobodne memorija na heap-u"; return 0; } *c=7; cout<<a<<"\n"; cout<<*b<<"\n"; cout<<*c<<"\n"; promena(b,c); cout<<a<<"\n"; cout<<*b<<"\n"; cout<<*c<<"\n"; delete c; c=NULL; cout<<a<<"\n"; cout<<*b<<"\n"; cout<<c<<"\n"; return 0; } void promena(int * x,int * y) { int pomocni; pomocni=*x; *x=*y; *y=pomocni; }

36

//Programiranje I //Vezbe: Program broj 27 //Program koji demonstrira upotrebu pointera za kreiranje i koriscenje //memorije na heap-u u kombinaciju sa kreiranjem nizova na heap-u #include <iostream.h> int main() { int i; int * c = new int[10]; int * b=c; for(i=0;i<10;i++) { *b=i+1; //c[i]=i+1; b++; } b=c; for(i=0;i<10;i++) { cout<<*b<<" "; //cout<<c[i]<<" "; b++; } b=NULL; delete [] c; c=NULL; return 0; }

37

//Programiranje I //Vezbe: Program broj 28 //Program koji demonstrira deklaraciju i upotrebu elementarne klase #include <iostream.h> class Point { public: Point(); Point(int x,int y); Point(const Point & thePoint); ~Point(); void SetX(int newx); void SetY(int newy); int GetX() const; int GetY() const; private: int itsx; int itsy; }; Point::Point() { itsx=0; itsy=0; cout<<"Default konstruktor klase Point\n"; }

Point::Point(int initx,int inity) { itsx=initx; itsy=inity; cout<<"Konstruktor klase Point\n"; } Point::Point(const Point & thePoint) { itsx=thePoint.GetX(); itsy=thePoint.GetY(); cout<<"Copy konstruktor klase Point\n"; } Point::~Point() { cout<<"Destruktor klase Point\n"; } void Point::SetX(int newx) { itsx=newx; }

38

void Point::SetY(int newy) { itsy=newy; } Point::GetX() const { return itsx; } Point::GetY() const { return itsy; } int main() { Point tacka1(5,7); cout<<"Kordinata x cout<<"Kordinata y tacka1.SetX(3); cout<<"Kordinata x cout<<"Kordinata y tacka1.SetY(9); cout<<"Kordinata x cout<<"Kordinata y return 0; }

tacke1 je:"<<tacka1.GetX()<<"\n"; tacke1 je:"<<tacka1.GetY()<<"\n"; tacke1 je:"<<tacka1.GetX()<<"\n"; tacke1 je:"<<tacka1.GetY()<<"\n"; tacke1 je:"<<tacka1.GetX()<<"\n"; tacke1 je:"<<tacka1.GetY()<<"\n";

39

//Programiranje I //Vezbe: Program broj 29 //Program koji demonstrira klase sa drugim klasama kao podacima clanovima //Takodje je prikazana upotreba vise konstruktora i definicija copy konstruktora #include <iostream.h> #include <math.h> class Point { public: Point(); Point(int x,int y); Point(const Point & thePoint); ~Point(); void SetX(int newx); void SetY(int newy); int GetX() const; int GetY() const; private: int itsx; int itsy; }; Point::Point() { itsx=0; itsy=0; cout<<"Default konstruktor klase Point\n"; }

Point::Point(int initx,int inity) { itsx=initx; itsy=inity; cout<<"Konstruktor klase Point\n"; } Point::Point(const Point & thePoint) { itsx=thePoint.GetX(); itsy=thePoint.GetY(); cout<<"Copy konstruktor klase Point\n"; } Point::~Point() { cout<<"Destruktor klase Point\n"; } void Point::SetX(int newx) { itsx=newx;

40

} void Point::SetY(int newy) { itsy=newy; } Point::GetX() const { return itsx; } Point::GetY() const { return itsy; } class Line { public: Line(); Line(Point initStart,Point initStop); ~Line(); void SetLine(Point initStart,Point initStop); void SetStart(Point newStart); void SetStop(Point newStop); Point GetStart() const; Point GetStop() const; float GetLenght() const; private: Point itsStart; Point itsStop; }; Line::Line() { cout<<"Default konstruktor klase Line\n"; } Line::Line(Point initStart,Point initStop) { itsStart.SetX(initStart.GetX()); itsStart.SetY(initStart.GetY()); itsStop.SetX(initStop.GetX()); itsStop.SetY(initStop.GetY()); cout<<"Konstruktor klase Line\n"; } Line::~Line() { cout<<"Destruktor klase Line\n"; } void Line::SetLine(Point initStart,Point initStop) { itsStart.SetX(initStart.GetX()); itsStart.SetY(initStart.GetY()); itsStop.SetX(initStop.GetX()); itsStop.SetY(initStop.GetY()); }

41

Point Line::GetStart() const { return itsStart; } Point Line::GetStop() const { return itsStop; } float Line::GetLenght() const { return sqrt((itsStart.GetX()-itsStop.GetX())*(itsStart.GetX()itsStop.GetX())+(itsStart.GetY()-itsStop.GetY())*(itsStart.GetY()itsStop.GetY())); //return (itsStart.GetX()-itsStop.GetX())*(itsStart.GetX()itsStop.GetX())+(itsStart.GetY()-itsStop.GetY())*(itsStart.GetY()itsStop.GetY()); } int main() { Point initStart(2,3); Point initStop(3,4); Line Linija1; //(initStart,initStop); Linija1.SetLine(initStart,initStop); cout<<Linija1.GetStart().GetX(); cout<<Linija1.GetStart().GetY(); cout<<Linija1.GetStop().GetX(); cout<<Linija1.GetStop().GetY(); cout<<Linija1.GetLenght()<<"\n"; return 0; }

42

//Programiranje I //Vezbe: Program broj 30 //Program koji demonstrira deklaraciju i upotrebu elementarne klase //ciji se objekat formira na slobodnom skladistu heap-u #include <iostream.h> class Point { public: Point(); Point(int x,int y); Point(const Point & thePoint); ~Point(); void SetX(int newx); void SetY(int newy); int GetX() const; int GetY() const; private: int itsx; int itsy; }; Point::Point() { itsx=0; itsy=0; cout<<"Default konstruktor klase Point\n"; }

Point::Point(int initx,int inity) { itsx=initx; itsy=inity; cout<<"Konstruktor klase Point\n"; } Point::Point(const Point & thePoint) { itsx=thePoint.GetX(); itsy=thePoint.GetY(); cout<<"Copy konstruktor klase Point\n"; } Point::~Point() { cout<<"Destruktor klase Point\n"; } void Point::SetX(int newx) { itsx=newx; } void Point::SetY(int newy) {

43

itsy=newy; } Point::GetX() const { return itsx; } Point::GetY() const { return itsy; } int main() { Point * PPoint = cout<<"Kordinata cout<<"Kordinata PPoint->SetX(3); cout<<"Kordinata cout<<"Kordinata PPoint->SetY(9); cout<<"Kordinata cout<<"Kordinata delete PPoint; return 0; }

new Point(5,7); x tacke1 je:"<<(*PPoint).GetX()<<"\n"; y tacke1 je:"<<PPoint->GetY()<<"\n"; x tacke1 je:"<<PPoint->GetX()<<"\n"; y tacke1 je:"<<PPoint->GetY()<<"\n"; x tacke1 je:"<<PPoint->GetX()<<"\n"; y tacke1 je:"<<PPoint->GetY()<<"\n";

44

//Programiranje I //Vezbe: Program broj 31 //Program koji demonstrira deklaraciju i upotrebu elementarne klase //ciji se objekat formira na slobodnom skladistu heap-u, a takodje i podaci clanovi

#include <iostream.h> class Point { public: Point(); Point(int x,int y); Point(const Point & thePoint); ~Point(); void SetX(int newx); void SetY(int newy); int GetX() const; int GetY() const; private: int * itsx; int * itsy; }; Point::Point() { itsx=new int(0); itsy=new int(0); cout<<"Default konstruktor klase Point\n"; }

Point::Point(int initx,int inity) { itsx=new int(initx); itsy=new int(inity); cout<<"Konstruktor klase Point\n"; } Point::Point(const Point & thePoint) { *itsx=thePoint.GetX(); *itsy=thePoint.GetY(); cout<<"Copy konstruktor klase Point\n"; } Point::~Point() { delete itsx; delete itsy; cout<<"Destruktor klase Point\n"; } void Point::SetX(int newx) { *itsx=newx;

45

} void Point::SetY(int newy) { *itsy=newy; } Point::GetX() const { return *itsx; } Point::GetY() const { return *itsy; } int main() { Point * PPoint = cout<<"Kordinata cout<<"Kordinata PPoint->SetX(3); cout<<"Kordinata cout<<"Kordinata PPoint->SetY(9); cout<<"Kordinata cout<<"Kordinata delete PPoint; return 0; }

new Point(5,7); x tacke1 je:"<<(*PPoint).GetX()<<"\n"; y tacke1 je:"<<PPoint->GetY()<<"\n"; x tacke1 je:"<<PPoint->GetX()<<"\n"; y tacke1 je:"<<PPoint->GetY()<<"\n"; x tacke1 je:"<<PPoint->GetX()<<"\n"; y tacke1 je:"<<PPoint->GetY()<<"\n";

46

//Programiranje I //Vezbe: Program broj 32 //Program koji demonstrira nasledjivanje klasa // definiciju bazne i izvedene klase #include <iostream.h> class Point { public: Point(); Point(int x,int y); Point(const Point & thePoint); ~Point(); void SetX(int newx); void SetY(int newy); int GetX() const; int GetY() const; private: int itsx; int itsy; }; Point::Point() { itsx=0; itsy=0; cout<<"Default konstruktor klase Point\n"; }

Point::Point(int initx,int inity) { itsx=initx; itsy=inity; cout<<"Konstruktor klase Point\n"; } Point::Point(const Point & thePoint) { itsx=thePoint.GetX(); itsy=thePoint.GetY(); cout<<"Copy konstruktor klase Point\n"; } Point::~Point() { cout<<"Destruktor klase Point\n"; } void Point::SetX(int newx) { itsx=newx; } void Point::SetY(int newy) {

47

itsy=newy; } Point::GetX() const { return itsx; } Point::GetY() const { return itsy; } class TDPoint : public Point { public: TDPoint(); ~TDPoint(); void SetZ(int newz); int GetZ() const; private: int itsz; }; TDPoint::TDPoint() { itsz=0; cout<<"Default konstruktor klase TDPoint\n"; } TDPoint::~TDPoint() { cout<<"Destruktor klase TDPoint\n"; } void TDPoint::SetZ(int newz) { itsz=newz; } TDPoint::GetZ() const { return itsz; }

int main() { TDPoint tacka1; cout<<"Kordinata cout<<"Kordinata cout<<"Kordinata tacka1.SetX(3); tacka1.SetY(6); tacka1.SetZ(9); cout<<"Kordinata cout<<"Kordinata cout<<"Kordinata return 0;

x tacke1 je:"<<tacka1.GetX()<<"\n"; y tacke1 je:"<<tacka1.GetY()<<"\n"; z tacke1 je:"<<tacka1.GetZ()<<"\n";

x tacke1 je:"<<tacka1.GetX()<<"\n"; y tacke1 je:"<<tacka1.GetY()<<"\n"; z tacke1 je:"<<tacka1.GetZ()<<"\n";

48

//Programiranje I //Vezbe: Program broj 33 //Program koji demonstrira nasledjivanje klasa // i preklapajuce konstruktore u izvedenim klasama #include <iostream.h> class Point { public: Point(); Point(int x,int y); Point(const Point & thePoint); ~Point(); void SetX(int newx); void SetY(int newy); int GetX() const; int GetY() const; private: int itsx; int itsy; }; Point::Point() { itsx=0; itsy=0; cout<<"Default konstruktor klase Point\n"; }

Point::Point(int initx,int inity) { itsx=initx; itsy=inity; cout<<"Konstruktor klase Point\n"; } Point::Point(const Point & thePoint) { itsx=thePoint.GetX(); itsy=thePoint.GetY(); cout<<"Copy konstruktor klase Point\n"; } Point::~Point() { cout<<"Destruktor klase Point\n"; } void Point::SetX(int newx) { itsx=newx; } void Point::SetY(int newy)

49

{ itsy=newy; } Point::GetX() const { return itsx; } Point::GetY() const { return itsy; } class TDPoint : public Point { public: TDPoint(); TDPoint(int x,int y,int z); TDPoint(int z); ~TDPoint(); void SetZ(int newz); int GetZ() const; private: int itsz; }; TDPoint::TDPoint() { itsz=0; cout<<"Default konstruktor klase TDPoint\n"; }

TDPoint::TDPoint(int x,int y,int z) :Point(x,y) { itsz=z; cout<<"Konstruktor klase TDPoint\n"; } TDPoint::TDPoint(int z): itsz(z) { cout<<"Konstruktor2 klase TDPoint\n"; } TDPoint::~TDPoint() { cout<<"Destruktor klase TDPoint\n"; } void TDPoint::SetZ(int newz) { itsz=newz; } TDPoint::GetZ() const { return itsz;

50

int main() { TDPoint tacka0; TDPoint tacka1(1,2,3); TDPoint tacka2(3); cout<<"Kordinata x tacke0 cout<<"Kordinata y tacke0 cout<<"Kordinata z tacke0 cout<<"Kordinata x tacke1 cout<<"Kordinata y tacke1 cout<<"Kordinata z tacke1 cout<<"Kordinata x tacke2 cout<<"Kordinata y tacke2 cout<<"Kordinata z tacke2

je:"<<tacka0.GetX()<<"\n"; je:"<<tacka0.GetY()<<"\n"; je:"<<tacka0.GetZ()<<"\n"; je:"<<tacka1.GetX()<<"\n"; je:"<<tacka1.GetY()<<"\n"; je:"<<tacka1.GetZ()<<"\n"; je:"<<tacka2.GetX()<<"\n"; je:"<<tacka2.GetY()<<"\n"; je:"<<tacka2.GetZ()<<"\n";

tacka1.SetX(3); tacka1.SetY(6); tacka1.SetZ(9); cout<<"Kordinata x tacke1 je:"<<tacka1.GetX()<<"\n"; cout<<"Kordinata y tacke1 je:"<<tacka1.GetY()<<"\n"; cout<<"Kordinata z tacke1 je:"<<tacka1.GetZ()<<"\n"; return 0; }

51

//Programiranje I //Vezbe: Program broj 34 //Program koji demonstrira nasledjivanje klasa // i overriding i overloading #include <iostream.h> class Point { public: Point(); Point(int x,int y); Point(const Point & thePoint); ~Point(); void SetX(int newx); void SetY(int newy); int GetX() const; int GetY() const; void Move(); void Move(int x); // void Move(int y); void Move(int x, int y); void print(); protected: int itsx; int itsy; }; Point::Point() { itsx=0; itsy=0; cout<<"Default konstruktor klase Point\n"; }

Point::Point(int initx,int inity) { itsx=initx; itsy=inity; cout<<"Konstruktor klase Point\n"; } Point::Point(const Point & thePoint) { itsx=thePoint.GetX(); itsy=thePoint.GetY(); cout<<"Copy konstruktor klase Point\n"; } Point::~Point() { cout<<"Destruktor klase Point\n"; } void Point::SetX(int newx) {

52

itsx=newx; } void Point::SetY(int newy) { itsy=newy; } int Point::GetX() const { return itsx; } int Point::GetY() const { return itsy; }

void Point::Move() { cout<<"default move\n"; } void Point::Move(int x) { itsx=itsx+x; cout<<"move x\n"; } void Point::Move(int x, int y) { itsx=itsx+x; itsy=itsy+y; cout<<"move xy\n"; }

void Point::print() { cout<<"Metod klase Point!\n"; } class TDPoint : public Point { public: TDPoint(); TDPoint(int x,int y,int z); TDPoint(int z); ~TDPoint(); void SetZ(int newz); int GetZ() const; void Move(int x, int y, int z); void print(); private: int itsz; }; TDPoint::TDPoint() {

53

itsz=0; cout<<"Default konstruktor klase TDPoint\n"; }

TDPoint::TDPoint(int x,int y,int z) :Point(x,y) { itsz=z; cout<<"Konstruktor klase TDPoint\n"; } TDPoint::TDPoint(int z): itsz(z) { cout<<"Konstruktor2 klase TDPoint\n"; } TDPoint::~TDPoint() { cout<<"Destruktor klase TDPoint\n"; } void TDPoint::SetZ(int newz) { itsz=newz; } int TDPoint::GetZ() const { return itsz; } void TDPoint::Move(int x, int y, int z) { itsx=itsx+x; itsy=itsy+y; itsz=itsz+z; cout<<"move xyz\n"; }

void TDPoint::print() { cout<<"Metod klase TDPoint!\n"; } int main() { TDPoint tacka0; TDPoint tacka1(1,2,3); TDPoint tacka2(3); cout<<"Kordinata x tacke0 cout<<"Kordinata y tacke0 cout<<"Kordinata z tacke0 cout<<"Kordinata x tacke1 cout<<"Kordinata y tacke1 cout<<"Kordinata z tacke1 cout<<"Kordinata x tacke2 cout<<"Kordinata y tacke2 cout<<"Kordinata z tacke2

je:"<<tacka0.GetX()<<"\n"; je:"<<tacka0.GetY()<<"\n"; je:"<<tacka0.GetZ()<<"\n"; je:"<<tacka1.GetX()<<"\n"; je:"<<tacka1.GetY()<<"\n"; je:"<<tacka1.GetZ()<<"\n"; je:"<<tacka2.GetX()<<"\n"; je:"<<tacka2.GetY()<<"\n"; je:"<<tacka2.GetZ()<<"\n";

54

tacka1.SetX(3); tacka1.SetY(6); tacka1.SetZ(9); cout<<"Kordinata x tacke1 je:"<<tacka1.GetX()<<"\n"; cout<<"Kordinata y tacke1 je:"<<tacka1.GetY()<<"\n"; cout<<"Kordinata z tacke1 je:"<<tacka1.GetZ()<<"\n"; tacka0.print(); tacka0.Point::print(); tacka0.Point::Move(); tacka0.Point::Move(1); tacka0.Point::Move(1,1); tacka0.Move(1,1,1); return 0; }

55

//Programiranje I //Vezbe: Program broj 35 //Program koji demonstrira upisivanje podataka u fajl #include #include #include #include <iostream.h> <math.h> <stdlib.h> <stdio.h>

int main() { FILE * file; float x; int i; file=fopen("name.txt","w"); for(i=1;i<=100;i++) { x=i; cout<<x<<"\n"; fprintf(file,"%f\n",x); } fclose(file); return 0; }

56

//Programiranje I //Vezbe: Program broj 36 //Program koji demonstrira upotrebu stringova #include <iostream.h>

int main() { char String1[]="Programiranje I"; char String2[]={'P','r','o','g','r','a','m','i','r','a','n','j','e','I','\ 0'}; char String3[80]; char String4[80]; char String5[80]; char buffer[80]; strcpy(String3,String2); cout<<String1; cout<<String2; strncpy(String4,String1,3); cout<<String3; cout<<String4; cout<<"\nunesi string\n"; cin>>String5; cout<<String5; return 0; }

57

//Programiranje I //Vezbe: Program broj 37 //Program koji demonstrira koriscenje generatora slucajnih brojeva #include <iostream.h> #include <math.h>

int main() { float x; int i; for(i=1;i<=100;i++) { x=1.0*rand()/RAND_MAX; cout<<x<<"\n"; } return 0; }

//Programiranje 1 //Vezbe: Program broj 38

58

//Program koji demonstrira virtuelne metode //Pointer bazne klase kome se dodeljuje izvedena klasa //poziva metode izvedene klase ukoliko su oni virtuelni #include<iostream.h> class Avion { public: Avion(); Avion(int broj, float raspon, float duzina); virtual ~Avion(); void SetBrojSedista(int broj); int GetBrojSedista() const; void SetRaspon(float raspon); float GetRaspon() const; void SetDuzina(float Duzina); float GetDuzina() const; void startMotora(); void virtual potisakMotora(); private: int brojSedista; float rasponKrila; float duzinaTrupa; }; Avion::Avion() { brojSedista = 100; rasponKrila = 25; duzinaTrupa =40; cout<<"\nDefault konstruktor klase Avion"; } Avion::Avion(int broj, float raspon, float duzina) { brojSedista = broj; rasponKrila = raspon; duzinaTrupa = duzina; cout<<"\nKonstruktor Avion"; } Avion::~Avion() { cout<<"\nDestruktor Avion"; } void Avion::SetBrojSedista(int broj) { brojSedista = broj; } void Avion::SetRaspon(float raspon) { rasponKrila = raspon; } void Avion::SetDuzina(float duzina) {

59

duzinaTrupa = duzina; } int Avion::GetBrojSedista() const { return brojSedista; } float Avion::GetRaspon() const { return rasponKrila; } float Avion::GetDuzina() const { return duzinaTrupa; } void Avion::startMotora() { cout<<"\nStart motora\n"; } void Avion::potisakMotora() { cout<<"\nPotisak apstraktnog motora\n"; } class ElisniAvion : public Avion { public: ElisniAvion(); ElisniAvion(int broj, float raspon, float duzina); ~ElisniAvion(); void startMotora(); void potisakMotora(); }; ElisniAvion::ElisniAvion() :Avion() { cout<<"\nDefault konstruktor klase ElisniAvion"; } ElisniAvion::ElisniAvion(int broj, float raspon, float duzina) :Avion(broj, raspon, duzina) { cout<<"\nKonstruktor ElisniAvion"; } ElisniAvion::~ElisniAvion() { cout<<"\nDestruktor ElisniAvion"; } void ElisniAvion::startMotora() { cout<<"\nStart elisnog motora\n"; } void ElisniAvion::potisakMotora()

60

{ cout<<"\nPotisak elisnog motora\n"; } int main() { Avion * pAvion = new ElisniAvion; cout<<"\n"; cout<< pAvion->GetBrojSedista(); cout<<"\n"; cout<< pAvion->GetRaspon(); cout<<"\n"; cout<< pAvion->GetDuzina(); pAvion->SetBrojSedista(120); pAvion->SetRaspon(35); pAvion->SetDuzina(50); pAvion->startMotora(); pAvion->potisakMotora(); cout<<"\n"; cout<< pAvion->GetBrojSedista(); cout<<"\n"; cout<< pAvion->GetRaspon(); cout<<"\n"; cout<< pAvion->GetDuzina(); delete pAvion; pAvion = NULL; return 0; }

//Programiranje 1 //Vezbe: Program broj 39 //Program koji demonstrira Polimorfizam i dinamicko povezivanje //Pointer bazne klase poziva virtualne metode bazne klase,

61

// a realizuje se pozivanje metoda izvedenih klasa //Virtualne metod bazne klase se ostvaruje preko na razne nacine u zavisnosti //sa kojom izvedenom klasom je bazna klasa povezana //Virtuelni metod bazne klase se realizuje na vise nacina sto je //sustina Polimorfizma //Pitanje koja izvedena klasa i koji njen metod ce biti pozvan razresava //se u momentu realizacija programa kada korisnik odlucuje koja izvedena //klasa ce se konstruisati. Povezivanje virtuelnih metoda sa metodom izvedene //klase se na ovaj nacin izvrsava u fazi izvrsenja programa sto se //zove dinamicko povezivanje.

#include<iostream.h> class Avion { public: Avion(); Avion(int broj, float raspon, float duzina); virtual ~Avion(); void SetBrojSedista(int broj); int GetBrojSedista() const; void SetRaspon(float raspon); float GetRaspon() const; void SetDuzina(float Duzina); float GetDuzina() const; void startMotora(); void virtual potisakMotora(); private: int brojSedista; float rasponKrila; float duzinaTrupa; }; Avion::Avion() { brojSedista = 100; rasponKrila = 25; duzinaTrupa =40; cout<<"\nDefault konstruktor klase Avion"; } Avion::Avion(int broj, float raspon, float duzina) { brojSedista = broj; rasponKrila = raspon; duzinaTrupa = duzina; cout<<"\nKonstruktor Avion"; } Avion::~Avion() { cout<<"\nDestruktor Avion"; } void Avion::SetBrojSedista(int broj)

62

{ brojSedista = broj; } void Avion::SetRaspon(float raspon) { rasponKrila = raspon; } void Avion::SetDuzina(float duzina) { duzinaTrupa = duzina; } int Avion::GetBrojSedista() const { return brojSedista; } float Avion::GetRaspon() const { return rasponKrila; } float Avion::GetDuzina() const { return duzinaTrupa; } void Avion::startMotora() { cout<<"\nStart motora\n"; } void Avion::potisakMotora() { cout<<"\nPotisak apstraktnog motora\n"; } class ElisniAvion : public Avion { public: ElisniAvion(); ElisniAvion(int broj, float raspon, float duzina); ~ElisniAvion(); void startMotora(); void potisakMotora(); }; ElisniAvion::ElisniAvion() :Avion() { cout<<"\nDefault konstruktor klase ElisniAvion"; } ElisniAvion::ElisniAvion(int broj, float raspon, float duzina) :Avion(broj, raspon, duzina) { cout<<"\nKonstruktor ElisniAvion"; }

63

ElisniAvion::~ElisniAvion() { cout<<"\nDestruktor ElisniAvion"; } void ElisniAvion::startMotora() { cout<<"\nStart elisnog motora\n"; } void ElisniAvion::potisakMotora() { cout<<"\nPotisak elisnog motora\n"; } class MlazniAvion : public Avion { public: MlazniAvion(); MlazniAvion(int broj, float raspon, float duzina); ~MlazniAvion(); void startMotora(); void potisakMotora(); }; MlazniAvion::MlazniAvion() :Avion() { cout<<"\nDefault konstruktor klase MlazniAvion"; } MlazniAvion::MlazniAvion(int broj, float raspon, float duzina) :Avion(broj, raspon, duzina) { cout<<"\nKonstruktor MlazniAvion"; } MlazniAvion::~MlazniAvion() { cout<<"\nDestruktor MlazniAvion"; } void MlazniAvion::startMotora() { cout<<"\nStart Mlaznog motora\n"; } void MlazniAvion::potisakMotora() { cout<<"\nPotisak Mlaznog motora\n"; } int main() { int izbor; Avion * pAvion; do { izbor = 3; cout<<" Meni:\n 1 - Elisni Avion\n 2 - Mlazni Avion\n 3 izlaz\n";

64

cin>>izbor; } while(izbor != 1 && izbor != 2 && izbor != 3); if(izbor == 1 || izbor == 2) { if(izbor == 1) pAvion = new ElisniAvion; if(izbor == 2) pAvion = new MlazniAvion; cout<<"\n"; cout<< pAvion->GetBrojSedista(); cout<<"\n"; cout<< pAvion->GetRaspon(); cout<<"\n"; cout<< pAvion->GetDuzina(); pAvion->SetBrojSedista(120); pAvion->SetRaspon(35); pAvion->SetDuzina(50); pAvion->startMotora(); pAvion->potisakMotora(); cout<<"\n"; cout<< pAvion->GetBrojSedista(); cout<<"\n"; cout<< pAvion->GetRaspon(); cout<<"\n"; cout<< pAvion->GetDuzina(); delete pAvion; pAvion = NULL; } return 0; }

65

You might also like