arhivadlwms

DokumentPredavanja Elmir Babović

PR I - P6

Tekst dokumenta343 redova
  1. ProgramiranjeI_sylabus.doc
  2. Programiranje I::Predavanja
  3. https://dl.fit.ba/
  4. 1
  5. Fakultet informacijskih tehnologija
  6. indira@fit.ba
  7. Datum: 2.12.2015.
  8. FUNKCIJE
  9. UVOD
  10. Do sada smo razmatrali programe, koji su se sastojali iz samo jedne programske jedinice
  11. odnosno iz glavne funkcije, koja je označena sa main(). Ovaj postupak je pogodan za
  12. rješavanje jednostavnijih zadataka. Po pravilu se, kod rješavanja zadataka, nastoji cijeli
  13. problem rastaviti na više manjih problema, koji su lakši za riješiti. Rezultat ove podjele u
  14. jednostavnije korake je nastanak programa sa modularnom strukturom, pri čemu je u
  15. svakom modulu implementirano rješenje jednoga problema ili dijela problema.
  16. Potprogrami u programskom jeziku C++ su definirani kao funkcije. Oni su dio
  17. hijerarhijski ustanovljene strukture na čijem početku stoji glavni program.
  18. Primjena funkcija ima mnogo prednosti:
  19. Složeniji programi se mogu modularno graditi. Svaki modul obuhvata samo dio
  20. problema, koji je lakše riješiti od cijelog problema. Na ovaj način se cijeli zadatak
  21. pojednostavljuje. U programiranju, primjenom funkcija, povećava se preglednost
  22. programa. Svaka funkcija se može posebno kreirati i testirati. Ovakav pristup olakšava
  23. kasniju potragu za greškama, jer je mala programska jedinica uvijek preglednija od
  24. kompleksnog programa.
  25. Dijelovi programa sa instrukcijama, koji se u programu susreću na različitim mjestima i
  26. sa različitim vrijednostima, mogu se definirati kao funkcija koja se poziva gdje je to
  27. potrebno. Funkcije, koje rješavaju određene tipove problema, mogu se koristiti i kod
  28. drugih programa (reusing).
  29. Dakle, svaki zadatak lakše ćemo riješiti ako ga podijelimo na manje zadatke
  30. (podzadatke). Te "podzadatke" u jeziku C++ obavljaju funkcije.
  31. Zašto upotrebljavamo funkcije?
  32. Raščlanjujemo problem na manje dijelove.
  33. Razlučujemo dijelove koji imaju zajednička svojstva, tj čine cjelinu.
  34. Upotrebljavamo funkcije iz svojih ili drugih biblioteka funkcija i iz drugih programa.
  35. Stvaramo vlastite biblioteke funkcija!
  36. Mogućnost poziv istoga programskog modula sa drugim podacima.
  37. Matematički pojam funkcije
  38. "Ja ću vam dati jedan broj. Vi trebate tom broju dodati 2 i produkt pomnožiti sa danim
  39. brojem" . Slične instrukcije možete dati i kompjuteru izražene na nekom programskom
  40. jeziku.
  41. Tada očekujete da broj x date, da mašina izračuna x + 2, zatim (x + 2) * x. Za dati ulaz
  42. x mašina će proizvesti jedinstven izlaz (broj (x + 2) * x).
  43. ProgramiranjeI_sylabus.doc
  44. Programiranje I::Predavanja
  45. https://dl.fit.ba/
  46. 2
  47. Fakultet informacijskih tehnologija
  48. indira@fit.ba
  49. U matematici, proces koji, za dati ulaz (određenog tipa), proizvodi jedinstven
  50. izlaz naziva se funkcija.
  51. Efekt procesa obrade na računaru može se promatrati kao evaluacija funkcija. Zato su
  52. funkcije najvažnija matematička tema u oblasti kompjuterske obrade.
  53. STANDARDNE FUNKCIJE
  54. U programski jezik C++ je ugrađeno mnoštvo funkcija (smješteno u standardne
  55. biblioteke funkcija).
  56. Svaki C ++program, koji koristi standardnu biblioteku mora, na početku, sadržavati:
  57. #include <iostream>
  58. Ovo je preprocesorska naredba za ulaz/izlaz standard. Kao aktualni parametri (sadržaj
  59. unutar zagrada) kod standardnih funkcija mogu se navoditi samo izrazi i varijable. To
  60. znači da poziv funkcije slijedi kao dio aritmetičkog izraza. Matematičke funkcije se
  61. definiraju u okviru biblioteke cmath, i prije njihove upotrebe mora se cmath (datoteka
  62. zaglavlja) "uključit" (include) u naš program.
  63. #include <cmath>
  64. Slijedi kratak pregled nekoliko standardnih funkcija sa kratkim objašnjenjima:
  65. abs(x)aritmetička funkcija, koja izračunava apsolutni iznos nekog parametra
  66. x(int). Rezultat ima isti tip kao i parametar.
  67. atan(x) aritmetička funkcija, koja izračunava arkus tangens nekog parametra
  68. x(double). Rezultat ima tip double. Rezultat je dat u stupnjevima.
  69. cos(x) aritmetička funkcija, koja izračunava (realnu) vrijednost kosinusne funkcije
  70. nekog parametra x(double). Parametar x se je u stupnjevima.
  71. exp(x) aritmetička funkcija, koja izračunava vrijednost eksponencijalne funkcije.
  72. Parametar x je tipa double. Rezultat je tip double.
  73. Funkcija F iz skupa X u skup Y prima ulazne
  74. vrijednosti iz skupa D, gdje svaki element iz
  75. skupa D pripada skupu X a nije nužno da skup D
  76. obuhvata cijeli skup X. Za svaki element (x) iz D,
  77. funkcija F proizvodi jedinstven odgovarajući
  78. izlaz F(x). Ako x nije iz D, F(x) nije definirana. Za
  79. funkciju F skup X je izvorni skup a skup Y ciljni
  80. skup.Skup D je domena funkcije F. Pišemo F : X ->
  81. Y
  82. ProgramiranjeI_sylabus.doc
  83. Programiranje I::Predavanja
  84. https://dl.fit.ba/
  85. 3
  86. Fakultet informacijskih tehnologija
  87. indira@fit.ba
  88. fab(s) aritmetička funkcija, koja izračunava apsolutni iznos nekog parametra
  89. x(double). Rezultat ima isti tip kao i parametar.
  90. log(x) aritmetička funkcija, koja izračunava prirodni logaritam sa bazom e.
  91. Parametar (double) x ima vrijednost nula ako je nula ili negativan.
  92. log10(x) aritmetička funkcija, koja izračunava logaritam po bazi 10. Rezultat ima
  93. tip double.
  94. pow(x,y) aritmetička funkcija, izračunava x na y. Parametri x i y moraju biti tipa
  95. double. Rezultat je jednak nuli, ako je y negativan ili ako su x i y jednaki nuli.
  96. sin(x) aritmetička funkcija, koja izračunava (realnu) vrijednost sinusne funkcije
  97. nekog parametra x(double). Parametar x je u stepenima.
  98. sqrt(x) aritmetička funkcija, koja izračunava (realnu) vrijednost kvadratnog
  99. korjena nekog parametra x(double). Rezultat ima vrijednost nula ako je x
  100. negativan.
  101. Svaki C++ program mora imati funkciju main.
  102. Izvršavanje programa uvijek počinje funkcijom main.
  103. Bilo koja druga funkcija je potprogram i mora biti pozvana.
  104. ProgramiranjeI_sylabus.doc
  105. Programiranje I::Predavanja
  106. https://dl.fit.ba/
  107. 4
  108. Fakultet informacijskih tehnologija
  109. indira@fit.ba
  110. OSNOVNI ELEMENTI FUNKCIJE I UPOTREBA FUNKCIJE
  111. Program izrađen u programskom jeziku C++ sastoji se, uglavnom, od funkcija koje mogu
  112. biti:
  113. Funkcije, koje rezultate daju kroz listu parametara. Definiraju se i deklariraju kao
  114. tip void.
  115. Funkcije, koje rezultat daju preko svoga imena, imaju tip "zadane vrijednosti".
  116. Primjer za ovaj tip funkcije je standardna trigonometrijska funkcija sin(x). Ova
  117. funkcija daje vrijednost sinus x preko svoga imena, stoji na desnoj strani znaka
  118. dodjeljivanja i odgovara funkciji u strogom smislu te riječi.
  119. Primjer:
  120. y = sin(x);
  121. U programskom jeziku C++ postoji razlika između deklariranja i definiranja funkcija:
  122. Deklariranjem funkcije saopćava se ostalom dijelu programa da u tom
  123. programu postoji funkcija sa navedenim imenom.
  124. Definiranjem funkcije se utvrđuje, šta funkcija radi.
  125. ProgramiranjeI_sylabus.doc
  126. Programiranje I::Predavanja
  127. https://dl.fit.ba/
  128. 5
  129. Fakultet informacijskih tehnologija
  130. indira@fit.ba
  131. DEKLARACIJA (PROTOTIP) FUNKCIJE
  132. Sve funkcije, koje se u sklopu jednog programa pozivaju, moraju biti deklarirane .
  133. Osnovna forma deklaracije:
  134. Tip povratne
  135. vrijednosti
  136. Identifikator
  137. Popis
  138. parametara
  139. (
  140. )
  141. ;
  142. Tip
  143. Identifikator
  144. ,
  145. Popis
  146. parametara
  147. - npr. na početku glavnog programa ("glavna funkcija") - main( ).
  148. DEFINICIJA FUNKCIJA
  149. Osnovna forma definicije:
  150. Tip povratne
  151. vrijednosti
  152. Identifikator
  153. Popis
  154. parametara
  155. Izraz
  156. Iskaz
  157. (
  158. )
  159. {
  160. }
  161. Tip vrijednosti koji funkcija vraća ImeFunkcije (Formalni parametri)
  162. {
  163. iskaz;
  164. izraz;
  165. (TipArg1 ImeArg1, TipArg2 ImeArg2,..)
  166. }
  167. Prototip izgleda kao zaglavlje funkcije ali mora završiti sa ; (semicolon)
  168. i njena lista parametara mora sadržavati tip podatka za svaki
  169. parametar.
  170. int Kub( int ); //prototip
  171. ProgramiranjeI_sylabus.doc
  172. Programiranje I::Predavanja
  173. https://dl.fit.ba/
  174. 6
  175. Fakultet informacijskih tehnologija
  176. indira@fit.ba
  177. Na primjer:
  178. Svaka funkcija ima ime kojim se poziva i kroz svoje ime je "definirana". Tip funkcije
  179. može biti ili void ili tip "povratne vrijednosti" o čemu će biti riječi kasnije. Navedeni
  180. parametri u zagradama se koriste kod poziva funkcije. Funkcije u programiranju
  181. međusobno razmjenjuju podatke kroz listu parametara. Potrebno je razumjeti jasnu
  182. razliku između formalnih i aktualnih parametara.
  183. Aktualni parametri su oni parametri, koji pri pozivu funkcije stoje u listi parametara i
  184. njihova aktualna vrijednost je poznata.
  185. Formalni parametri stoje u zaglavlju (dio definicije funkcije) pozvane funkcije i , prije
  186. poziva ove funkcije, nije im pridijeljena vrijednost. To znači da oni samo formalno postoje
  187. i da dobivaju vrijednost kad se ova funkcija pozove iz programa (iz glavne funkcije main
  188. ili iz neke druge funkcije).
  189. Funkcija može biti definirana i unutar glavne (main()) funkcije i tada se naziva inline
  190. funkcija.
  191. POZIV FUNKCIJE
  192. Funkcija se u programskom bloku glavne funkcije ili neke druge funkcije koristi tako da
  193. se poziva imenom (identifikatorom funkcije) i „slanjem“ aktualnih vrijednosti parametara
  194. ili memorijskih adresa parametara. Nakon izvršavanja funkcije (na mjestu gdje je
  195. funkcija definirana), programski blok koji je pozvao funkciju prima povratnu vrijednost
  196. funkcije i koristi je u daljem procesu.
  197. Identifikator
  198. Popis
  199. parametara
  200. (
  201. )
  202. ;
  203. ProgramiranjeI_sylabus.doc
  204. Programiranje I::Predavanja
  205. https://dl.fit.ba/
  206. 7
  207. Fakultet informacijskih tehnologija
  208. indira@fit.ba
  209. U zavisnosti od vrste prenošenja aktualnih parametara na formalne, razlikuju se
  210. dvije vrste poziva funkcije:
  211. 1. call by value (poziv po vrijednosti)
  212. 2. call by reference (poziv po referenci)
  213. Za pozvanu funkciju:
  214. određuje se privremeni memorijski prostor
  215. -
  216. za vrijednosti njenih parametara i bilo koju lokalnu varijablu,
  217. -
  218. za ime funkcije ako vrijednost koju funkcija vraća nije tipa void.
  219. Zatim kontrola toka izvršavanja programa prelazi na prvi iskaz u tijelu funkcije. Iskazi
  220. u tijelu funkcije se izvršavaju sve dok se ne desi nešto od:
  221. return iskaz (sa ili bez vraćene vrijednosti),
  222. ili
  223. zatvorena vitičasta zagrada tijela funkcije.
  224. Tada se kontrola izvršavanja programa prenosi ponovo u programski blok - na mjesto
  225. odakle je funkcija pozvana.
  226. Prije poziva funkcije u programu, kompajler mora
  227. obraditi ili deklaraciju (prototip) funkcije ili njenu
  228. definiciju (zaglavlje i tijelo funkcije) !
na vrh