arhivadlwms

DokumentPredavanja Elmir Babovic

PR I - Prezentacije funkcije i nizovi

Tekst dokumenta1285 redova
  1. == Predavanje 16_17_18.pptx
  2. Programiranje 1
  3. FIT Mostar
  4. Funkcije – pitanja i primjeri
  5. Primjer 1 – Brojač prostih bojeva
  6. int brojac_prostih(int n, int m)
  7. {
  8. int brojac=0;
  9. for(int i=n;i<=m;i++)
  10. {
  11. int provjera = 0;
  12. int pomocna;
  13. pomocna = i;
  14. for (int j = 2; j<pomocna; j++)
  15. {
  16. if (pomocna%j==0)
  17. {
  18. provjera++;
  19. break;
  20. }
  21. }
  22. if (provjera==0)
  23. brojac++;
  24. }
  25. return brojac;
  26. }
  27. Primjer 2 – Da li je broj clan
  28. Fibonacci serije
  29. Da li je broj clan Fibonacci serije
  30. bool fibonaci(int n)
  31. {
  32. int fiboN, fiboNmin1=1, fiboNmin2=1, counter=1, yes=0;
  33. cout<<"Enter number: ";
  34. while (counter <= n)
  35. {
  36. fiboN = fiboNmin2 + fiboNmin1;
  37. fiboNmin1 = fiboNmin2;
  38. fiboNmin2 = fiboN;
  39. counter++;
  40. if (n==fiboN)
  41. yes=1;
  42. }
  43. if (yes == 1)
  44. return true;
  45. else
  46. return false;
  47. }
  48. Množenje bez korištenja *
  49. int mnozenje_sabiranjem(int number, int number2)
  50. {
  51. int counter=1, result=0;
  52. while (counter <= number)
  53. {
  54. result = result + number2;
  55. counter++;
  56. }
  57. return result;
  58. }
  59. Dijeljenje bez korištenja /
  60. int dijeljenje_oduzimanjem(int &number, int number2)
  61. {
  62. int counter=0;
  63. while (number >= number2)
  64. {
  65. number = number - number2;
  66. counter++;
  67. }
  68. return counter;
  69. }
  70. Debug
  71. Zašto koristimo debug?
  72. Kako nam pomaže?
  73. Debug codea
  74. Praćenje vrijednosti varijabli
  75. Pregled memorije
  76. Statički nizovi
  77. Niz u matematičkom smislu
  78. niz u skupu R
  79. 1,2,3,4,5....
  80. 2,4,6,8,10....
  81. 1,1,2,3,5,8,13...
  82. Niz u programskom smislu
  83. Niz ili Polje (array)
  84. Niz je najjednostavnija struktura podataka koja omogućava pohranu skupa istovrsnih podataka
  85. Niz je uređeni skup koji sadrži određeni broj elemenata istog tipa T
  86. Vrijednosti, odnosno, elementi niza, su pohranjene u kontinuirani memorijski blok
  87. Niz je skup varijabli istog tipa kojima smo dali jedinstveno ime a pojedinačne elementne razlikujemo po indeksu
  88. Jednodimenzionalni statički niz
  89. Statički niz
  90. Dinamički niz
  91. Deklaracija niza
  92. tip identifikator [broj_elemenata];
  93. int neki_nas_niz [5];
  94. tip – bilo koji validan tip podatka u C++
  95. identifikator – bilo koje validno ime u C++
  96. u uglastim zagradama se navodi broj elemenata (u slučaju statičkih nizova veličina niza mora biti KONSTANTA)
  97. Niz
  98. int neki_nas_niz[5];
  99. int[0] int[1] int[2] int[3] int[4]
  100. Sadržaj
  101. 2 bajta
  102. 5
  103. 2
  104. 4
  105. 6
  106. 7
  107. Deklaracija i inicijalizacija
  108. Samo deklaracija
  109. int niz[5];
  110. Inicijalizacija pri deklaraciji
  111. int niz[5]={}; //Inicijalizacija vrijednošću 0
  112. float niz1[5]={100.432 , 65.990985 , 45.3, 5.54, 3.9987};
  113. float niz1[5]={100.432 , 65.990985 , 45.3}; //djelomicna
  114. Inicijalizacija unosom vrijednosti
  115. cin>>niz2[i];
  116. Inicijalizacija eksplicitnom dodjelom
  117. niz3[i]=float(i)*i*i/7;
  118. Operacije nad članovima niza
  119. Operacije ovise o tipu podatka koji je upotrijebljen pri deklaraciji niza – aritmetičke, unos, ispis, usporedba
  120. Svaki član niza se može posmatrati kao jedna varijabla za koju vrijede sva pravila za taj tip.
  121. Napomena - Tip podatka određuju:
  122. skup vrijednosti koje podatak može imati,
  123. memorijski prostor potreban za smještanje podatka,
  124. operacije koje mogu da se vrše nad tim podatkom.
  125. Primjer: Operacije na nizu - računanje prosjeka niza
  126. float niz4[5]; //
  127. float prosjek=0;
  128. for (int i= 0; i<5; i++)
  129. {
  130. niz4[i]=i+1.023;
  131. }
  132. for (int i= 0; i<5; i++)
  133. {
  134. prosjek +=niz4[i];
  135. }
  136. prosjek/=5;
  137. cout<<prosjek<<endl;
  138. Manpulacija određenim članovima
  139. float niz4[5]; 
  140. for (int i= 0; i<5; i++) //inicijaliziranje niza
  141. {
  142. niz4[i]=i+1.023;
  143. }
  144. niz4[2]=niz4[0]+niz4[3];
  145. cout<<niz4[2]<<endl;
  146. Primjer: Fibonacci niz
  147. Primjer slučaja gdje korištenje niza uveliko olakšava posao programera
  148. Primjer: Fibonacci niz
  149. int niz4[10];
  150. niz4[0]=0;
  151. niz4[1]=1;
  152.  
  153. for (int i= 2; i<10; i++) //inicijaliziranje Fibonacci niza
  154. {
  155. niz4[i]=niz4[i-1]+niz4[i-2];
  156. }
  157. for (int i= 0; i<10; i++)
  158. {
  159. cout<<setw(3)<<niz4[i];
  160. }
  161. Da li je broj clan Fibonacci serije – v.2
  162. int niz4[20]; //Fibonacci sekvenca - podrazumjevamo da je broj manji od 20-tog elementa Fibonacci niza
  163. int test_broj;
  164. cin>>test_broj; //podrazumjevamo broj veci od 2
  165. niz4[0]=0;
  166. niz4[1]=1;
  167. for (int i= 2; i<20; i++)
  168. {
  169. niz4[i]=niz4[i-1]+niz4[i-2];
  170. if (niz4[i]==test_broj)
  171. {
  172. cout<<"Broj jeste u Fibonacci nizu"<<endl;
  173. break;
  174. }
  175. else if(niz4[i]>test_broj)
  176. {
  177. cout<<"Broj nije u Fibonacci nizu"<<endl;
  178. break;
  179. }
  180. }
  181. Niz kao parametar funkcije
  182. U funkciju je moguće proslijediti niz u cjelini, ali i pojedinačne elemente niza
  183. Niz kao cjelina se proslijeđuje kao pseudoreferentni parametar
  184. Pojedinačni elementi se mogu prosljeđivati kao:
  185. parametri po vrijednosti i
  186. referentni parametri;
  187. Pitanja?
  188. == Predavanje 19_20_21.pptx
  189. Programiranje 1
  190. FIT Mostar
  191. Statički nizovi
  192. Niz u matematičkom smislu
  193. niz u skupu R
  194. 1,2,3,4,5....
  195. 2,4,6,8,10....
  196. 1,1,2,3,5,8,13...
  197. Niz u programskom smislu
  198. Niz ili Polje (array)
  199. Niz je najjednostavnija struktura podataka koja omogućava pohranu skupa istovrsnih podataka
  200. Niz je uređeni skup koji sadrži određeni broj elemenata istog tipa T
  201. Vrijednosti, odnosno, elementi niza, su pohranjene u kontinuirani memorijski blok
  202. Niz je skup varijabli istog tipa kojima smo dali jedinstveno ime a pojedinačne elementne razlikujemo po indeksu
  203. Jednodimenzionalni statički niz
  204. Statički niz
  205. Dinamički niz
  206. Deklaracija niza
  207. tip identifikator [broj_elemenata];
  208. int neki_nas_niz [5];
  209. tip – bilo koji validan tip podatka u C++
  210. identifikator – bilo koje validno ime u C++
  211. u uglastim zagradama se navodi broj elemenata (u slučaju statičkih nizova veličina niza mora biti KONSTANTA)
  212. Niz
  213. int neki_nas_niz[5];
  214. int[0] int[1] int[2] int[3] int[4]
  215. Sadržaj
  216. 2 bajta
  217. 5
  218. 2
  219. 4
  220. 6
  221. 7
  222. Deklaracija i inicijalizacija
  223. Samo deklaracija
  224. int niz[5];
  225. Inicijalizacija pri deklaraciji
  226. int niz[5]={}; //Inicijalizacija vrijednošću 0
  227. float niz1[5]={100.432 , 65.990985 , 45.3, 5.54, 3.9987};
  228. float niz1[5]={100.432 , 65.990985 , 45.3}; //djelomicna
  229. Inicijalizacija unosom vrijednosti
  230. cin>>niz2[i];
  231. Inicijalizacija eksplicitnom dodjelom
  232. niz3[i]=float(i)*i*i/7;
  233. Operacije nad članovima niza
  234. Operacije ovise o tipu podatka koji je upotrijebljen pri deklaraciji niza – aritmetičke, unos, ispis, usporedba
  235. Svaki član niza se može posmatrati kao jedna varijabla za koju vrijede sva pravila za taj tip.
  236. Napomena - Tip podatka određuju:
  237. skup vrijednosti koje podatak može imati,
  238. memorijski prostor potreban za smještanje podatka,
  239. operacije koje mogu da se vrše nad tim podatkom.
  240. Primjer: Operacije na nizu - računanje prosjeka niza
  241. float niz4[5]; //
  242. float prosjek=0;
  243. for (int i= 0; i<5; i++)
  244. {
  245. niz4[i]=i+1.023;
  246. }
  247. for (int i= 0; i<5; i++)
  248. {
  249. prosjek +=niz4[i];
  250. }
  251. prosjek/=5;
  252. cout<<prosjek<<endl;
  253. Manpulacija određenim članovima
  254. float niz4[5]; 
  255. for (int i= 0; i<5; i++) //inicijaliziranje niza
  256. {
  257. niz4[i]=i+1.023;
  258. }
  259. niz4[2]=niz4[0]+niz4[3];
  260. cout<<niz4[2]<<endl;
  261. Primjer: Fibonacci niz
  262. Primjer slučaja gdje korištenje niza uveliko olakšava posao programera
  263. Primjer 2 – Da li je broj clan
  264. Fibonacci serije (sa i bez nizova)
  265. Da li je broj clan Fibonacci serije? (bez nizova)
  266. bool fibonaci(int n)
  267. {
  268. int fiboN, fiboNmin1=1, fiboNmin2=1, counter=1, yes=0;
  269. cout<<"Enter number: ";
  270. while (counter <= n)
  271. {
  272. fiboN = fiboNmin2 + fiboNmin1;
  273. fiboNmin1 = fiboNmin2;
  274. fiboNmin2 = fiboN;
  275. counter++;
  276. if (n==fiboN)
  277. yes=1;
  278. }
  279. if (yes == 1)
  280. return true;
  281. else
  282. return false;
  283. }
  284. Primjer: Fibonacci niz
  285. int niz4[10];
  286. niz4[0]=0;
  287. niz4[1]=1;
  288.  
  289. for (int i= 2; i<10; i++) //inicijaliziranje Fibonacci niza
  290. {
  291. niz4[i]=niz4[i-1]+niz4[i-2];
  292. }
  293. for (int i= 0; i<10; i++)
  294. {
  295. cout<<setw(3)<<niz4[i];
  296. }
  297. Da li je broj clan Fibonacci serije – v.2
  298. int niz4[20]; //Fibonacci sekvenca - podrazumjevamo da je broj manji od 20-tog elementa Fibonacci niza
  299. int test_broj;
  300. cin>>test_broj; //podrazumjevamo broj veci od 2
  301. niz4[0]=0;
  302. niz4[1]=1;
  303. for (int i= 2; i<20; i++)
  304. {
  305. niz4[i]=niz4[i-1]+niz4[i-2];
  306. if (niz4[i]==test_broj)
  307. {
  308. cout<<"Broj jeste u Fibonacci nizu"<<endl;
  309. break;
  310. }
  311. else if(niz4[i]>test_broj)
  312. {
  313. cout<<"Broj nije u Fibonacci nizu"<<endl;
  314. break;
  315. }
  316. }
  317. Niz kao parametar funkcije
  318. U funkciju je moguće proslijediti niz u cjelini, ali i pojedinačne elemente niza
  319. Niz kao cjelina se proslijeđuje kao pseudoreferentni parametar
  320. Pojedinačni elementi se mogu prosljeđivati kao:
  321. parametri po vrijednosti i
  322. referentni parametri;
  323. Pseudoreferentni parametar
  324. Zašto pseudoreferentni parametar?
  325. cout<<niz[1];
  326. cout<<niz[5];
  327. cout<<niz[i]; //i je integer
  328. cout<<niz;
  329. Pseudoreferentni parametar
  330. Ime niza sadrži adresu prvog elementa tog niza
  331. cout<<niz; //daje adresu
  332. Pitanja?
  333. == Predavanje 22_23_24.pptx
  334. Programiranje 1
  335. FIT Mostar
  336. Dvodimenzionalni nizovi
  337. Mogu se razumjeti kao matrice ili kao tabele
  338. Dimenzija 2
  339. Dimenzija 1
  340. Dvodimenzionalni nizovi
  341. niz se može opisati kao niz čiji su elementi nizovi
  342. elementima niza se pristupa navođenjem indeksa reda i indeksa kolone
  343. Smještanje niza u memoriji
  344. const int x=5, y=4;
  345. int main()
  346. {
  347. int tabela[x][y];
  348. .....
  349. Smještanje niza u memoriji
  350. Smještanje niza u memoriji
  351. Kao i kod 1D niza, 2D niz se smešta u kontinualni memorijski blok
  352. Dvodimenzionalni nizovi
  353. Niz: int tabela[x][y], kako se računa lokacija [i][j]
  354. npr. tabela[2][3]
  355. &E = &PE + (i*Y+j) ili
  356. Adresa elementa = Adresa prvog elementa + (i*Y+j)
  357. PE (adr=0)
  358. [i][j]
  359. Y
  360. X
  361. Deklaracija niza
  362. tip identifikator [br_elemenata1] [br_elemenata2];
  363. int neki_nas_niz [5][8];
  364. tip – bilo koji validan tip podatka u C++
  365. identifikator – bilo koje validno ime u C++
  366. u uglastim zagradama se navode brojevi elemenata
  367. Napomena: u slučaju statičkih nizova veličina niza mora biti KONSTANTA
  368. Deklaracija i inicijalizacija
  369. Inicijalizacija pri deklaraciji:
  370. int matrica [3][2]={{1,2}, {3,4}, {5,6}}
  371. ili
  372. int matrica [3][2]={{1}, {3,4}, {5}};
  373. int matrica [3][2]={1,3,6,12};
  374. 1
  375. 2
  376. 3
  377. 4
  378. 5
  379. 6
  380. 1
  381. 3
  382. 4
  383. 5
  384. 1
  385. 3
  386. 6
  387. 12
  388. Inicijalizacija
  389. Unosom preko tastature:
  390. cin>>niz[i][j];
  391. Eksplicitnom dodjelom
  392. niz[i][j] = 56;
  393. Korištenje 2D nizova
  394. Obično je potrebna ugnježdena petlja za indeksiranje obje dimenzije
  395. for (int i =0; i<x; i++)
  396. {
  397. for (int j=0; j<y; j++)
  398. {
  399. niz[i][j]=i*10+j;
  400. }
  401. }
  402. Prosljeđivanje 2D niza u funkciju
  403. Obavezno navođenje druge dimenzije
  404. (ili ostalih dimenzija za višedimenzionalne nizove) unutar uglastih zagrada
  405. Varijanta 1:
  406. upotreba globalnih konstanti;
  407. const int v1=3, v2=4;
  408. void unos(int [][v2]);
  409. Varijanta 2:
  410. prosljeđivanje dimenzija 2D niza kao zasebnih parametara
  411. void unos(int [][4], int, int);
  412. Pitanja?
  413. == Predavanje 13_14_15.pptx
  414. Programiranje 1
  415. FIT Mostar
  416. I Parcijalni ispit
  417. Ukoliko prilikom korištenje while petlje stavimo tačku-zarez iza uvjeta npr. while(i<100); { naredba 1; naredba2; } ishod će biti sljedeći:
  418. program će raditi, ali neispravno
  419. kompajler će smatrati da je tijelo petlje prazno
  420. moguća je beskonačna petlja
  421. nastaje logička pogreška
  422. Izraz: a = a - b - c; ekvivalentan je izrazima:
  423. a-= b + c;
  424. a = a - (b + c);
  425. Konstante koristimo iz sljedećih razloga:
  426. čitljivosti koda
  427. mogućnost izmjene vrijednosti varijable samo na jednom mjestu
  428. Tvrdnje koje opisuju pojam algoritma u programiranju:
  429. svaki zadatak koji se zadaje računaru u vidu poruke – programa, sadrži neki algoritam
  430. model koji definira akcije koje treba izvršiti po tačno utvrđenom redoslijedu i u konačnom vremenu
  431. Rezultat = 10
  432. Rezultat = 8
  433. Navedene naredbe se izvršavaju sekvencijalno?
  434. Sekvencijalno?
  435. Sekvencijalno?
  436. Unutar while petlje ili unutar uvjeta nužno je da se nalazi naredba koja će promijeniti vrijednost varijabli čije se vrijednosti unutar uvjeta provjeravaju.
  437. 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.
  438. int i;
  439. float a=3.2654;
  440. i=a;
  441. cout<<i;
  442. ?
  443. U smislu kompjuterskog programiranja može se reći da tip podatka određuju sljedeće stavke:
  444. skup vrijednosti koje podatak može imati
  445. memorijski prostor potreban za smještanje podatka
  446. operacije koje mogu da se vrše nad tim podatkom
  447. ?
  448. Postoje tri osnovne grupe podataka:
  449. ulazni podaci
  450. izlazni podaci
  451. podaci koji nastaju u vrijeme izvršavanja programa (unutrašnji podaci programa)
  452. compile-time errors
  453. link-time errors
  454. run-time errors
  455. Ukoliko na kraju nekog slučaja (case) u switch iskazu ZABORAVITE navesti naredbu break?
  456. Statistka ispita
  457. Većinska prolaznost-OK ali može još mnogo bolje
  458. Count of OCJENA
  459.  
  460. OCJENA
  461. Total
  462. 6
  463. 51
  464. 7
  465. 34
  466. 8
  467. 17
  468. 9
  469. 8
  470. 10
  471. 10
  472. Grand Total
  473. 120
  474. Analiza ispita
  475. “Šablonski” zadaci <–> “Šablonska” rješenja
  476. Najmanje tačnih rješenja – zadatak broj 2
  477. Najviše koristi od zadatka broj 3 koji je nosio najviše bodova
  478. Kretivnost?
  479. Problem solving?
  480. Dobre ideje i nestandardni pristupi - OK
  481. Do kraja semestra
  482. Funkcije
  483. Nizovi
  484. Jednodimenzionalni
  485. Dvodimenzionalni
  486. Čime se rješavaju problemi?
  487. 14. Funkcije
  488. main()
  489. FUNKCIJE
  490. Svaki C++ program mora imati funkciju main.
  491. Izvršavanje programa uvijek počinje funkcijom main.
  492. Bilo koja druga funkcija je potprogram i mora biti pozvana.
  493. FUNKCIJE
  494. pow()
  495. sin()
  496. cos()
  497. ....
  498. FUNKCIJE
  499. U matematici, proces koji, za dati ulaz (određenog tipa), proizvodi jedinstven izlaz naziva se funkcija.
  500. Efekt procesa obrade na računaru može se promatrati kao evaluacija funkcija.
  501. Zato su funkcije najvažnija matematička tema u oblasti kompjuterske obrade.
  502. FUNKCIJE
  503. Funkcija F iz skupa X u skup Y prima ulazne vrijednosti iz skupa D
  504. 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)
  505. Za svaki element x iz D, funkcija F proizvodi jedinstven odgovarajući izlaz F(x).
  506. Ako x nije iz D, F(x) nije definirana.
  507. Za funkciju F skup X je izvorni skup a skup Y ciljni skup.
  508. Skup D je domena funkcije F.
  509. Pišemo F : X -> Y
  510. FUNKCIJE
  511. Zašto upotrebljavamo funkcije?
  512. Raščlanjujemo problem na manje dijelove.
  513. Razlučujemo dijelove koji imaju zajednička svojstva, tj čine cjelinu.
  514. Upotrebljavamo funkcije iz svojih ili drugih biblioteka funkcija i iz drugih programa. Stvaramo vlastite biblioteke funkcija!
  515. Mogućnost poziva istoga programskog modula sa drugim podacima.
  516. FUNKCIJE
  517. U programski jezik C++ je ugrađeno mnoštvo funkcija (smješteno u standardne biblioteke funkcija).
  518. #include <iostream>
  519. #include <cmath>
  520. #include <conio>
  521. #include <iomanip>
  522. #include “naseFunkcije.h”
  523. ?
  524. NEKE MATEMATIČKE FUNKCIJE
  525. abs(x) aritmetička funkcija, koja izračunava apsolutni iznos nekog parametra x(int). Rezultat ima isti tip kao i parametar.
  526. atan(x) aritmetička funkcija, koja izračunava arkus tangens nekog parametra x(double). Rezultat ima tip double. Rezultat je dat u stupnjevima.
  527. cos(x) aritmetička funkcija, koja izračunava (realnu) vrijednost kosinusne funkcije nekog parametra x(double). Parametar x se je u stupnjevima.
  528. exp(x) aritmetička funkcija, koja izračunava vrijednost eksponencijalne funkcije. Parametar x je tipa double. Rezultat je tip double.
  529. sin, log, log10, pow, sqrt......
  530. OSNOVNI ELEMENTI FUNKCIJE
  531. Program izrađen u programskom jeziku C++ sastoji se, uglavnom, od funkcija koje mogu biti:
  532. Funkcije, koje rezultate daju kroz listu parametara. Definiraju se i deklariraju kao tip void.
  533. Funkcije, koje rezultat daju preko svoga imena, imaju tip "zadane vrijednosti".
  534. TIP FUNKCIJE
  535. tip_podatka imeFunkcije (argumenti)
  536. Npr.
  537. int sabiranje(int a, intb)
  538. {
  539. ....
  540. }
  541. TIP FUNKCIJE
  542. void sabiranje()
  543. int oduzimanje()
  544. float dijeljenje()
  545. char izborSlova()
  546. VOID
  547. int a=2,b=3;
  548. void sabiranje()
  549. {
  550. int c;
  551. c = a+b;
  552. a++;
  553. cout<< "Rezultat sabiranja je: "<<c<<endl;
  554. cout<<a<<endl;
  555. }
  556. void main()
  557. {
  558. sabiranje();
  559. cout<<a<<endl;
  560. system("pause");
  561. //return 0; // ne treba return
  562. }
  563. INT, DOUBLE, FLOAT....
  564. int a=5,b=3;
  565. int oduzimanje()
  566. {
  567. int c;
  568. c = a-b;
  569. //cout<< "Rezultat oduzimanja je: "<<c<<endl;
  570. return c;
  571. }
  572. void main()
  573. {
  574. int rez;
  575. rez=oduzimanje();
  576. cout<< "Rezultat oduzimanja je: "<<rez<<endl;
  577. system("pause");
  578. }
  579. Variable scope (područne, obim)
  580. Voditi racuna da se ne koriste varijable koje funkcija “ne vidi”,
  581. Analogija sa petljama,
  582. Varijable sa stanovišta “scope” djelimo na:
  583. Lokalne varijable – unutar jedne petlje, bloka ili funkcije
  584. Globalne varijable – deklarisane van svih funkcija
  585. Deklariranje i definiranje funkcija
  586. Deklariranjem funkcije saopćava se ostalom dijelu programa da u tom programu postoji funkcija sa navedenim imenom.
  587. Definiranjem funkcije se utvrđuje, šta funkcija radi.
  588. DEKLARACIJA (PROTOTIP) FUNKCIJE
  589. DEFINICIJA FUNKCIJA
  590. Deklaracija i Definicija
  591. int a=5,b=3;
  592. int mnozenje(); //deklaracija
  593. void main()
  594. {
  595. int rez;
  596. rez=mnozenje();
  597. cout<< "Rezultat mnozenja je: "<<rez<<endl;
  598. system("pause");
  599. }
  600. int mnozenje() //definicja
  601. {
  602. int c;
  603. c = a*b;
  604. //cout<< "Rezultat mnozenja je: "<<c<<endl;
  605. return c;
  606. }
  607. Poziv funkcije
  608. Poziv void funkcije,
  609. sabiranje();
  610. Poziv funkcije koja vraca podatke.
  611. rez=mnozenje();
  612. Parametri funkcije
  613. Argument (actual parameter) - Aktualni parametri su oni parametri, koji pri pozivu funkcije stoje u listi parametara i njihova aktualna vrijednost je poznata.
  614. Parametar (formal parameter) - Formalni parametri stoje u zaglavlju (dio definicije funkcije) pozvane funkcije i prije poziva ove funkcije nije im dodijeljena vrijednost.
  615. int povrs_pravoug(int stranica1, int stranica2); //Formalni parametri
  616. void main()
  617. {
  618. int strA =5, strB=4;
  619. rez=povrs_pravoug(strA, strB); //Aktualni parametri
  620. cout<< "Povrsina pravougaonika je: “<<rez<<endl;
  621. system("pause");
  622. {
  623. int povrs_pravoug(int stranica1, int stranica2)
  624. {
  625. return stranica1*stranica2;
  626. }
  627. Prije poziva funkcije u programu, kompajler mora obraditi ili deklaraciju (prototip) funkcije ili njenu definiciju (zaglavlje i tijelo funkcije) !
  628. Poziv i izvršenje
  629. Za pozvanu funkciju:
  630. Određuje se privremeni memorijski prostor
  631. za vrijednosti njenih parametara i bilo koju lokalnu varijablu,
  632. za ime funkcije ako vrijednost koju funkcija vraća nije tipa void.
  633. 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:
  634. return iskaz (sa ili bez vraćene vrijednosti) ili
  635. zatvorena vitičasta zagrada tijela funkcije.
  636. Tada se kontrola izvršavanja programa prenosi ponovo u programski blok - na mjesto odakle je funkcija pozvana.
  637. Vrste poziva funkcije
  638. U smislu proslijeđivanja argumenata razlikujemo pozive funkcije:
  639. Call by value (poziv po vrijednosti)
  640. Call by reference (poziv po referenci)
  641. Poziv po vrijednosti
  642. Prijenos parametara po vrijednosti – formalni parametar prima kopiju vrijednosti argumenata koja im se prenosi.
  643. Kao posljedica toga, ako funkcija napravi bilo kakvu promjenu na parametrima ovo neće promijeniti vrijednosti argumenta.
  644. - slijedi detaljniji prikaz na primjeru -
  645. vrijednost
  646. in1
  647. adresa
  648. vrijednost
  649. in2
  650. adresa
  651. Varijabla in1 u memoriji
  652. Varijabla in2 u memoriji
  653. Variajble in1 i in2 upotrijebićemo kao parametre funkcije:
  654. void fff(int in1, int in2);
  655. void fff(int in1, int &in2);
  656. Parametri po vrijednosti
  657. Parametar po vrijednosti
  658. Parametar po referenci
  659. Ili izlazni parametar
  660. & je adresni operator – funkcija fff “zna” memorijsku adresu varijable in2
  661. #include <iostream>
  662. using namespace std;
  663. void fff(int in1, int in2);
  664. int main()
  665. {
  666. int brojac = 7, indeks = 12;
  667. cout << "vrijednosti su ";
  668. cout<<"\t"<<brojac<<"\t"<<indeks<<endl;
  669. fff(brojac, indeks);
  670. cout <<"vrijednosti su ";
  671. cout<<"\t"<<brojac<<"\t"<<indeks<<endl;
  672. return 0;
  673. }
  674. //definicija funkcije
  675. void fff(int in1, int in2)
  676. {
  677. in1 = in1 + 100;
  678. in2 = in2 + 100;
  679. cout <<"vrijednosti su ";
  680. cout<<"\t"<<in1<<"\t"<<in2<<endl;
  681. }
  682. Poziv funkcije po vrijednosti :
  683. Funkciji fff se, kod poziva, daju kopije vrijednosti (7, 12)
  684. Prikazujemo vrijednosti in1 i in2:
  685. -prije poziva funkcije fff
  686. -iz funkcije fff
  687. -nakon poziva funkcije fff
  688. 7
  689. in1
  690. Adresa 1
  691. 12
  692. in2
  693. Adresa 2
  694. fff(brojac, indeks);
  695. Adresa (poziva)
  696. in1
  697. in2
  698. //definicija funkcije
  699. void fff(int in1, int in2)
  700. {
  701. in1 = in1 + 100;
  702. in2 = in2 + 100;
  703. cout <<"vrijednosti su ";
  704. cout<<"\t"<<in1<<"\t"<<in2<<endl;
  705. }
  706. Adresa (poziva)
  707. 7
  708. 12
  709. 107
  710. 112
  711. 7
  712. in1
  713. Adresa 1
  714. 12
  715. in2
  716. Adresa 2
  717. 7
  718. 12
  719. Adresa (poziva)
  720. (in1 = in1 + 100) je 107
  721. (in2 = in2 + 100) je 112
  722. in1
  723. in2
  724. //definicija funkcije
  725. void fff(int in1, int in2)
  726. {
  727. in1 = in1 + 100;
  728. in2 = in2 + 100;
  729. cout <<"vrijednosti su ";
  730. cout<<"\t"<<in1<<"\t"<<in2<<endl;
  731. }
  732. Adresa (poziva)
  733. #include <iostream>
  734. using namespace std;
  735. void fff(int in1, int in2);
  736. int main()
  737. {
  738. int brojac = 7, indeks = 12;
  739. cout << "vrijednosti su ";
  740. cout<<"\t"<<brojac<<"\t"<<indeks<<endl;
  741. fff(brojac, indeks);
  742. cout <<"vrijednosti su ";
  743. cout<<"\t"<<brojac<<"\t"<<indeks<<endl;
  744. return 0;
  745. }
  746. Poziv po referenci
  747. Proslijeđuje se adresa memorijske lokacije na kojoj je zapisana varijabla
  748. Sve što funkcija uradi sa proslijeđenom varijablom primjeni se upravo na tu varijablu na njenoj adresi a ne na kopiju varijable
  749. #include <iostream>
  750. using namespace std;
  751. void fff(int in1, int &in2);
  752. int main()
  753. {
  754. int brojac = 7, indeks = 12;
  755. cout << "vrijednosti su ";
  756. cout<<"\t"<<brojac<<"\t"<<indeks<<endl;
  757. fff(brojac, indeks);
  758. cout <<"vrijednosti su ";
  759. cout<<"\t"<<brojac<<"\t"<<indeks<<endl;
  760. return 0;
  761. }
  762. //definicija funkcije
  763. void fff(int in1, int &in2)
  764. {
  765. in1 = in1 + 100;
  766. in2 = in2 + 100;
  767. cout <<"vrijednosti su ";
  768. cout<<"\t"<<in1<<"\t"<<in2<<endl;
  769. }
  770. Poziv funkcije po referenci :
  771. Funkciji fff se, kod poziva, daje kopija vrijednosti 7 za parametar po vrijednosti a za referentni parametar funkcija fff “zna” adresu.
  772. int in1 parametar po vrijednosti
  773. int &in2 parametar po refrenci
  774. 7
  775. in1
  776. Adresa 1
  777. 12
  778. in2
  779. Adresa 2
  780. fff(brojac, indeks);
  781. Adresa (poziva iz main)
  782. in1
  783. //definicija funkcije
  784. void fff(int in1, int &in2)
  785. {
  786. in1 = in1 + 100;
  787. in2 = in2 + 100;
  788. cout <<"vrijednosti su ";
  789. cout<<"\t"<<in1<<"\t"<<in2<<endl;
  790. }
  791. Adresa (poziva)
  792. 7
  793. 107
  794. 112
  795. 7
  796. in1
  797. Adresa 1
  798. 12
  799. in2
  800. Adresa 2
  801. 7
  802. Adresa (poziva iz main)
  803. (in1 = in1 + 100) je 107
  804. in1
  805. //definicija funkcije
  806. void fff(int in1, int &in2)
  807. {
  808. in1 = in1 + 100;
  809. in2 = in2 + 100;
  810. cout <<"vrijednosti su ";
  811. cout<<"\t"<<in1<<"\t"<<in2<<endl;
  812. }
  813. Adresa (poziva)
  814. #include <iostream>
  815. using namespace std;
  816. void fff(int in1, int &in2);
  817. int main()
  818. {
  819. int brojac = 7, indeks = 12;
  820. cout << "vrijednosti su ";
  821. cout<<"\t"<<brojac<<"\t"<<indeks<<endl;
  822. fff(brojac, indeks);
  823. cout <<"vrijednosti su ";
  824. cout<<"\t"<<brojac<<"\t"<<indeks<<endl;
  825. return 0;
  826. }
  827. 112
  828. #include <iostream>
  829. using namespace std;
  830. void fff(int &in1, int &in2);
  831. int main()
  832. {
  833. int brojac = 7, indeks = 12;
  834. cout << "vrijednosti su ";
  835. cout<<"\t"<<brojac<<"\t"<<indeks<<endl;
  836. fff(brojac, indeks);
  837. cout <<"vrijednosti su ";
  838. cout<<"\t"<<brojac<<"\t"<<indeks<<endl;
  839. return 0;
  840. }
  841. //definicija funkcije
  842. void fff(int &in1, int &in2)
  843. {
  844. in1 = in1 + 100;
  845. in2 = in2 + 100;
  846. cout <<"vrijednosti su ";
  847. cout<<"\t"<<in1<<"\t"<<in2<<endl;
  848. }
  849. Poziv funkcije po referenci :
  850. Kod poziva, ne daju se kopije parametara __za referentne parametre funkcija fff “zna” adrese.
  851. int &in1 parametar po referenci
  852. int &in2 parametar po refrenci
  853. 7
  854. in1
  855. Adresa 1
  856. 12
  857. in2
  858. Adresa 2
  859. fff(brojac, indeks);
  860. Adresa (poziva iz main)
  861. in1
  862. //definicija funkcije
  863. void fff(int &in1, int &in2)
  864. {
  865. in1 = in1 + 100;
  866. in2 = in2 + 100;
  867. cout <<"vrijednosti su ";
  868. cout<<"\t"<<in1<<"\t"<<in2<<endl;
  869. }
  870. Adresa (poziva)
  871. 112
  872. 107
  873. 7
  874. in1
  875. Adresa 1
  876. 12
  877. in2
  878. Adresa 2
  879. Adresa (poziva iz main)
  880. //definicija funkcije
  881. void fff(int &in1, int &in2)
  882. {
  883. in1 = in1 + 100;
  884. in2 = in2 + 100;
  885. cout <<"vrijednosti iz funkcije su ";
  886. cout<<"\t"<<in1<<"\t"<<in2<<endl;
  887. }
  888. Adresa (poziva)
  889. #include <iostream>
  890. using namespace std;
  891. void fff(int &in1, int &in2);
  892. int main()
  893. {
  894. int brojac = 7, indeks = 12;
  895. cout << "vrijednosti prije poziva funkcije su ";
  896. cout<<"\t"<<brojac<<"\t"<<indeks<<endl;
  897. fff(brojac, indeks);
  898. cout <<"vrijednosti nakon poziva funkcije su ";
  899. cout<<"\t"<<brojac<<"\t"<<indeks<<endl;
  900. return 0;
  901. }
  902. 112
  903. 107
  904. Grupisanje funkcija u bibliotekama
  905. Lakše održavanja
  906. Preglednost code-a
  907. Ponovno korištenje
  908. Biblioteke
  909. #include <iostram>
  910. #include “mojeFunkcije.h” //mora biti u istom direktoriju
  911. mojeFunkcije.h i mojeFunkcije.cpp
  912. I u main.cpp i u mojeFunkcije.cpp moraju biti uključene sve ostale potrebne biblioteke.
  913. Header file mojeFunkcije.h
  914. #ifndef MOJEFUNKCIJE_H
  915. #define MOJEFUNCIJE_H
  916. int neka_moja_fcija(int a); //Deklaracije funkcija....
  917. int neka_druga_moja_fcija(int a);
  918. #endif
  919. Source file mojeFunkcije.cpp
  920. #include <iostream>
  921. #include “mojeFunkcije.h”
  922. int neka_moja_fcija(int a)
  923. {
  924. //Linije code-a funkcije
  925. }
  926. int neka_druga_moja_fcija(int a)
  927. {
  928. //Linije code-a funkcije
  929. }
  930. main.cpp
  931. #include <iostream>
  932. #include “mojeFunkcije.h”
  933. void main()
  934. {
  935. int a, b=3;
  936. a=neka_moja_fcija(b); //poziv funkcije iz biblioteke
  937. }
  938. Pitanja?
na vrh