P. 1
C++ programiranje za srednje škole

C++ programiranje za srednje škole

|Views: 914|Likes:
Published by Mahir Ibreljic

More info:

Published by: Mahir Ibreljic on Mar 09, 2013
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

08/11/2014

pdf

text

original

Sections

  • 1.Općenito o programima i programskim jezicima
  • 1.1.Ljudi i računari
  • 1.2.Podjela programskih jezika
  • 2.2.Osnove faze razvoja programiranja
  • 3.Algoritmi
  • 3.1.Uvod u algoritam
  • 3.4.Grananje
  • 3.5.Petlje
  • 4.Pseudo jezik
  • 4.1.Varijable
  • 4.2.Operatori
  • 4.3.Funkcije
  • 5.Kako započeti?
  • 5.1.MS Visual C++
  • 5.2.Programski paket Dev-C++
  • 6.Uvod u C++
  • 6.1. Proces kompajliranja
  • 6.2.Riječi u C++ programskom jeziku
  • 6.3.Struktura programa
  • 6.4.Varijable
  • 6.5.Memorija
  • 6.7.Komentari
  • 6.8.Imena (identifikatori)
  • Pitanja za utvrĎivanje:
  • 7.Operatori
  • 7.1.Aritmetički operatori
  • 7.2.Relacijski operatori
  • 7.3.Logički operatori
  • 7.4.Bitovni operatori
  • 7.5.Inkrementalni i dekrementalni operatori
  • 7.6.Operatori pridruživanja
  • 7.8.typedef imena
  • 7.9.sizeof operator
  • 7.10.Hijerarhija operatora
  • 8.Naredbe
  • 8.1.Jednostavne i složene naredbe3
  • 8.2.Naredba if
  • 8.3.Naredba switch
  • 8.4.Naredba for
  • 8.5.Naredba while
  • 8.6.Naredba do
  • 9.Funkcije
  • 9.1.Definicija
  • 9.2.Parametri i argumenti
  • 9.3.Globalne i lokalne varijable
  • 9.4.Rekurzivne funkcije
  • 10.1.Jednodimenzionalni niz
  • 10.3.Inicijalizacija niza
  • 10.4.Pristup elementima niza
  • 10.5.Multidimenzionalna polja(nizovi)
  • 11.1.Osnovno o pointerima5
  • 11.2.Dinamička memorija
  • 11.3.Pointeri i polja
  • 11.4.Aritmetika sa pointerima
  • 11.5.Funkcijski pointeri6
  • 12.Datoteke
  • 12.1.Standardna biblioteka fstream
  • 12.2.Otvaranje datoteka
  • 12.3.Zatvaranje datoteka
  • 12.4.Pisanje na datoteke
  • 12.5.Čitanje sa datoteka
  • Pitanja za utvrĎivanje
  • 13.Zbirka Zadataka
  • 14.Rješenja
  • LITERATURA

SADRŽAJ

1. Općenito o programima i programskim jezicima
1.1. Ljudi i računari...................................................................................................................6 1.2. Podjela programskih jezika..................................................................................................7

2. Programski Pristup
2.1. O proceduralnom i neprceduralno programiranju ...............................................................10 2.2. Osn ov e f az e raz voja p rog ramiran ja . .. ... ..... .... ... ... .. . .... . .. ... ... .... ... ... ... .... ... 1 2

3 .Algoritmi
3.1.Uvod u algoritme ..........................................................................................................13 3.2.Dijagram toka ..................................................................................................................14 3.3.Pravolinijske algoritamske strukture.....................................................................................18 3.4.Grananje..........................................................................................................................19 3.5.Petlje...............................................................................................................................23

4. Pseudo Jezik
4.1.Varijable..........................................................................................................................28 4.2. Operatori........................................................................................................................29 4.3.Funkcije...........................................................................................................................33

5 .Kako započeti?
5 . 1.M S Vis ual C++.. .... ... ... ... .... ... ... ... .... ... ... ... . ... ... ... ... .... ... ... ... .... .. . ... ... . ... .3 4 5.2.Programski paket DEV C++..............................................................................................37 Pitanja za utvrĎivanje ......................................................................................................41

6.Uvod u C++
6.1 Proces kompajliranja. .......................................................................................................42 6.2. Riječi u C++ programskom jeziku ......................................................................................44 6.3.Struktura programa...........................................................................................................45 6.4. Varijable .........................................................................................................................47 6.5. Memorija ........................................................................................................................48 6.6. Ulazno/izlazni usmjerivači toka ..........................................................................................49 6.7. Komentari .....................................................................................................................50

C++ programiranje za srednje škole prof.Smajo Mekić

2

6.8. Imena (identifikatori) .......................................................................................................51 6.9. Tipovi podataka ...............................................................................................................52 Pitanja za utvrĎivanje .............................................................................................................55

7.Operatori
7.1 Aritmetički operatori .......................................................................................................56 7.2 Relacijski operatori .....................................................................................................58 7.3 Logički operatori .............................................................................................................59 7.4 Bitovni operatori .............................................................................................................59 7.5 Inkrementalni i dekrementalni operatori .............................................................................59 7.6 Operatori pridruţivanja .....................................................................................................60 7.7 Operator razdvajanja (zarez-operator) ...............................................................................61 7.8 typedef imena ................................................................................................................61 7.9 sizeof operator ...............................................................................................................62 7.10 Hijerarhija operatora ......................................................................................................62 Pitanja za utvrĎivanje ............................................................................................................63

8.Naredbe
8.1 Jednostavne i sloţene naredbe ...........................................................................................64 8.2 Naredba if........................................................................................................................66 8.3 Naredba switch-case .........................................................................................................72 8.4 Naredba for .....................................................................................................................75 8.5 Naredba while . ................................................................................................................78 8.6 Naredba do ......................................................................................................................79 Pitanja za utvrĎivanje .............................................................................................................81

9. Funkcije
C++ programiranje za srednje škole prof.Smajo Mekić 9.1. Definicija ........................................................................................................................81 9.2. Parametri i argumenti ......................................................................................................84 9.3. Globalne i lokalne varijable ...............................................................................................85 9.4 Rekurzivne funkcije ..........................................................................................................86 Pitanja za utvrĎivanje ..........................................................................................................87

10. Polja (Arrays ),nizovi
10.1. Jednodimenzionalni niz ...................................................................................................87 10.2. Deklaracija niza..............................................................................................................88 10.3.Inicijalizacija niza............................................................................................................89 10.4.Pristup elementima niza...................................................................................................91 10.5.Multidimenzionalna polja(nizovi)........................................................................................94 Pitanja za utvrĎivanje ........................................................................................................96

3

11. Pointeri
11.1. Osnovno o pointerima ....................................................................................................97 11.2. Dinamička memorija ......................................................................................................97 11.3. Pointeri i polja ...............................................................................................................99 11.4. Aritmetika sa pointerima .................................................................................................99 11.5. Funkcijski pointeri ........................................................................................................101 Pitanja za utvrĎivanje ........................................................................................................102

12. Datoteke
12.1. Standardna biblioteka fstream .......................................................................................103 12.2. Otvaranje datoteka ......................................................................................................103 12.3. Zatvaranje datoteka .....................................................................................................107 12.4. Pisanje na datoteke ......................................................................................................108 12.5. Čitanje sa datoteka ......................................................................................................110 Pitanja za utvrĎivanje ........................................................................................................113

13.Zbirka zadataka

113

14.Rješenja

123
C++ programiranje za srednje škole prof.Smajo Mekić

Literatura

157

4

Kratka biografija autora Dipl.prof.Informatike Smajo(Irfana)Mekić- zv.Smayson- roĎen 01.01.1972.u G.Bukovici Travnik; Srednju tehničku školu završio u Zenici,Nastavnički fakultet završio na Univerzitetu „Đemal Bijedić“ u Mostaru,nastavio studij na Panevropskom Univerzitetu „Apeiron“ na FIT-u(Fakultet Informacionih Tehnologija) u Banjaluci smjer nastavnička informatiku gdje dobiva zvanje Diplomirani profesor Informatike,Specijalistički studio završio na istom fakultetu,a Diplomski/Specijalistički rad na temu „PoreĎenje Pascala i C++ u nastavnom procesu“ odbranio pred akademikom dr.Zoran.Ţ.Avramović dipl.ing.elektrotehnike. Oţenjen, otac četiri sina,trenutno nastanjen na Kalibunaru-Travnik, uposlen u Mješovitim srednjim školama Busovača i Vitez.

Rječ autora Autor ove knjige je pokušao na osnovu jako puno literature, dostupne u raznim formatima i na mnogim jezicima, na temu C++ programiranje , da u skladu sa nastavnim planom i programom za srednje škole izdvoji i obradi osnovne teme iz ove oblasti.Teme su uraĎene uz poštovanje pedagoških nastavni principa.Cilj ove knjige je lakše shvatanje predviĎenog gradiva ,postupno rješavanja zadataka ,stjecanje rutina,navika,upornosti,preciznosti,analize i sinteze....Ovu knjigu prati projekat u html-u“ C++ programiranje za srednje škole“ na www.mssbusovaca.com.ba. ,takoĎer je u pripremi muldimedijalni DVD koji prati ovu knjigu. UraĎeni materijal moţe biti od koristi za sve one koji ţele da načine prve korake u programiranju u programskom jeziku C++.Knjiga predstavlja radnu verziju i podloţna je izmjenama,dopunama te se kao takva koristi interno i nije planirana komercijalizacija i umnoţavanje.Zbirka riješenih zadataka ima za cilj da motiviše učenike za rad analizu,sintezu,da pokušaju da urade rješenja na drugi način. Autor je naveo korištene izvore za ovaj projekat,izvore nekih od tema je naveo kroz footnote, tako da je u potpunosti zaštitio autorska prava navedene literature. Autor zahvaljuje menadţmentima Mješovite srednje škole Busovača, direktoru Admiru Hodţiću i menadţmentu Mješovite srednje škole Vitez direktor Hrustić Seadu na razumjevanju i podršci za ovaj projekat. Neke ideje,sugestije i primjedbe koje su ugraĎene u ovu knjigu predloţili su moji dragi prijatelji; Dipl.prof. informatike Almin Halilović, Prof.informatike i matematike Junuz Junuzović, Dipl.ing.mašinstva prof.Šabanović Latif, Prof.Haskić Selvedin.

C++ programiranje za srednje škole prof.Smajo Mekić

5

1.Općenito o programima i programskim jezicima
S programiranjem se danas susrećete posvuda - bilo da programirate snimanje na videorekarderu, koristite mašinu za pranje veša, vozite neki noviji automobil, koristite mobitel ili jednostavno programirate na računaru. Zahvaljujući programiranju svijet je danas podesiv i prilagodljiv.I zato je dobro znati programirati. U ovom kratkom pregledu nećemo odmah uskočiti u programiranje sistema za nadzor svemirske letjelice, ali ćete razumjeti na čemu se programiranje zasniva i kako funkcionira. 1 .1 . Ljud i i ra č unar i Prosječni računar baš i nije pametna naprava . Ono nema mogućnost samostalnog odlučivanja, zaključivanja , nema ono po čemu se ljudi razlikuju od svih ostalih - pamet i iskustvo.Da bismo natjerali računar da radi ono što mi ţelimo, moramo ga tome naučiti. Budući da računari ne znaju samostalno misliti , programeri moraju u njih ugraditi upustva koji im govore što trebaju raditi.U situaciji sličnoj programerovoj nalazi se roditelj kada svoje dijete ţeli naučiti jesti kašikom.Dijete je u ovom slučaju, slično kao i računar , "prazna ploča" - treba ga nučiti i najsitnijim detaljima. Dijete prvo mora podići kašiku (ali da ne prospe njen sadrţaj), prinijeti je ustima, paziti da u kašici juha nije prevruća , otvoriti usta, staviti kašiku u usta (a ne pored usta), progutati sadrţaj kašike (ali ne i kašiku). Zapravo, ovo uopće nije jednostavan postupak.Tako je i s računarima. Njih takoĎer treba naučiti da rade ono što bismo mi ţeljeli. No ovdje je problem malo veći nego s djetetom jer računari komuniciraju na razne načine - koriste, tj. razumiju različite računarske jezike. R ačun ari ok o n as Danas se računar nalazi u svakom novijem automobilu,u svakom mobitelu, čak i u najobičnijem televizoru ili videorekorderu. Svi ti ureĎaji u sebi sadrţe računar koji ima je potrebno naloţiti što da rade. Tako će se televizor sam isključiti nakon nekog vremena,ako mu vi tako zadate, videorekorder će u 20:15 snimiti utakmicu na drugom programu u trajanju od 120 minuta, mašina za pranje rublja će uključiti program za pranje osjetljivog rublja,a automobil će upotrijebiti neki od ugraĎenih sistema za sprječavanje zanošenja na cesti. Spomenimo i obične lične računare. Oni su sposobnI obavljati mnogo kompliciraniji skup radnji nego računari ugraĎenI u npr. kućanske ureĎaje. Unatoč tome, svi računari imaju jednu zajedničku činjenicu - ne mogu samostalno zaključivati i donositi odluke. Zato im programer treba reći šta da rade. Programer to čini koristeći poseban programski jezik i posebne naredbe pomoću kojih komunicira s računarom i opisuje mu što i kako treba raditi .Računarski program je skup naredbi koji govori računaru na koji način da obavi određeni zadatak. Tekst programa koji je čitljiv programeru i korisniku zove se izvorni kod programa, dok je izvršna verzija programa binarna, i moţe je čitati i izvoditi samo računar. Programski jezik je skup leksičkih, sintaksnih i semantičkih pravila koja uobličuju strogu strukturu pisanja izvornog koda. Svaki program sastoji se od naredbi. Naredbe se sastoje, u ovisnosti o programskom jeziku, od izraza, konstanti, identifikatora i poziva.Općenito postoji više nivoa programskih jezika, i podijeljeni su u generacije jezika. Do danas postoje jezici od prve do pete generacije, no to nije jedina podjela programskih jezika, oni se takoĎer razlikuju po namjeni, načinu izvršavanja, strukturiranosti i proceduralnosti.1 1 .2 .Pod je l a pro gram sk ih jez i ka

1

Preuzeto i obrađeno iz knjige Informatika i računarstvo

C++ programiranje za srednje škole prof.Smajo Mekić

6

temelje se na funkcijama i listama (Lisp. LOGO) Ciljno orijentirani jezici – temelje se na izvršavanju upita.0) Hibridni jezici – u ovu grupu spadaju . i vrlo su nečitljivi. ML. tj. dok način na koji se on izvršava ostaje sakriven (Sql. Kasnije su dodani simbolični nazivi naredbama. Podjela programskih jezika po generacijama generacijsku podjelu danas smatraju najbitnijom. Prolog) Objektno orijentirani jezici – temelje se na manipulaciji objektima (VB 6.NET jezici i C++ P o st ruk tu ri ran os ti jez ic i mog u b it i s truk tu riran i i n es t ruktu riran i . Primjer programa u mašinskom kodu: C++ programiranje za srednje škole prof. te skokovima (Ada. Programi su napisani u binarnim kodovima. P o p roc edu raln osti mogu b it i p roc edu raln i i n ep roc edu ralni .Smajo Mekić 7 . FORTRAN. Pascal) Funkcionalni jezici – ne postoji pridruţivanje. kodovima naredbi koje izvodi direktno sam procesor.Pod je la pr ogram sk i h jez ika po namje ni :  Programski jezici za numeričke probleme  Programski jezici za poslovne probleme  Programski jezici temeljeni na listama i nizovima  Višenamjenski jezici (u ovu skupinu spadaju . no skokovi su bili izvedeni prema hardverskim adresama koje su zadane brojem.NET jezici) Pod je la po na či nu i zvoĎe n ja :      Imperativni – postiţu funkcionalnost pridruţivanjem vrijednosti i njihovim ispitivanjem. C. Jezici p rve ge nera ci je temelje se na mašinskom jeziku.

Primjer jezika pisanog u jeziku treće generaci: 8 . D rug u ge ne rac i ju programskih jezika predstavljaju simbolički programski jezici ili Assembli. Uneseno je razrješivanje izraza i prevodioc vrši niz analiza koje olakšavaju pisanje programa i ispravljanja grešaka. Primjer programa pisanog u jeziku druge generacije: C++ programiranje za srednje škole prof. i često jedna naredba jezika ovog nivoa predstavlja mnogo naredbi jezika niţeg nivoa. tj. program se izvodi putem pozivanja procedura. Naredba 001011 predstavlja se mnemonikom MOV. osim samo jednostavnog dodjeljivanja vrijednosti i njihovog ispitivanja. Ovakvi jezici prevode se u jezike niţih nivoa da bi se mogli izvoditi. U ovu grupu pripadaju jezici C. Od jezika prve generacije razlikuje se u tome što su uvedena simbolička imena adresa (labeli) i jednostavniji pristup adresiranjima putem mnemoničkih kodova pojedinih naredbi.Smajo Mekić Programski jezici t r eć e ge ne ra ci je temelje se na proceduralnoj paradigmi. Mnenonik ili mnemonički kod je simbolički prikaz binarne naredbe. Za prevoĎenje jezika višeg nivoa jezike niţeg nivoa koriste se programi zvani p revod ioci ili comp il er i . jer to je jedini oblik programa koji računar razumije. Pascal i drugi.Zanimljivo je što se i danas svaki program na kraju svodi na ovaj nivo. npr.

Smajo Mekić 9 . tako da je većina napornih i dugotrajnih postupaka automatizirana i pojednostavljena. te raznim generatorima koda i korisničkim interfejsom. Java. Ovi jezici su obično kombinacija raznih alata.Jezici če tvr te g enera c i je temelje se uglavnom na objektno orijentiranoj paradigmi. U ovu grupu pripadaju . Program napisan u jeziku četvrte generacije predstavlja alat za brzu i jednostavnu izradu svih vrsta aplikacija. Delphi itd. generacije: Jezici p e te ge ne raci je su uglavnom usko specijalizirani jezici koji često kreiraju cijele aplikacije potpuno automatski putem raznih Wizarda i slično. Primjer aplikacije u jeziku 4. Programski pristup C++ programiranje za srednje škole prof. Razvoj ovakvih jezika je u početnoj fazi.NET jezici. 2.

problem moţe podijeliti (dekompozirati) algoritamski ili proceduralno. tj.Smajo Mekić . na primjer. Pristupi su figurativno prikazani na Sl. Ova dva pristupa u dekompoziranju problema– algoritamski i objektno-orijentisani – su dva pristupa koji programeri najčešće koriste. problem se moţe riješiti pomoću "objektno-orijentisanog"pristupa. te na dalje nivoe još specifičnijih zadataka (kao što su "upitaj korisnika na vrijednost depozita" ili "verifikuj unesenu vrijednost kao vaţeću"). O proced ura ln om p r og rami ran ju Za bilo koji problem vjerovatno postoji jednako puno načina da se isti analizira i riješi .1. te "proces stavljanja depozita"). posmatrajući razne cjeline koje utjeću jedne na druge i uzimajući u obzir njihovo meĎusobno djelovanje. zatim dijeli opšti zadatak na naredne nivoe specificiranijih podzadataka (kao što je "proces podizanja novca". u odnosu na sekvencu ili proceduru dogaĎaja koji se moraju desiti. Alternativno.2 .1: Dva pristupa u dekompoziranju problema 10 C++ programiranje za srednje škole prof.1 .2. Algoritamski pristup počinje opštim zadatkom koji treba izvršiti (kao što je "omogućiti korisniku da izvrši opšte bankarske funkcije"). Tako se sa programerskog aspekta. Slika 2.

moţe se naići i na podatak da se algoritamski ili proceduralni pristup programiranju zove "strukturno programiranje".Smajo Mekić .2. Bez obzira na činjenicu da je C++ u osnovi OOP jezik. i to:  Funkcionalna dekompozicija  Algoritamska dekompozicija  Strukturno programiranje  "top-down" programiranje  proceduralno programiranje Bez obzira na naziv. ovaj pristup se fokusira na funkcionalnost programa. koji su koristili neki programeri). Uglavnom se sastoji od jednostavnog niza naredbi gdje je izvedeno grananje putem goto ili slične naredbe. Ne postoje pozivi metoda i funkcija. imajući u vidu da se algoritamski pristup fokusira na procedure koje izvršavaju zadatak. i idući prema dnu ka najspecifičnijim funkcijama. Pošto su novi pristupi omogućili strukturni pristup programiranju (u odnosu na haotični "hack and run" pristup. Ovi jezici su zastarjeli i nedovoljno razvijeni za današnje potrebe. Nep ro ced ura lno p rogram ira n je Ovaj pristup programiranju temelji se na slijednom izvoĎenju nekog programa.2: Algoritamska dekompozicija problema Kada se zadatak prikaţe u obliku dijagrama. Modularno programiranje 11 C++ programiranje za srednje škole prof. a najspecifićniji zadaci se granaju prema dnu. Dakle.Slika 2.2. kao uvod u OOP paradigmu. Razni pravougaonici u takvom "stablu" odgovaraju raznim procedurama i podprocedurama koje treba programirati. ovaj pristup dizajniranju softvera ima različite nazive. kao što je prikazano na Sl. najopštiji zadatak je obićno na vrhu. ovaj tekst se bavi osnovama C++ sintakse u oblasti proceduralnog programiranja. naročito za manje programe ili softverske module.počinjući sa vrha (najopštija funkcija). Algoritamske ili proceduralne metode u dizajniranju softvera su razvijene u kasnim 60tim kako bi se ukazalo na probleme u kojem se u to vrijeme nalazilo opšte stanje u razvijanju softvera. Mnogi programeri i danas koriste ovaj pristup. Neki autori ga zovu i proceduralni pristup.ovaj pristup se ponekad naziva i "top-down" pristup. S obzirom da ovaj pristup počinje na vrhu (opšti zadatak koji treba izvršiti) i dijeli najviši zadatak na naredne nivoe specifičnijih podzadataka prema dnu. a još uvijek je koristan za izradu kvalitetnih softvera .

. najčešći način rješavanja je pomoću tri modela  model podataka  model procesa i  model resursa. i tako pojednostavljuje programe i povećava njihovu čitljivost. vrste. Unesen je pojam dijeljenja koda izmeĎu aplikacija.Modularno programiranje omogućava fragmentaciju koda na module koji mogu biti pisani u različitim datotekama.. MODEL RESURSA MODEL PODATAKA MODEL PROCESA Šema riješavanja problema 12 C++ programiranje za srednje škole prof. na svoj način. tablice.) te strukture podataka (nizovi. dijagram strukture procesa.O snove faze razvo ja prog rami ran ja  Analiza problema  Postavljanje modela  Izrada algoritma  Izrada dijagrama toka  Kodiranje programa  Prevođenje programa  Testiranje programa  Dokumentiranje programa  Eksploatacija programa Svrha programa je rješavanje problema. datoteke. svojstva jedinica računara..)..) koje su potrebne da bi program uredno radio. Model resursa sadrţi definiciju računarskih resursa i njihovih svojstva (operativni sistem. dijagrami akcija. prikazuju slijed odvijanja procesa.).Smajo Mekić . skupovi..2 .. Model podataka sadrţi definiciju podataka (nazive. dimenzije. ograničenja vrijednosti... 2 . vrsta programskog prevodioca.. ali svi oni. Model procesa moţe biti prikazan različitim tehnikama (dijagram toka.

Ako smo dobro napravili algoritam. godine kada je pisao knjigu Kitab al jabr w'al-muqubala da će od toga nastati čak dva uzroka glavobolje učenicima deset-jedanaest vijekova nakon toga. Znati "algoritamski" razmišljati dobro je bez obzira bavili se vi poslije programiranjem ili ne.To su zapravo toliko precizne upute da za njihovo izvršavanje nije potrebna inteligencija. Isto tako pravila rješavanja iz početka prvenstveno matematički problema su iskrivljavanjem imena al Khowarizmi nazivana algoritmi. Algoritam je tačan propis o tome koje operacije nad kojim brojevima i u kom redosljedu treba izvršiti da bi se rješili svi zadaci nekog zadatog tipa.3. a često i postupamo po algoritmima da toga nismo niti svjesni. jer pripada grupi osnovnih pojmova kao što su skup ili tačka.Smajo Mekić Definicija 3.Kao i kod rješavanja zadataka u bilo kom području prvo moramo znati postaviti problem. pojam se proširuje na informatiku. astronom i geograf po imenu Muhammed ibn Musa al Khowarizmi .Dopuniti račun mobitela putem bona.Algoritmi 3. To je ustvari bit priče o algoritmima.ali niste čitali jer to već znate napamet.Neko je rekao da je računar idiot velike brzine.Kada smo to učinili dobili smo program. Definicija 2. Prema korijenu riječi bilo bi pravilno umjesto algoritmi koristiti algorizmi. pojavom računara. U početku algoritmom se nazivaju samo pravila računanja s brojevima.Nekada davno ţivio je u Bagdadu pisac.1. Pokušajte se sjetiti gdje ste zadnji put pročitali neko detaljno uputstvo.Drugi korak je gruba skica rješenja. Da li ste se nedavno našli u situaciji da niste nešto znali napraviti jer su upute bile toliko loše i nerazumljive ili uopće niste imali upute? U svakodnevnom ţivotu smo zapravo stalno u doticaju s algoritmima.Tako mi danas imamo algoritme. matematičar. Definicija 1. C++ programiranje za srednje škole prof. Pri pisanju programa prvo nam mora biti jasno što se zapravo od programa očekuje. Pojam algoritama (dijagram toka) je jedan od najstarijih i najvaţnijih pojomova u matematici. a oni su niz preciznih uputa koje nas korak po korak vode do rješenja nekog problema. Algoritam je tačan opšte razumljiv propis koji definiše proces transformacije početnih podataka u traţeni rezultat. Moţda vam je i bilo u rukama. a program "tjera" računar da radi ono što mi zapravo ţelimo. Evo nekih definicija koje bliţe opisuju algoritam.Drugim riječima.Uvod u algoritam Priču o algoritmima započeti ćemo onako kako počinju sve klasične priče. kasnije i pravila obavljanja ostalih zadataka u matematici.Ili moţda da probamo obrnuto. Njegov al jabr je postala algebra. Precizan opis svih pravila i postupaka potrebnih za postizanje ţeljenog rezultata. No. tada pisanje programa nije ništa drugo negoli prepisivanje algoritma u neki programski jezik. upute moraju biti jednostavne i precizne tako da ih moţe izvršavati i mašina. u XX vjeku. 13 . Teško je da se precizno definiše algoritma.Treći korak je izrada algoritma. tu greškama nije kraj.Vjerojatno nije niti sanjao tamo daleke 852. Ali kako jezik nije nauka nego skup dogovora. Mi put do rješenja moramo toliko rascjepkati i detaljno napisati da bi ga mogao razumjeti i taj "idiot velike brzine".Zašto bi se mi bavili stvarima za koje ne treba nimalo pameti?Zato što izrada algoritma u programiranju prethodi samom pisanju programa. izgleda da je dogovoreno da najčešće greške postaju jezička pravila. a zatim i na druga područja. kao npr.

je osobina algoritma da on mora da vodi ka rješenju zadatka ako su početni podaci iz skupa mogućih podataka. Sljedeći primjer pokazuje korektan i nekorektan sljed dogaĎaja za algoritam kojim ţelimo opisati pokretanje automobila: KOREKTAN SLIJED: √ otključavanje automobila √ sjedanje u automobil √ paljenje motora √ otpuštanje ručne kočnice √ pokretanje automobila √ zaustavljanje NEKOREKTAN SLIJED: 3 . Pri crtanju dijagrama toka potrebno je slijediti odreĎena upustva. Jednom kad je odreĎen ispravan algoritam.je osobina algoritma da se mogu rješavati svi zadaci istog tipa. Značaj dijagrama toka 14 C++ programiranje za srednje škole prof. Primjer algoritma Bilo koji problem se moţe riješiti izvršavanjem serije akcija u odreĎenom redosljedu. Pri tome ta konačnost treba da je ostvarljiva. Akcije koje će se izvršiti i redosljed u kojem će se to odvijati nazivamo algoritam. Iskustvo pokazuje da je najteţi dio riješavanja programerskog problema na računaru upravo razvijanje algoritma za riješenje.je osobina algoritma da za iste početne podatke daje uvjek iste rezultate.Algoritam je precizan. Definicija 4.2 . te koristiti standardne simbole koje je propisao American National Standard Institute.odnosno u konačnom vremenu kaţe da nema rješenja ako problem nema rješenja.  Masovnost.D ijagra m toka (f lowc har t) Dijagram toka je sredstvo za vizualnu prezentaciju toka podataka. Algoritam je konačni skup pravila koja daju redosljed operacija za rješavanje specifičnog problema. Crtanje dijagrama toka je jedna od faza rješavanja problema i uvelike olakšava pisanje programskog koda.  Razumljivost. tj.ureĎeni i nedvosmisleni niz koraka koji u konačnom vremenu vodi do rješavanja problema ako problem ima rješenje. operacija koje se izvode.je osobina algoritma da se algoritam realizuje sa konačno mnogo koraka. -algoritam treba da bude razumljiv ovo je relativni pojam i zavisi od nivoa obrazovanja korisnika.Smajo Mekić       otključavanje automobila sjedanje u automobil paljenje motora pokretanje automobila zaustavljanje otpuštanje ručne kočnice .  Konačnost.  Rezultativnost. da moţe da se realizuje za neko razumno vrijeme. te slijeda (sekvenca) kojim se navedene operacije izvode u informacijskom sistemu. razvoj programa za sam alorgitam je poprilično jednostavan. Najbitnije osobine algoritma su:  Određenost.

Smjernice za crtanje dijagrama toka Za crtanje dijagrama toka koriste se standardni simboli.Smajo Mekić . Osim toga. Jednom kad ste nacrtali dijagram toka postaje jednostavno napisati program u bilo kojem programskom jeziku.dijagram toka igra značajnu ulogu u procesu programiranja jer olakšava razumijevanje logike kompliciranih i opseţnih problema. Dijagram toka olakšava komunikaciju izmeĎu programera i poslovnih ljudi. Neke od često korištenih simbola moţete pogledati u sljedećoj tabeli: 15 C++ programiranje za srednje škole prof. Vrlo često je nemoguće objasniti logiku programa bez dijagrama toka.dijagram toka je neizostavan dio dokumentacije bilo kojeg programa. TakoĎe.Dijagram toka je reprezentacija kojom ilustrirate sekvencu operacija koje je potrebno izvršiti kako bi se došlo do rješenja problema. Dijagram toka se crta u ranoj fazi formuliranja kompjuterskog rješenja.

Dijagram toka treba biti pregledan i jednostavna za pratiti.Dijagram toka treba biti jednoznačan (ne smije kod osobe koja ga gleda izazivati višeznačne konotacije). ali mogu postojati dva ili tri izlaza podataka (jedan za svaki mogući odgovor).Smajo Mekić Kad je u pitanju simbol odluke moţe postojati samo jedan ulaz podataka. Uobičajen smjer toka je s lijeva na desno ili odozgo prema dolje. potrebno je napraviti popis svih zahtijeva. 16 .Za unos i ispis podataka vrlo često se koristi paralelogram Pravila za crtanje dijagrama toka: Da bi ste nacrtali korektan dijagram toka.U dijagramu toka kad je u pitanju simbol za procesiranje moţe postojati samo jedan izlaz Podataka C++ programiranje za srednje škole prof.

kraj) takoder moţe imati samo jedan ulazno. Ukoliko ţelite jasnije opisati podatke ili korake koristite simbol za napomene/komentare (annotation symbol). . Ograničenja • Kompleksnost Ponekad je problem kompleksan. 3 . • Alternative i održavanje( U slučaju potrebe za alternativnim rješenjima vrlo često je neophodno dijagram toka nacrtati ponovno (iz početka). pa je i dijagram toka kojim ga pokušavate predstaviti kompleksan i „nezgrapan“.Smajo Mekić Ukoliko je dijagram toka kompleksan bolje je koristiti simbole konektora kako bi ste reducirati broj linija toka. Vodite računa da vam dijagram toka ima logičan početak i kraj. • Efikasno kodiranje( Korektan dijagram toka olakšava pisanje programa (bez obzira u kojem programskom jeziku). • Efikasno održavanje programa( Olakšava odrţavanje programa). odnosno jedan izlazni tok podataka. Pravo linijska a lgor i tam ska s tru kt ura 17 C++ programiranje za srednje škole prof.Terminalni simbol (start. • Otklanjanje grešaka( Dijagram toka olakšava pronalaţenje grešaka).3 . • Efektivna analiza(Uz pomoć dijagrama toka problem se moţe efektivnije analizirati). Izbjegavajte presijecanje (kriţanje) linija. koja moţe sluţiti u različite svrhe). Prednosti Prednosti dijagrama toka su: • Komunikacija(Dijagram toka olakšava komunikaciju svih koji su zainteresirani za rješavanje problema). • Odgovarajuća dokumentacija( Dijagram toka je dio obavezne programske dokumentacije.

Kako na tastaturi nemamo na raspolaganju grčka slova. a zatim dijagram za izračunavanje obima pravougaonika. To je tako jednostavno da nam nije potrebna nikakva priprema i gruba skica rješenja.Iz osnovne škole sjećamo se da je brzina nekog tijela zapravo prijeĎeni put u jedinici vremena. s prijeĎeni put i t vrijeme. C++ programiranje za srednje škole prof. gdje je V brzina. Evo još jednog primjera za izračunavanje obima i površinu kruga. Matematički bismo to zapisali kao V = s / t.Smajo Mekić 18 . Za vježbu: Pokušajmo prema ovom primjeru nacrtati dijagram toka za izračunavanje površine pravougaonika. Isto tako za sada još ne znamo funkciju za kvadriranje pa ćemo formulu za površinu kruga pisati ovako: P = r * r * Pi gdje je r * r zapravo r2. Moţemo odmah raditi algoritam. našu formulu za izračunavanje obima pisati ćemo kao O = 2 * r * Pi.

Za vježbu: Po uzoru na obim i površinu kruga. Ako se na računaru dogodi situacija da dijelimo s nulom program će nam izbaciti grešku. Obično se u gornji vrh upiše upitnik i u sredini se postavi logički uvjet. Ako je moguće više odgovora tada je to višestruko grananje. u stvarnom ţivotu zbivanja ne teku tako jednostavno kao što su to pravolinijski algoritmi. odnosno T i F (true i false). 3 . Gra nan je Na ţalost. Ako su samo dva izlaza tada je riječ o jednostrukom grananju. Da bismo spriječili "ispadanje" programa. usporediti neke stvari i donijeti odluku kako dalje. razmisliti. C++ programiranje za srednje škole prof. a odgovori na postavljeni logički uvjet mogu biti DA i NE. Ponekad treba stati. pokušajte algoritme za izračunavanje obima i površine pravougaonika spojiti tako da u jednom algoritmu bude i obim i površina pravougaonika. Takovo mjesto u algoritmu zove se grananje. prije izračunavanja brzine provjeriti ćemo da li je upisano vrijeme veće od 0.Smajo Mekić Pr imjer 1 Sjetimo se zadataka iz prethodne lekcije za izračunvanje brzine ako su poznati put i vrijeme: V = s / t. Simbol za grananje je romb.4 . Grananje uvijek ima jedan ulaz i najmanje dva izlaza. 19 .

Preko tastature upisuju se stranice pravouganika a i b.Smajo Mekić 20 .Prepravite dijagram toka iz gornjeg primjera tako da ako upisano vrijeme t nije veće od nula da se na grani NE ispisuje poruka 'Vrijeme mora biti veće od nula' i tek tada odlazi na kraj. Prisjetimo se zadatka obima i površine pravougaonika iz prethodnih vjeţbi koji ćemo još malo proširiti. C++ programiranje za srednje škole prof. Pr im je r 2 Idemo riješiti još jedan zadatak. Treba izračunati obim i površinu pravougaonika te ispisati poruku o tome da li je upisani lik pravouganik ili kvadrat. Pojedine znakove ili nizove znakova kao što je ova poruka u dijagramu toka pišemo unutar navodnika koji ovisno o programskom jeziku koji ćemo poslije koristiti mogu biti jednostruki ili dvostruki.

Pr im je r 3 T reba up is at i c ijeli b roj a i isp is at i poruk u d a li je u p isan i b roj p aran ili n ep aran.Smajo Mekić . Pogledati ćemo lijevu granu koja se izvršava ako je odgovor na logički uvjet NE. Obratite paţnju na konstrukciju ispisa. Ispisujemo poruke i odlazimo na kraj. Imamo dio poruke u navodnicima 'Broj ' pa zatim odvojeno zarezom varijablu a i 21 C++ programiranje za srednje škole prof.Da objasnimo: Nakon što smo upisali stranice a i b. izračunali smo obim O i površinu P pravougaonika. Dobivene rezultate moţemo odmah ispisati. Kraj.Kako ćemo utvrditi da li moţda upisane stranice pripadaju kvadratu? Ako su stranice a i b jednake tada je to kvadrat.

Zato ćemo mi rješenje našeg zadatka malo promijeniti: 3 . broj 9 tada će naredba za ispis 'Broj '.nakon toga opet iza zareza drugi dio poruke u navodnicima 'je neparan. Odgovor je NE. Ali pokušajte sada zamisliti da neko upiše dva ista broja. Kaţu da dobra kontrola podataka pri unosu sprječava čak 90% grešaka koje bi se naknadno u radu programa mogle dogoditi. Zato ljudi koji rade na razvoju informacijskih sistema moraju predvidjeti puno više situacija. Pe tlje 22 C++ programiranje za srednje škole prof. U uvjetu ćemo imati pitanje da li je 7 veće od 7. pa i onih najekstremnijih koje bi se pri radu programa mogle dogoditi.' je neparan' rezultirati porukom koja izgleda kao rečenica u komadu: Broj 9 je neparan.Smajo Mekić . Pr im je r 4 Treba upisati dva broja a i b i ispisati poruku o tome koji je veći.5 .' Ako je upisan npr. Ova poruka baš i nema logike i dokaz je da naš računar od milja zvani „idiot“ velike brzine i ne razmišlja baš puno.a. Stvar je zapravo vrlo jednostavna. Izvršiti će se lijeva grana i kao rezultat dobiti ćemo poruku: Broj 7 je veći od broja 7. npr. 7 i 7.

Dio programa. pa ćemo stvari još malo dodatno zapetljati. već nakon treće upute računaru da ispiše poruku sam odustao jer mi je dosadilo. Treba mu samo zadati da 100 puta ispiše jednu te istu poruku. Ništa jednostavnije. Nekada su nastavnici imali običaj nestašne učenike kaţnjavati tako da su im zadali 100 puta napisati u biljeţnicu: "Neću nikada više brbljati na času informatike!". Tada je odgovor na pitanje u grananju da li je i veći od 100 konačno DA i tada bi program trebao završiti s radom. niz istih naredbi koje se ponavljaju dok je neki uvjet zadovoljen ili dok ne 23 C++ programiranje za srednje škole prof. Morate priznati da ovo rješenje baš i nije nešto s čime bi se mogli pohvaliti. Pokušajmotoodraditina drugačiji način: Nakon što se i 100-ti puta izvrše naredba grananja i naredbe ispod grananja i će postati 101. Evo rješenja: Hm.Smajo Mekić . Mi ćemo se probati izvući tako da to računar odradi umjesto nas. Zamislite da je nama neko dao takvu kaznu.Naslov ove lekcije govori da sve ovo što smo do sada radili nije dovoljno zapetljano.

24 . Idemo još malo zapetljati nešto što znamo računati još od petog osnovne. Za i koji ide od 1 do 100 treba učiniti slijedeće: Varijabli zbir dodati vrijednost varijable i koja je u našem primjeru brojač. a i je 1. Naime. U našem se primjeru ispis poruke i povećanje varijable i za jedan ponavljaju dok i nije postao veći od 100. C++ programiranje za srednje škole prof. naziva se petlja. a za neke se ne zna unaprijed. Broj ponavljanja u petlji za rješenje odreĎenih problema se zna unaprijed. pa prema tome zbir postaje 1. Tako je neko izmislio još jednostavnije rješenje za naš primjer s ispisom 100 poruka. dakle petljom for. I tako 100 puta.postane zadovoljen. Taj red u algoritmu čitali bismo kao: "Za i koji ide od 1 do 100 učini slijedeće:". Za sada ćemo se samo baviti petljama u kojima unaprijed znamo broj ponavljanja. već ovisi o izvršavanju niza naredbi koje se ponavljaju. Koliko vremena vam treba da saberete sve brojeve od 1 do 100? Prava sitnica. U drugom prolazu zbir je 1. a i je 2.Smajo Mekić Svakim prolaskom kroz petlju i se povećava za 1 i njegova vrijednost pridodaje sadrţaju varijable zbir. Neki ljudi tvrde da napredak moţemo zahvaliti samo ljudskoj lijenosti. Prosjek je zbir svih ocjena podijeljen s brojem predmeta. Za naš zbir svih brojeva do 100 koristiti ćemo varijablu zbir koju na početku algoritma moramo postaviti na vrijednost 0. a to je prosjek ocjena. Pravougaonik ispod simbola za početak je naredba for koja je sama po sebi petlja. U prvom prolazu kroz petlju zbir je 0. Varijabla i je u našem primjeru brojač jer svakim prolaskom kroz petlju i postaje i više 1. Zbir postaje 1+2. prije početka ponavljanja. dakle sada je 3. Brojač i kao i uvjet već su sadrţani u naredbi pa ne moramo mi voditi brigu oko odbrojavanja. ljudi će svašta izmisliti samo da ne moraju raditi.

U prvom prolazu kroz petlju upisujemo prvu ocjenu iz imenika.Varijablu zbir koristiti ćemo za zbir svih ocjena i moramo ju na početku postaviti na vrijednost 0. Ovo je bilo prejednostavno da bi bilo stvarno. Neka u prvom razredu imamo 15 predmeta. Po izlazu iz petlje izračunavamo prosjek i ispisujemo ga. trećem ili četvrtom razredu sigurno nećete imati 15 predmeta. a to je bosanski jezik.Smajo Mekić . Već smo napomenuli da se programi pišu čim općenitije tako da bi se mogli primjenjivati za rješavanje čim više sličnih problema. u trećem iz trećeg i tako 15 puta. U stvarnom ţivotu desiti će se da je neko npr. Ocjena se upisuje u varijablu ocjena. Sadrţaj varijable ocjena se dodaje u varijablu zbir. osloboĎen nastave tjelesnog i zdravstvenog odgoja pa ima 14 predmeta. Neko moţda ima 16 predmeta jer je izabrao i fakultativnu nastavu. Varijablu i postavili smo na početnu vrijednost 1. Zato ćemo naš algoritam prepraviti tako što ćemo umjesto 15 uvesti varijablu brpred koja će predstavljati naš broj predmeta. Isto tako u drugom. U drugom prolazu upisujemo ocjenu iz drugog predmeta. 25 C++ programiranje za srednje škole prof.

Još nekoliko primjera petlji Nakon postavljanja varijable zbir na početnu vrijednost 0 treba u upisati početni broj n i završni broj m od kojeg do kojeg ţelimo ispisati i sabrati neparne brojeve. Za vježbu: Pokušajte po uzoru na prosjek ocjena za jednog učenika napraviti dijagram toka za izračunavanje prosječne ocjene razreda. C++ programiranje za srednje škole prof.Smajo Mekić Brojač u petlji for sada broji od n do m Da li je i neparan broj znati ćemo ako ga podijelimo s 2 koristeći operator mod i dobijemo rezultat 1. 26 . Brojač i u petlji sada broji od 1 do brpred pa je primjenjivo za sve učenike i razrede s različitim brojem predmeta. Ako ostatak je 1 tada ispisujemo i i dodajemo njegovu vrijednost varijabli zbir. Što će se dogoditi ako neko upiše za n veći broj nego za m? Prepravite gornji algoritam tako da izračunava i zbir neparnih i zbir parnih brojeva od n do m. Da bismo dobili prosjek treba po izlasku iz petlje zbir ocjena podijeliti s brojem predmeta brpred.Nakon što smo varijablu zbir postavili na početnu vrijednost 0 treba preko tastature unijeti broj predmeta koji se smješta u varijablu brpred.

Učenici su na satu fizike naučili Ohmov zakon po kojem otpor u istosmjernom strujnom kola moţete izračunati tako da podijelite napon sa jakošću struje: R=U/I gdje je otpor R. popravljaju i prepravljaju. Ovaj primjer moţe se daleko elegantnije riješiti višestrukim grananjem. Algoritmi se ne mogu naštrebati. Izrada algoritama zahtjeva puno vjeţbe. Za broj mjerenja ćemo koristiti varijablu brmjer. Uvest ćemo još jednu varijablu koju ćemo zvati izbor i dogovoriti ćemo se da u nju upišemo 1 ako ţelimo računati otpor. Dijagram toka crtamo običnom olovkom s gumicom pri ruci. Potrebno je riješiti puno primjera.Smajo Mekić . Ako upisani broj ne bude 1. Zanimljivo je i to da više ljudi moţe napraviti na isti zadatak više različitih algoritama i da su svi dobri. Stvari se rješavaju u hodu. Naučeno su odmah provjerili mjereći veličine u strujnom kolu. Uočavaju se stvari koje se mogu pojednostavniti. od jednostavnijih do sve sloţenijih. ako su mjerili napon i jakost mogli su po gornjoj formuli izračunati otpor. 2 ili 3 ne treba poduzimati ništa. lako se test primjerima moţe "pješice" provjeriti. napon U i jakost struje I. Treba napraviti algoritam po kome je moguće za odreĎeni broj mjerenja na temelju dvije izmjerene veličine izračunati treću. u petlji for ćemo ovaj puta kao brojač upotrijebiti slovo k. ako su mjerili otpor i napon mogli su izračunati jakost struje I = U / R. a ako su mjerili otpor i jakost struje mogli su izračunati napon U = I * R. Prednost dijagrama toka je što je pregledan. mijenjaju. tako rastavljeni riješiti do detalja i onda prikazati kao rješenje u 27 C++ programiranje za srednje škole prof. Sloţeni algoritmi mogu se rastaviti na manje. Pošto slovo I koristimo kao varijablu za jakost struje. 2 ako ţelimo računati napon i 3 ako ţelimo računati jakost struje.

. Problemi se mogu lako analizirati. a. Dijagram toka bi trebao biti dio svake dobre programske dokumentacije. B_Pod. Ali kod sloţenijih. Oni bi najradije sjeli za računar i odmah pisali program. I na kraju što je bio cilj naše izrade algoritama .  Vrijednost varijable Varijabli se vrijednost pridruţuje uz pomoć operatora pridruţivanja. Operator pridruţivanja koji se koristi u ovoj verziji pseudo jezika je znak (:=)..Pseudo jezik Pseudokod je neoficijelan jezik koji pomaţe programerima u razvijanju algoritama.Operatori 28 C++ programiranje za srednje škole prof. Tim se operatorom varijabli pridruţuje ili u varijablu upisuje vrijednost. iz Ne postoji opće prihvaćena norma načina pisanja pseudo jezika već svaki autor moţe u načelu koristiti svoj način pisanja.  Kraj naredbe Algoritam zapisan pseudo jezikom sastoji se od niza naredbi. AmPe. Jednom sam sreo svog bivšeg učenika koji se u svom poslu intenzivno bavi programiranjem. TX. Kada je jednom algoritam gotov pisanje programa u nekom programskom jeziku je prepisivanje simbola iz dijagrama toka u naredbe programskog jezika.2. Ţalio mi se da nekad nekoliko sati provede za računarom pokušavajući riješiti neki problem. Svaka naredba ove verzija pseudo jezika završava znakom tačka-zarez (. x.Varijable Mjesto u memoriji rezervisano za pohranu podatka naziva se varijabla.  Pseudokod nije programerski jezik. izraz x:=3 se može čitati "varijabli x se pridružuje broj 3"..pisanje programa. Kod jednostavnih problema to i moţemo napraviti. npr. Učenicima je crtanje dijagrama toka ponekad nerazumljivo.1.. Pitao sam ga što tada učini. lako se uočavaju sličnosti i razlike izmeĎu više rješenja i odabire najbolje.. Moţda nakon ovih vjeţbi vidite dijagrame toka i tamo gdje ih do sada niste uočavali . Obično svaki simbol u dijagramu toka predstavlja jednu naredbu u programu.  Pseudokod se sastoji jedino od izvršnih naredbi – onih koje se izvršavaju kada program pseudokoda pretvorimo u C++ i pokrenemo. hodogrami nekih aktivnosti. Svaka varijabla ima ime koje ju jednoznačno odreĎuje kako bi se razlikovala od ostalih varijabli." 4. Ime varijable se u pseudo jeziku moţe zadati proizvoljno.različiti shematski prikazi nekih postupaka.Smajo Mekić . ali ne ide i gotovo.blokovima. Odgovorio je: "Pa uzmem olovku i papir i nacrtam algoritam.. a sve što je nerazumljivo je i dosadno.).Npr. 4. 4.  Njegova svrha je riješiti program prije pisanja u programerskom jeziku kao što je C++.

Operator MOD vraća cjelobrojni ostatak dijeljenja dva cijela broja. C++ programiranje za srednje škole prof.Operatori su simboli koji predstavljaju (zamjenjuju) odreĎene funkcije. Logički operatori Logički podaci su podaci koji mogu poprimiti samo jednu od dvije moguće vrijednosti. Primjer upotrebe operatora dijeljenja: x:= 5. Operator DIV vraća cjelobrojni dio dijeljenja dva cijela broja. Varijabla u koju se pohranjuju podaci ove vrste moţe poprimiti vrijednosti true (1) ili false (0). operatori usporeĎivanja (relacijski operatori).Smajo Mekić 29 . Rezultat rada logičkih operatora je podatak logičkog tipa. Kod početnika zabunu mogu stvoriti tri različita operatora dijeljenja. a:=x/y. Rezultat će biti: a=2. Logičke se funkcije zapisuju logičkim operatorima. postoje logičke funkcije. Osim operatora dijeljenja (/) koji kao rezultat vraća vrijednost količnika u obliku realnog broja tu su i operatori DIV i MOD. c:=x MOD y. b:=x DIV y. istina/laţ. To su na primjer true/false. Operatori se mogu svrstati u grupe prema vrsti funkcije koju prestavljaju. Pri tom moţe zbunjivati sličnost izgleda operatora pseudo jezika i operatora kojima se koristimo u matematici (ponekad izgledaju isto a imaju različita značenja).5 .c=1 (5:2=2 cijela i 1 ostatak). y:=2. npr.b=2. Za rad s logičkim podacima. oduzimanja i mnoţenja se u pseudo jeziku koriste na uobičajen način. logički operatori.    Za ispravno zapisivanje algoritma pseudo jezikom izmeĎu ostalog treba poznavati i značenje pojedinih operatora. da/ne.: aritmetički operatori. Aritmetički operatori Opis Sabiranje Oduzimanje Množenje Dijeljenje Cjelobrojno dijeljenje Ostatak cjelobrojnog dijeljenja Pseudo jezik + * / DIV MOD Pascal + * / DIV MOD C/C++ + * / / % Operatori sabiranja. 1/0.

Smajo Mekić Rezultati logičkih operacija će biti: e=0 f=1 g=1. rezultat poreĎenja će biti 1 (true). a ako nije. UsporeĎuje se upotrebom operatora poreĎenja. . Ako je napisani izraz istinit. rezultat će biti 0 (false). 30 C++ programiranje za srednje škole prof.Opis Logički I Logički ILI Logički NE Pseudo jezik I ILI NE Pascal AND OR NOT C/C++ && || ! Tablica stanja operatora I Tablica stanja operatora ILI Tablica stanja operatora NE Primjer upotrebe logičkih operatora: Operatori poreĎenja (relacijski operatori) Dva se podatka mogu usporeĎivati.

Smajo Mekić Rezultat na kraju će biti: x=3. Operator jednakosti NE pridruţuje vrijednost varijabli već samo provjerava da li je vrijednost njegove lijeve i desne strane jednaka. Npr. Redoslijed izvršavanja operatora Pri zapisivanju sloţenih izraza pseudo jezikom vaţno je imati na umu redoslijed izvršavanja operatora (prioritet).a=0. Operator pridruţivanja (:=) mijenja vrijednost varijable. Redosljed izražavanja Operatori 31 . Operator jednakosti ne mijenja vrijednost varijable.Opis Manje Manje ili jednako Veće Veće ili jednako Jednako Različito Pseudo jezik < <= > >= = <> Pascal < <= > >= = <> C/C++ < <= > >= = != Primjer upotrebe operatora poreĎenja: Rezultati usporedbe će biti: a=1 b=1 c=0 d=0. Izraz x=3 se moţe čitati: "da li je vrijednost varijable x jednaka 3?".: C++ programiranje za srednje škole prof. Tim izrazom se vrijednost varijable ne mijenja i ostaje kakva je bila i prije izraza. Kod početnika zabunu moţe stvoriti operator jednakosti (=). Npr.

<>. 22 DIV 5 = 4 4 * 11 = 44 44 MOD 3 = 2 (ostatak dijeljenja 44/3) x=2 2.<=. 4.ILI <. x = 13 4.1 = 13 5.3.Funkcije 32 C++ programiranje za srednje škole prof.Primjer redoslijeda izvršavanja operatora: Svi su operatori ravnopravni. 3 * 4 = 12 3. operacije se izvršavaju ovim redoslijedom: 1. 12 + 2 . 6 / 3= 2 4.Smajo Mekić . 4. 2. Primjer redoslijeda izvršavanja operatora: S obzirom na prioritete.>=. 22 DIV 5 = 4 11 MOD 3= 2 4*2=8 x=8 3. izraz se izvršava s lijeva u desno ovim redoslijedom: 1. 3. 3.= 1.1 2 3 4 5 () NE */ DIV MOD I + . 55 MOD 6 = 1 2. 2.Primjer redoslijeda izvršavanja operatora: Zagrade poništavaju prioritete operatora pa se izvršava ovim redoslijedom: 1.

Smajo Mekić . Opis Apsolutna vrijednost realnog broja Drugi korijen realnog broja Zaokruživanje ralnog brojana najbliži cijeli broj Najveći broj manji ili jednak od x Pseudo jezik Abs(x) Sqrt(x) Round(x) Pascal Abs(x) Sqrt(x) Round(x) C/C++ abs(x) sqrt(x) round(x) Trunc(x) Trunc(x) ceil(x) 5.Izdvojeni nizovi naredbi koji čine logičke cjeline a obavljaju tačno utvrĎene zadatke nazivaju se funkcije. U ovoj verziji pseudo jezika od učenika se očekuje poznavanje nekoliko pripremljenih matematičkih funkcija.Kako započeti? 33 C++ programiranje za srednje škole prof. Moguće je stvoriti vlastite funkcije pa ih zatim koristiti u svom programu ili koristiti već postojeće i za upotrebu pripremljene funkcije.

razvojno okruţenje.MS Visual C++ Nakon pokretanja MS Visual C++ razvojnog okruţenja otvorit će se prozor programa.1. kao i većina ovakvih programa. najpoznatije C++ okruţenje predstavlja Microsoftov proizvod Visual C++ .Da bismo napravili program koji treba da obavi neki zadatak. C++ programiranje za srednje škole prof. MeĎutim.1.tzv. 5.Smajo Mekić 34 . i drugi sa kojim dobijemo izvršnu datoteku (kompajler). Jedno od takvih okruţenja je i Dev-C++ . Novi projekt se pokreće naredbom File/New. moguće je naći veliki broj besplatnih C++ okruţenja. je komercijalan i nije dostupan svim korisnicima.Nakon odabira naredbe File/New otvara se prozor New u kojem treba na kartici Projects odabrati vrstu projekta te zadati osnovne podatke za projekt. neophodna su nam dva specijalizirana programa: jedan koji koristimo da napišemo izvornu datoteku (editor). Ovisno o podešenosti programa raspored i sadrţaj cjelina unutar prozora programa moţe biti i drugačiji. ovaj. Ova dva programa se najčešće kombiniraju u jedinstven paket . Slika 5. Ipak. Danas.NET.

Na kraju birati naredbu File/New. Location).Slika 5. 35 C++ programiranje za srednje škole prof. a potom označiti mapu Source Files koja se nalazi pod nazivom projekta. U popisu projekata treba birati Win32 Console Application. Slika5. Nakon unosa potrebnih podataka otvara se prozor Win32 Console Application – Step 1 of 1. Slika5.Smajo Mekić .3. Odabirom An empty project i klikom na dugmić Finish stvoren je i pohranjen novi projekt obiljeţja prikazanih u prozoru New Project Information. Sada u stvorenom projektu (okviru za izradu programa) treba otvoriti novu datoteku izvornog kôda.4. Potrebno je kliknuti na karticu FileView.2. Project name) i mjesto pohrane (engl. Projektu treba dati ime (engl.

Slika 5. 36 C++ programiranje za srednje škole prof.Smajo Mekić .Slika 5. Bira se vrsta datoteke C++ Source File.6.5 Otvorit će se prozor New u kojem treba na kartici Files izabrati vrstu datoteke.

Korak po korak” prvi program u Dev C++” Slika 5.9. u traci sa alatima pojavljuje se ikona za pokretanje programa Dev-C++ . Dovoljno je dvostrukim klikom pokrenuti instalacionu datoteku (npr. Nakon završetka ovog postupka.2 setup.9.Smajo Mekić .7.2. Korak 1-pokretanje Dev C++ Slika 5.html).exe) i pratiti poruke na ekranu.net/download. korak 2-kreiranje novog projekta 37 C++ programiranje za srednje škole prof. Izvorni kôd programa C++ sprema se u datoteku izabranog imena i nastavka cpp.Programski paket Dev-C++ Najnoviju verziju programa moguće je naći na web stranici firme BloodshedSoftware (http://bloodshed. File name).Na kraju treba zadati ime datoteci (engl. devcpp-4. Instalacija Dev-C++ programa ni u čemu se ne razlikuje od korištenja većine instalacionih datoteka u Windows okruţenjima. 5.8.

korak 4 spremanje projekta 38 C++ programiranje za srednje škole prof.Slika 5.10.biranje praznog projekta Slika 5.Smajo Mekić .korak 3.9.

12.11. korak 6-pisanje programskog koda 39 C++ programiranje za srednje škole prof.Slika 5.korak 5 mjesto za pisanje programskog koda Slika 5.Smajo Mekić .

Smajo Mekić .14.korak7 proces kompajliranja Slika 5.13. korak8-pokretanje izvršne datoteke Pitanja za utvrđivanje: 40 C++ programiranje za srednje škole prof.Slika 5.

matematičke ili neke druge svrhe.Uvod u C++ C++ je viši programski jezik opće namjene. C++ je viši programski jezik.Ako je jezik višeg nivoa to ne znači da je automatski bolji od jezika niţeg nivoa.. gdje je ljepota izraţavanja poţeljna. dvosmisleni i neprecizni.. 3.. 41 C++ programiranje za srednje škole prof.Prvi od njih je programski jezik. i bilo bi idealno kada bi mogli na našem maternjem jeziku kazati računaru da nam nešto uradi. Ovo je kratka rečenica sa dosta nerazumljivih ojmova.. Definiši Algoritam? Kako se još naziva proceduralno programiranje i zbog čega? Koje su najbitnije osobine algoritma? Nabroj nekoliko programskih paketa koji omogućavaju pisanje i kompajliranje programa napisanih u C++ ? 5.. Veći nivo apstrakcije znači jednostavniji rad ali i manju kontrolu nad računarom. Ljudi u svakodnevnom ţivotu koriste govorne jezike... Šta je osnovna karakteristika proceduralnog programiranja? 7.Smajo Mekić . lowlevel).Ovo viši (eng.Primjer nepreciznosti se moţe vidjeti u rečenici: “Odi u prodavnicu i kupi mlijeko!”. 2.. koji je jedini jezik koji procesor razumije bez prevoĎenja.Kaţe se da je C++ jezik opće namjene. 4. To bi nam itekako olakšalo ţivot iz matematike. Programski jezik C++ pripada . Svima je jasno da se misli na to da posjetioci ribnjaka ne smiju bacati hranu ribama.. On se sastoji od nula i jedinica i moţe se reći da je za ljudska bića gotovo nerazumljiv i neupotrebljiv. Šta je pseudo jezik? 6.1. highlevel) stoji uz C++ jer postoje jezici i niţeg nivoa (eng. ali u informatici je to nepotrebno ako nema u sebi nekih korisnih informacija.Dakle programski jezik je precizan i nedvosmislen jezik razvijen za komuniciranje i kontrolu nad računarom. niti duţinu. na ulazu u jedan ribnjak stoji natpis “Gostima zabranjeno hraniti ribe!”. ali se rečenica moţe tumačiti i na način da se ribe ne smiju hraniti sa gostima! Takva rečenica je sigurno dvosmislena. To znači samo veći nivo apstrakcije od mašinskog jezika. npr. Tako npr. 6. što znači da nije specijaliziran u npr. ali to nema nikakve veze sa visinom. Na koju prodavnicu se misli? Koju masnoću mlijeka? Od kojeg proizvoĎača? Primjer preobimnosti jezika moţemo naći u bilo kojem knjiţevnom djelu. jer jezici nemaju visinu. jezicima. “Molim te naĎi mi rješenja kvadratne jednačine x2 +5x+6=0!”.. ali naţalost stvari sa računarima nisu još uvijek tako jednostavne. Govorni jezici ne koriste se za komuniciranje sa računarom jer su preobimni. iako bi jednog dana mogle biti upravo takve.

Kako programe pišu ljudi. Da li je u tome uspio ili je samo još doprinio zbrci oko u suštini vrlo snaţnog programskog jezika je rasprava koja se često vodi u programerskim krugovima. kao npr. često nam zatrebaju debuggeri. Bjarne Stroustrup zaposlenik AT&T Bell Laboratories je razvio C++ programski jezik. potrebno ga je iz izvornog koda (programa) prevesti u oblik koji procesor razumije tj. a naziv im potiče od engleskog naziva bug za grešku u programu.1. Takvi programi se nazivaju debuggeri. za pisanje izvornog koda nam treba editor. Proces kompajliranja Da bi se napisani program izvršio na računaru(da bi ga koristili). Prevedeni oblik se najčešće naziva izvršni ili objektni kod(program). a da bi otkrili eventualne greške u svojim programima. Kako ovo znači da prilikom pisanja svoga programa trebamo koristiti tri različite vrste programa. Notepad ili Vim. mašinski jezik. Za prevoĎenje tog izvornog koda u izvršni kod nam treba kompajler. da bi pravili vlastite programe potrebni su nam još dvije vrste programa: tekst editori i debuggeri. jer se program iz izvornog oblika prevodi u objektni putem posebnih programa koji se nazivaju kompajleri ili prevodioci. Tekst editor je program sa kojim pišemo izvorni program. neko se dosjetio da ta tri programa “ujedini u jedan program”.C++ je programski jezik za koji se slobodno moţe reći da je C programski jezik sa dodatim klasama i svim ostalim osobinama modernih jezika. C je čudan jezik koji ima osobine i viših i niţih programskih jezika. C je nastao da bi zamijenio jezik B(postojao je i jezik A. 42 C++ programiranje za srednje škole prof. Objektni program se zna nazivati i kompajlirani program. Da bi prevazišao mane i iskoristio prednosti C jezika.Smajo Mekić . pa kao takav ima sve prednosti i mane takvih jezika. Takvi programi se nazivaju integrirana razvojna okruţenja ili IDE(Integrated Development Environment). a mi ćemo koristiti Blodshed DevC++ IDE. dok je proces uklanjanja grešaka debugging. koji je tad radio u AT&T Bell Laboratories. Kada radite sa nekim programom na računaru npr. Dakle. 6. često su nam potrebni i programi koji nam pomaţu da takve greške otkrijemo i uklonimo. sa Firefoxom radite sa objektnim programom. Pored kompajlera. a početkom 2007 je izdat i jezik D) čiji tvorac je otac Unix operativnog sistema Ken Thompson i prvenstvena mu je namjena bila odrţavanje Unix operativnog sistema. a oni su po svojoj prirodi skloni greškama. Dokaz za to je i prvo ime ovog jezika koje je glasilo “C sa klasama”! Tvorac C programskog jezika je Dennis Ritchie.

ispisuje poruke i upozorenja o njima. PrevoĎenjem nastaje datoteka objektnog koda (engl. Objektni kod je meĎukorak do izvršnog koda i uz ostalo omogućava uključivanje gotovih dijelova programa iz drugih datoteka. Ako pronaĎe pogreške (engl. Izvorni kod programa C++ sprema se u datoteku izvornog koda pod smislenim imenom i nastavkom *. linker). moţe postojati biblioteka formula za izračunavanje geometrijskih likova čije formule mogu koristiti drugi programi. objektnih datoteka. Prevodi se pomoću programa koji se nazivaju prevodioc (engl. prevodioca.Grešku valja ispraviti pa ponovno pokrenuti prevoĎenje i povezivanje. libraries).obj. Otkrivene pogreške treba ispraviti pa ponovo pokrenuti program za prevoĎenje. U načelu. Objektni kod nije izvršni program i ne moţe se direktno izvršiti na računaru. Izvorni je kod moguće pisati u bilo kojem programu za ureĎivanje teksta (engl. Takav se oblik programa naziva izvršni oblik (engl. object code). Biblioteke Datoteke koje sadrţavaju gotove dijelove programa nazivaju se biblioteke (engl.exe). linker). compiler) i povezivač (engl. Izvorni se kod mora prevesti u izvršni. source code). Takve se radnje u uključuju iz postojećih biblioteka. executable). nastavka *.2. Ako se pri povezivanju pojavi greška (engl. IDE). povezivača itd. bit će ispisana poruka o tome. gotovi dijelovi programa mogu koristitit u drugim programima. text editor).Riječi u C++ programskom jeziku 43 C++ programiranje za srednje škole prof.Izvorni kod Kombinacijom naredbi programskog jezika nastaje izvorni kod (engl.Smajo Mekić .izvršnoj datoteci nisu potrebni nikakvi dodaci pa se moţe izvršavati i bez izvornog programa. Program prevodioc prevodi izvorni kod iz višeg programskog jezika u mašinski oblik te provjerava sintaksu napisanog izvornog koda. Povezivač Program koji povezuje objektnu datoteku s bibliotekama i drugim potrebnim datotekama naziva se povezivač (engl. Danas se uglavnom programi za pisanje izvornog koda objedinjuju u cjelinu sa prevodiocem i povezivačem (integrirana razvojna okolina. Rezultat uspješnog povezivanja je izvršna datoteka (*. Kada se koriste biblioteke potrebno uvijek iznova zapisivati radnje (funkcije) koje se često koriste. compile-time error). Takvi se više nije program površina 6. Npr.cpp Izvršni oblik Programi se mogu izvršiti na računaru samo ako su u binarnom obliku. link-time error).

a završava zatvorenom vitičastom zagradom }. Osim imena varijabli. MeĎutim. kompajler potupuno ignoriše sve od pojave znaka // pa do kraja reda. od kojih bilo koji moţe biti slovo (tj.heder datoteku u kojoj se nalazi definicije. return 0.ovom linijom koda definiramo područje za imenovanje objekata. C++ ne postavlja nikakvo ograničenje na broj karaktera u nekom identifikatoru. ali je ono toliko veliko da ne predstavlja nikakav problem (npr.svrha komentara je objašnjenje korisnicima koji pokušavaju razumjeti šta program radi. Te riječi se nazivaju rezervisane ili ključne riječi i date su u tabeli: Tabela 1: Ključne (rezervisane) riječi u C++ 6. večina implementacija ima ovo ograničenje. te makroa.komentar je obično kratak. tako da se.3. deklaracije funkcija i objekata za unos i ispis sa standardnog ulaza odnosno izlaza.Programski jezici koriste imena kako bi se označile različite cjeline koje čine program. using namespace std. // naredba tijelo funkcije funkcija system(„Pause“).Smajo Mekić . #include <iostrem> prestavlja predprocesorsku direktivu kojom se označava da kompajler treba da očita tzv. na primjer. broj (0-9) i znak "_". varijable zarada i Zarada razlikuju. pričemu na prvom mjestu ne moţe da bude broj. slova engleske abecede a-z i A-Z). } Objašnjenje Znak // označava komentar. ovdje spadaju i imena funkcija.Funkcija koja če se prva izvršiti kada program počne sa radom. i do 255 karaktera). Uz to. int main() // zaglavlje funkcije { cout<<“Sretan pocetak“. C++ postavlja sljedeća pravila za pravilno kreiranje imena (ili identifikatora).U programskim jezicima funkcija je potprogram koja vraća neki rezultat u navedenom primjeru funkcija int main vraća cijelobrojni rezultat . Treba imati na umu da postoje odreĎene riječi u C++ koje su rezervisane.svaki program u C++ mora imati najmanje jednu funkciju main glavna funkcija. Ime traba da se sastoji od jednog ili više karaktera. velika i mala slova se razlikuju.Struktura programa //program koji ispisuje pozdravnu poruku komentar #include<iostream> // zaglavlje standardne biblioteke using namespace std. tipova. tako da identifikatori ne mogu uzimati njihova imena. Nakon zaglavlja funkcije dolazi tijelo funkcije koje počinje otvorenom vitičastom zagradom {.komentari su vrlo vaţni kod velikih programa gdje komentar treba da objasni o čemu se radi u pojedinim dijelovima programa.Naravno poznato nam je da u jednom programu dva objekta ne mogu imati isto ime odnosno isti identifikator jer će doći do kolizije i program neće raditi.Vitičaste zagrade koristimo kada imamo 44 C++ programiranje za srednje škole prof. int main() je zaglavlje funkcije.

} zatvrena vitčasta zagrada zatvara tijelo funkcije. 1 #include <iostream> 2 using namespace std. tj. kako bismo mogli vidjeti rezultat njegovog rada. 3 int main() 4 { 5 cout << " Sretan pocetak u C++ zeli Vam prof Smajo \n". Izgled programskog koda i izvršne datoteke Kompajliranje C++ programa obuhvata nekoliko koraka. '<<' prestavlja znak redirekcije odnosno umetanja koji pojednostavljeno moţemo čitati kao šalji Sretan pocetak na ekran― to ustvari predstavlja niz znakova koje šaljemo na ekran. Bez ove linije program bi se nakon pokretanja izvršio. takav niz znakova nazivamo string. u ovom slučaju string "Sretan pocetak u C++ zeli Vam prof Smajo /n" se šalje na cout. System("PAUSE").skupinu naredbi koje čine jednu cjelinu.Tijelo funkcije sačinjavaju naredbe svaka naredba završava tačka-zarezom.Smajo Mekić . 6 system("PAUSE"). izlaznog toka podataka output stream koji je povezan sa standardnim ureĎajima za ispis tpično ekran. a konzola bi se zatvorila veoma brzo. Tok cout je standardni izlazni tok (obićno ekran) u C++ . odnosno: cout << " Sretan pocetak u C++ zeli Vam prof Smajo " << endl. Tok (stream) je objekat koji izvršava ulazne i izlazne naredbe.Za istu svrhu moţe se koristiti i funkcija endl. a desni izraz. 7 return 0. uzrokuje njegov ispis na ekranu i pomjeranje usljedeći red. Posljednji karakter u datom stringu (n) je karakter koji označava novi red . Naredbe su niz instrukcija koje govore računaru šta treba da radi. Cout je skračenica od consol out predstavlja objekat tzv. 8 } Naredba u datom primjeru šalje string1 " Sretan pocetak u C++ zeli Vam prof Smajo " na tok cout(output stream). Return 0 znači da naša funkcija vraća cijelobrojnu vrijednost 0. Simbol << je izlazni operator (usmjerivač toka) kojem je lijevi operand izlazni tok.1. Ovaj operator upućuje desni operand na lijevi. tako da bismo imali osjećaj kao da program nije ništa ni uradio. koji su večinom nevidljivi za korisnika: 45 C++ programiranje za srednje škole prof. zaustavlja izvršenje programa. Primjer2. Dakle. Slika 6.

// inicijalizacija kopiranjem U oba slučaja varijabla broj je inicijalizirana na vrijednost 10.g.). copy-initialisation) i (ii) direktna inicijalizacija (eng. Pridruživanje vrijednosti nekoj varijabli po prvi put naziva se inicijalizacija. Treba napomenuti da inicijalizacija ne predstavlja pridruživanje (iako se u inicijalizaciji kopiranjem koristi znak jednakosti). Rezultat ovoga je modificirani tekst programa koji više ne sadrži nikakve direktive. realni broj. Drugi korak. Također je moguće da se varijabla definiše i inicijalizira u isto vrijeme. =. Treći korak. kao u sljedećim primjerima: int broj(10). koji se postavlja kada se varijabla definiše (npr. Varijable e. directinitialisation). koji se naknadno mogu pozvati. Konačan rezultat je izvršna datoteka. #include). .b. Sve varijable imaju dvije važne osobine:  Tip. b. 6 float x = 4. koji pravi osnovni (asemblerski ili mašinski) kod. Na primjer. koja se moţe promijeniti davanjem nove vrijednosti varijabli. 3 main() 4 { 5 int a. 1 #include <iostream> 2 using namespace std. f. Neophodno je da se svaka varijabla inicijalizira prije nego se koristi.  Vrijednost. (). 9 e = 4. -5. a varijabla ime u liniji 11. Varijable se koriste za čuvanje vrijednosti podataka tako da se iste mogu koristiti u raznim proračunima u programu..32. cjelobrojna varijabla (int) može uzeti samo vrijednosti cijelih brojeva (npr. koji kod prevodi u C jezik. Kada se jednom definiše. f i g su inicijalizirane linijama 9 i 10.Prvi korak.Varijable Varijabla je simboličko ime za memorijsku lokaciju u koju se mogu pohraniti podaci. Kompajler može biti pravi C++ kompajler.. Naredni primjer pokazuje razlicite načine definisanja i inicijaliziranja varijabli. . Kada se varijabla definiše. rezultat može biti nepotpun zbog toga što program poziva podprogramske biblioteke koje nisu definisane u samom programu. njena vrijednost je nedefinisana sve dok joj se ne pridruži neka. tip varijable u C++ se ne moţe promijeniti.c.). nego se dešava onda kada se varijabla definiše i kada joj se da početna vrijednost. 11 ime = ’C’ 12 } Da objasnimo Linije 5.f. U oba slučaja.. 7 i 8 pokazuju primjere definisanja varijabli a. koji program može pozvati. c. Inicijalizacija kopiranjem koristi znak jednakosti. // direktna inicijalizacija int broj = 10.4. 6.Smajo Mekić .ili samo prevodilac. dok se direktna inicijalizacija izvodi pomoću malih zagrada. 7 int e. 13. zatim e. respektivno. C++ predprocesor ide kroz program i izvodi instrukcije koje su specificirane predprocesorskim direktivama (npr. 8 char ime. pridruživanje predstavlja poništavanje trenutne vrijednosti varijable i zamjene novom. U drugom slučaju.što je vrlo praktično. Vrsta vrijednosti koja se može pridružiti nekoj varijabli zavisi od njenog tipa. g i ime. Istovremeno definisanje i 46 C++ programiranje za srednje škole prof. 10 f = g = 12. rezultujući C kod se zatim prevodi kroz C kompajler kako bi se napravio osnovni kod. C++ podržava dvije vrste inicijalizacije: (i) inicijalizaciju kopiranjem (eng. S druge strane. cijeli broj.. linker završava objektni kod njegovim povezivanjem sa objektnim kodom bilo kojeg modula biblioteka. C++ kompajler prevodi programski kod. karakter.

2.kompjuter ima na raspolaganju RAM memoriju (eng. Kompajler koristi adresu prvog bajta na koju se alocira zarada kako bi označio varijablu. deklaracija ’upoznaje’ program sa tipom i imenom varijable. da se radi o 2 bajta. Definicija je time i deklaracija. Prethodna jednakost uzrokuje da se vrijednost 500 pohrani u ova dva bajta koja su alocirana (Sl. zbog situacija u kojima se u više datoteka jednog te istog programa pristupa istoj varijabli. C++ razlikuje pojmove definisanja i deklarisanja. odnosno procesom deklaracije. 6. Pretpostavimo.Memorija Za pohranjivanje izvršnog koda kao i podataka sa kojima program manipulira.na primjer.Smajo Mekić . navodi kompajler da alocira nekoliko bajta kako bi predstavio varijablu zarada. Deklarisanje se izvršava na taj način da se ispred tipa doda ključna riječ extern. definisanje varijable predstavlja alociranje prostora za nju.2) 47 C++ programiranje za srednje škole prof. int broj. neki autori prave razliku izmeĎu ovih pojmova.5. S druge strane. // deklarise ali ne i definise broj // deklarise i definise broj Osnovna razlika je u tome da se sa extern. Slika 2. koji mapira ulazne veličine na memorijske lokacije. memorija se moţe zamisliti kao neprekidan niz bita. Random AccessMemory). Na primjer. te moguću inicijalizaciju. definicija varijable int zarada = 500.ne alocira prostor za datu varijablu. treba napomenuti da većina autora proces definisanja varijabli poistovječuje sa procesom deklarisanja. Naime.C++ kompajler generiše izvršni kod. Memorija se obično dijeli na grupe od 8 uzastopnih bita (ovo predstavlja bajt). od kojih svaki moţe da pohrani binarni broj (0 ili 1).1. tako da je svaki bajt jedinstveno predstavljen svojom adresom . Na kraju.5. Sljedeći primjer pokazuje razliku izmeĎu definisanja i deklarisanja neke varijable: extern int broj. Bajtovi su uzastopno adresirani. nego samo upućuje na to da je varijabla definisana negdje u programu.inicijalizacija data je u liniji 6 za varijablu x. Pri tome. U jednom programu moţe biti samo jedna definicija varijable.5.Organizacija memorije u kompjuteru Tačan broj bajta koji je alociran i metoda koja se koristi za binarnu reprezentaciju cijelog broja zavisi od specificnosti C++ implementacije. Tako. MeĎutim.

diskom i sl.Da bi program bio koristan.Ulazno-izlazni tokovi Treba napomenuti da je organizacija memorije i korištenje adresa koji se odnose na podatke veoma vaţno za programera.Smajo Mekić Posljedica funkcije unosa cin je prekid izvršenja programa sve dok se ne unese podatak i pritisne tipka Enter (program "čeka" da korisnik upiše podatak). Svaki program prima podatke posredstvom ulazno-izlaznih tokova i rezultat predaje okolini posredstvom ulazno-izlaznih tokova.2: Reprezentacija cijelog broja u memoriji 6. input and output streams). S gledišta programa sasvim je svejedno o kojem je ulaznom ili izlaznom ureĎaju riječ pa se svi podaci u program unose i iz programa predaju okolini na isti način. dok tačna binarna reprezentacija podataka koje on koristi to nije. Više ulaznih podataka moţe se upisati u istome redu. Program očekuje unos sa tastaturekoji će bit pohranjen u varijablu a i b Moguće je ulančavanje operatora unosa koji se izvodi s lijeva na desno.Ulazno-izlaznim tokovima se rukuje funkcijama biblioteka iostream. C++ programiranje za srednje škole prof.5. monitorom. Dvije funkcije koje su najčešće u upotrebi su cout i cin.Slika 2. Primjena funkcije cin cin>>x.). Program očekuje unos podataka s tastature koji će biti pohranjen u varijablu x. mora komunicirati s ulazno/izlaznim ureĎajima (tastaturom. 48 . Komunikacija s ulazno/izlaznim ureĎajima se u programu C++ ostvaruje ulazno-izlaznim tokovima (engl. Podaci se u ulazni tok umeću operatorom unosa (>>). cout<<34<<“moguć je i ispis niza znakova“. odvojeni prazninama (tek na kraju treba pritisnuti tipku Enter). cin>>a>>b. Cin ulazni tok Funkcija cin usmjerava podatke s tastature na ulazni tok.6. Biblioteka iostream iostream je biblioteka koja sadrţi niz ulazno-izlaznih funkcija koje omogućavaju rukovanje ulaznoizlaznim tokovima.

nakon završenog ispisa jednog podatka pokazivač prebaciti na početak sljedećeg reda treba koristiti konstantu endl (takoĎer pohranjenu u biblioteci iostream). i bilo šta napisano izmeĎu /* i */ smatra se komentarom. #include <iostream> 49 .7. cout<<15<<a<<“Moguć je i ispis niza znakova“.Smajo Mekić 6. Moguće je ulančavanje operatora unosa koji se izvodi s lijeva na desno. C++ daje dvije mogućnosti pisanja komentara:   bilo šta napisano nakon //. Ako korisnik ţeli pregledniji ispis.U primjeru će se ispisati tekst unutar navodnika.vrijednost varijable a.Ispisat će se redom jedno iza drugog. da pomogne onome koji ce čitati program. cout<<a<<endl. Kompajler u potpunosti ignoriše komentare u programu. Upotreba konstante endl cout<<34<<endl. cout<<“Moguć je ispis znakova“. Sljedeći primjer pokazuje upotrebu oba načina pisanja komentara. cout<<“Moguć je i ispis niza znakova“<<endl.Komentari Komentar je dio opisnog teksta koji objašnjava neke aspekte programa. endl U prethodnom bi se primjeru svi podaci ispisali u istome redu. U oba primjera rezultat(ispis) će biti isti: 34 a Moguć je ispis znakova C++ programiranje za srednje škole prof. Cout<<34<<endl<<a<<endl<<“Moguć je ispis niza znakova“.i tekst naveden unutar navodnih znakova. pa do kraja date linije smatra se komentarom3. Primjena funkcije cout cout<<17. tj.Cout izlazni tok Funkcija cout usmjerava podatke s izlaznog toka na ekrana monitora. tako da je jedina svrha koju komentar ima. Ispisat će broj 17 S desne strane operatora ispis može biti bilo koji tip podataka.15. Ispis podataka se ostvaruje operatorom ispisa (<<).

5 koja se zasniva na ukupnom broju radnih sati i satnici. 6. slova engleske abecede a-z i A-Z). // Ukupna mjesecna plata 13 14 // Racunanje i ispis plate 15 16 plata = radniDani * radniSati * satnica. i do 255 karaktera).50.8. // Broj radnih dana u mjesecu float radniSati = 7. Ipak. Neke od vaţnijih su:  imena varijabli se obično pišu malim slovima 50 . te makroa. tako da identifikatori ne mogu uzimati njihova imena.C++ ne postavlja nikakvo ograničenje na broj karaktera u nekom identifikatoru. kao što je to demonstrirano u linijama 14 (cijeli red). postoji i veliki broj prihvačenih konvencija. */ 6 7 int main (void) 8{ 9 int radniDani = 22. // Satnica 12 float plata. C++ programiranje za srednje škole prof. ovdje spadaju i imena funkcija.2 using namespace std. te linijama 9-12 (dio reda). C++ postavlja sljedeća pravila za pravilno kreiranje imena (identifikatora):  ime treba da se sastoji od jednog ili više karaktera. većina implementacija ima ovo ograničenje.Smajo Mekić  MeĎutim. 3 4 /* Ovaj program racuna ukupnu platu radnika. ali je ono toliko veliko da ne predstavlja nikakav problem (npr.Imena (identifikatori) Programski jezici koriste imena kako bi se označile različite cjeline koje čine program. // Broj radnih sati u danu 11 float satnica = 33. tipova. 17 cout << "Plata = " << plata << ’\n’. broj (0-9) i znak " ". Osim imena varijabli. treba imati na umu da postoje odreĎene riječi u C++ koje su rezervisane. od kojih bilo koji moţe biti slovo (tj. velika i mala slova se razlikuju (zarada nije isto što i Zarada). pri čemu na prvom mjestu ne moţe da bude broj.5. Drugim načinom se (koristeći /* i */). moţe komentarisati tekst upisan u više linija (linije 4-5). koje se uglavnom koriste radi lakšeg pračenja programa. Te riječi se nazivaju rezervisane ili ključne rijeći i neke od njih su date u Tabela 1: Ključne (rezervisane) riječi u C++. 18 } Prvi način se moţe koristiti za komentar jedne i samo jedne linije (ili dijela jedne linije). Pored navedenih pravila o davanju imena varijablama. pak.

Brojni sistem s bazom 10 naziva se decimalni ili dekadski brojni sistem.ime moţe da ima i više riječi. Ovaj brojni sistem od svega dvije znameke naziva se binarni. imena koja pobliţe opisuju varijablu Ako o razmislimo zašto je baza 10. U digitalnim elektronskim sklopovima(u koje spadaju i računari) brojni sistem sa bazom 10 se pokazao nepogodnim za praktičnu realizaciju. Prvi pojam koji je potrebno savladati je brojni sistem. Baza je mogla biti bilo koji broj. 142 se u binarnom brojevnom sistemu piše kao 1001110. Pokušajmo predstaviti neki broj u binarnom brojnom sistemu(po bazi 2).Baza 2 je. npr. jer se dvije znamenke-0 i 1-mogu predstaviti kao "odsustvo" i prisustvo"nečega(npr. Jedini razlog je zapravo historijski zbog činjenice da čovjek ima 10 prstiju i da je shvatio da za brojeve veće od deset ne moţe više računati na prste. tj. Postavimo pitanje:Šta predstavlja broj 342.jer se lako moţe dokazati da se pozitivan broj moţe zapisati u obliku.9.Organizacija numeričkih brojeva u računarskoj memoriji Brojni sistemi Da bi shvatilli tipove podataka neophodne za učenje programskog jezika. opšte je pravilo da se jedna odreĎena konvencija konstantno koristi.ima struje-nema struje ).i po čemu se on razlikuje od brojeva 423 i 234 koji su sastavljeni od istih cifara? Poznato je da svaka cifra unutar broja ima odreĎenu "teţinu" (ovisno o poziciji unutar broja) .9. shvati čemo da ovakav izbor nema posebnog argumenta.potrebno je osvrnuti se na organizaciju numeričkih podataka u računarskoj memoriji.Smajo Mekić .1.Gore opisana metoda pretvorbe brojeva iz dekadskog u binarni brojni sistem nije pogodna za pretvaranje većih brojeva.s druge strane.te moţemo reći da je broj 342 skraćeni zapis sljedećeg broja:  za davanje imena se obično koriste mnemonička imena.bila mnogo "lakša" za implementaciju. koje su obično razdvojene donjom crtom. bez obzira na konvencije. 2 Preuzeto i obrađeno Diplomski rad“ Poređenje Pascala i C++ u nastavi Smajo Mekic“ 51 C++ programiranje za srednje škole prof.ili su direktno povezane sa početnim velikim slovom riječi koja se dodaje imenu. No.Tipovi podataka2 6.  6.nego mora izmisliti neki način zapisa većih brojeva.142=128+14=128+8+6=27 +23 +21 =(10001110)2 Dakle.

Konvencija je da cjelobrojne varijable uzimaju u obzir i pozitivne i negativne brojeve (tada se kaţe da su oni tipa signed). i to: cijeli i realni brojevi. S obzirom da 4 bajta predstavlja 4*8 = 32 bita. preostaje nam 31 bit da pohranimo vrijednost nekog broja.pročitani redom odozdo na gore.Ovo vrijedi i za realne brojeve. a long koristi više ili barem isto bajta kao int . 142 71 35 17 8 4 2 1 0 0 1 1 1 0 0 0 1 U C++ su ugraĎeni prosti i sloţeni tipovi podataka. i to: dekadskom. sve dok se ne doĎe do količnika 0. ispred broja se piše 0x ili 0X. int i long. Pri tome.2. A-F).Standardna metoda za pretvaranje. i heksadecimalni (0-9. Tako u sljedećem primjeru za svaki slučaj ispis je jednak broju 32: int broj = 32. predstavljaju traţeni binarni broj. Na taj način se tipom int mogu pohraniti svi brojevi veći od najmanjeg negativnog broja -231 = -2147483648 i manji od največeg mogućeg pozitivnog broja -231 ¡ 1 = 2147483647 Treba napomenuti da se cjelobrojne veličine u izvornom kodu mogu prikazati u jednom od tri brojna sistema. integer) se moţe definisati pomoću tipova short. nakon čega slijedi oktalni zapis broja. naravno. int broj = 040. Najčešće se pri definisanju cijelih brojeva koristi tip int. int broj = 0x0C.ovdje ćemo objasniti proste tipove podataka.Brojevi U C++ su ugraĎena dva osnovna tipa brojeva. u slučaju kada se koriste samo pozitivne vrijednosti. // broj 12 u dekadskom zapisu Ipak. cout << broj. kao npr. oktalnom i heksadecimalnom. Ovo zavisi od kompjutera na kojem se radi. uključujući i 0.Smajo Mekić . MeĎutim. // broj 32 u dekadskom zapisu // ispis 32 // broj 32 u oktalnom zapisu // ispis 32 52 C++ programiranje za srednje škole prof. int broj = 010.na ekranu se ispisuje broj u dekadskom brojnom sistemu.9. 6. dekadski brojni sistem je sistem brojeva od 0-9. U jeziku C++ oktalne vrijednosti se pišu tako da se ispred prve cifre broja napiše broj 0. Jedina razlika je u tome što int koristi više ili barem isto bajta kao short. // broj 8 u dekadskom zapisu U slučaju heksadecimalnog zapisa u C++ .oktalni 0-7. i da prvi bit odreĎuje predznak broja.tj. Cijeli brojevi Cijeli broj (engl. koriste se sa predznakom unsigned. koji u kompjuteru obično zauzima 4 bajta (mada kod nekih starijih kompjutera zauzima 2 bajta). bez obzira koji od prikaza koristimo pri pridruţivanju neke vrijednosti.ostaci dijeljenja.zasniva se na uzastopnom dijeljenju broja sa 2 ispisivanjem ostataka. cout << broj.

za prikaz decimalnih brojeva najbolje je uvijek koristiti tip double.1415926 53 C++ programiranje za srednje škole prof. Pri tome.Osnovni razlog zbog korištenja simboličkih konstanti je osiguranje od promjene njihove vrijednosti. decimalnim.dok je u drugom i trećem slučaju korišteno naučno označavanje (eng. ali ne smije biti nikakvih praznina unutar broja (izmeĎu cifri i slova e. Kako bismo izbjegli ovakve probleme. Simboličke konstante Prethodni brojevni tipovi se koriste za definisanje varijabli koje mijenjaju svoju vrijednost u toku izvršavanja programa. tj.scientific). Ograničenja brojevnih tipova Kao što je pokazano u dijelu o cijelim brojevima. MeĎutim. "Najmanji double:" << DBL_MIN << endl. "Najmanji long: " << LONG_MIN << endl. Tip double koristi više bajta i time omogućuje veći opseg i veću tačnost pri predstavljanju realnih brojeva. moţe se desiti da u toku pisanja programa napišemo naredbu koja mijenja vrijednost konstante (npr. tj. O tome kako se odreĎuje veličina memorije koju zauzima neki objekat ili tip. veličine koje ne treba da mijenjaju svoju vrijednost u toku izvršenja programa. koristimo brojeve sa dvostrukom tačnošću. moguće je odrediti maksimalan i minimalan broj koji se sa njim moţe prikazati. kao u primjeru: const float pi = 3. "Najveci int: " << INT_MAX << endl. za decimalne brojeve. float brzinaSvjetlosti = 2. U slučaju da nam tačnost na sedam decimala nije dovoljna. Drugi način definisanja neke konstante je pomoću predprocesorske naredbe #define. U principu. Naredni primjeri pokazuju upotrebu tipa float (analogno je za ostale tipove koji predstavljaju realne brojeve): float pi = 3. Ipak. naboj elektrona. u C++ je moguće definisatii konstante. te iza predznaka). float naboj = -1. na osnovu veličine memorije koju neki brojevni tip zauzima. "Najveci int: " << LONG_MAX << endl. broja π) i na taj način napravimo veliku grešku u daljem proračunu. kao u: #define PI 3. "Najveci float: " << FLT_MAX << endl.1415926. koji nam govori da se radi o varijabli koja ne mijenja svoju vrijednost. // broj 32 u heksadecimalnom zapisu // ispis 32 Realni brojevi Da bismo operisali sa realnim.) kompajler bi prijavio grešku.Smajo Mekić . jer je brzina obavljanja operacija sa ovim tipovima na današnjim kompjuterima podjednako velika kao i sa tipom float. Ako bismo pokušali promijeniti vrijednost varijable pi (na primjer sa pi = 2*pi.997925e8. a sljedeći dio programa daje njihovu primjenu: cout cout cout cout cout cout << << << << << << "Najmanji int: " << INT_MIN << endl. Takve su na primjer. Naime. i cfloat. Ovaj kvalifikator se koristi na taj način da se postavlja ispred tipa varijable. u naučnom označavanju je moguće koristiti i malo i veliko slovo "e". Slične konstante postoje i za ostale tipove. Na primjer.int broj = 0x20. tj. vrijednost π brzina svjetlosti.1415926. U prvom slučaju koristi se klasični način prikaza broja sa decimalnim zarezom. konstante INT_MIN i INT_MAX daju najmanju i najveću vrijednost brojeva tipa int.6E-19. cout << broj. itd. za cjelobrojne. korištenjem datoteka climits(Datoteka mora biti pozvana naredbom #include). brojevima moţemo koristiti varijable tipa float i double. brojeve tipa double. na raspolaganju nam je kvalifikator const. moguće je naći ove vrijednosti.

karakter A ima ASCII kod 65. Ako se. bitno je napomenuti da se sve simboličke konstante moraju i inicijalizirati prilikom definisanja.Jedina razlika u korištenju ova dva pristupa je u tome što varijanta sa const omogućuje i simboličko lociranje pogrešaka pri debagiranju.i to: tačno i netačno (eng. logičkim varijablama se mogu pridružiti i aritmetički tipovi. U tom slučaju objekat cin očekuje da se unese neka vrijednost. ovaj program se nastavlja ako se unese bilo koji drugi karakter osim k ili K. Problem nastaje ako korisnik programa pritisne samo tipku ENTER. oni se predstavljaju cjelobrojnim tipom int. signed karakter moţe da sadrţi numeričke vrijednosti izmeĎu -128 i 127.Smajo Mekić #include <iostream> 2 using namespace std. znak) i uglavnom se piše kao samo jedan znak upisan izmeĎu jednostrukih znaka navoda ’. dok to nije moguće sa drugom varijantom. American Standard Code for Information Interchange). Primjer definisanja logičkih varijablije: bool jaSamUcenik = true. a karakter a 97. No.a false u 0. u ovu svrhu su se koristili cijeli brojevi 0 i 1 (mada se umjesto 1 mogao koristiti bilo koji broj različit od 0). Najčešći sistem je ACSII (eng. // greška!!! Logički tipovi Logički tipovi su vrlo kasno uvedeni u standardni jezik C++ . pogrešno je napisati: const float pi. bool (od engleske riječi boolean. Karakteri (znakovi) Varijabla karakter (znak) se definiše tipom char (od engleske riječi character -karakter. bool autoLeti = false. a jednakim nuli false. a unsigned 0do 255. Prilikom manipulisanja sa logičkim varijablama (ispis. Na primjer. 10 cin >> ch. 16 }while (ch != ’K’ && ch != ’k’).tako da se svim brojevima različitim od nule pridružuje true. true i false). i to: true se pretvara u 1. pa tek onda pritisne ENTER. Tako. Prije nego se uveo tip za ovu vrstu podataka. Osnovna karakteristika logičkih tipova je da mogu imati dvije vrijednosti. 17 } . Kao i cijeli broj i karakter moţe da bude signed i unsigned. 3 main() 4{ 5 char ch. aritmetičke operacije. 9 a bilo koju tipku za nastavak \n". Ovaj broj je numerička vrijednost i zavisi od sistema kodiranja karaktera koji se koristi (to je zavisno od kompjutera). 6 do 7{ 8 cout << "Pritisnite K ili k za kraj. 14 else 15 cout << "Kraj programa". Sljedeći primjer pokazuje upotrebu tipa char za jednoznakovne varijable: Pri pokretanju. program se zaustavlja. po matematičaru Booleu). tj.). TakoĎer. pak. 54 C++ programiranje za srednje škole prof.i sl. 11 12 if (ch != ’K’ && ch != ’k’) 13 cout << "Zelite nastaviti?\n". unese k ili K. Ona obuhvata jedan jedini bajt koji sadrţi kod datog karaktera.

Oni se predstavljaju pomoću tzv.dvostruki znak navoda \\ . najčešće koriste kao nizovi karaktera (eng. long m=2. slovo u abecedi 12. ipak. Koja je uloga include direktive? 4. dva 15 c. b. ukupna-plata d. string)za ispis tekstova. identifier b. visina neke osobe b. Kako se definišu znakovi u C++ ? 17. Šta radi kompajler? 7.Smajo Mekić . Napisati naredbu koja dobiva numeričku vrijednost sa tastature i pridružuje je varijabli temp. Da li je moguće definisati više varijabli jednom naredbom? Ako jeste. signed int = 2. d. broj rijeci u rječniku d. zarada neke osobe c. Šta radi linker? 8.9. postoje i karakteri koji imaju posebnu namjenu (ne predstavljaju karaktere koji se ispisuju). Koja je razlika između tipova podataka unsigned int i int? 3. Koliko main funkcija može biti u programu? 5. Definiši varijable koje predstavljaju sljedeće veličine: a. ukupna_plata e) default f) proc. Kako se definišu brojevi u C++ ? 16. unsigned int i =-100. Šta predstavlja varijabla? 6.novi vertikalni tabulator \b .Operatori 55 C++ programiranje za srednje škole prof.zvučni signal Znakovne varijable se. kao npr: \n .p=4. 10.backslash (/) \a . Šta radi predprocesor? 9. Kako se u C++ definišu logičke varijable? 7.Osim klasičnih karaktera (slova i sl.novi red \t . 13. c.Koje od navedenih riječi predstavljaju pravilne nazive varijabli: a. Dati primjer starog (jedan red) i novog načina pisanja komentara. 15.znak navoda (apostrof) \" . dati primjer.program 11. Koju datoteku (header file) moramo pozvati u izvornoj datoteci da bi se koristile cout i cin? 14.Šta je od navedenog ispravna definicija varijable: a. 2.). Pitanja za utvrĎivanje: 1. int n=-100.backspace \’ . escape-sekvenci.novi tabulator \v .

25 ili u tzv. a ne 4.dynamic_cast. u upotrebi je bio stari način (eng. koji se daje ili u tzv. s obzirom da dijeljenje ima veći prioritet od pridruţivanja. const_cast i reinterpret_cast.i rezultat je cijeli broj. side-effect) kao što su pridruţivanje. Prije nego se počeo koristiti ovaj C++ način pisanja. MeĎutim. U tom slučaju rezultat se zaokruţuje na donju vrijednost. Osim ostatka pri dijeljenju (%) svi aritmetički operatori prihvataju miješanje cijelih i realnih brojeva. 7. funkcijskom obliku (varijabla meĎu zagradama): double jedinicnaCijena = double(cijena)/volumen. cjelobrojno dijeljenje). na primjer tipu int pridruţuje tip double).Aritmetički operatori C++ nudi pet osnovnih operatora. U tu svrhu se mogu koristiti sljedeći operatori (eng. relacijskih. Općenito. // daje 1.. kao u sljedećem primjeru int cijena = 100.1. tipa double. logičkih. eksplicitne konverzije. ali i na obje varijable u količniku. //daje 1. ako je jedan od operanada realan. ili dodjele tipa (eng. // daje 1.bitovnih i uslovnih izraza. cast). tj. TakoĎer.C++ nudi operatore za izvršavanje aritmetičkih. double jedinicnaCijena = static_cast<double>(cijena)/volumen. old-style cast).5! Čak i u slučaju kada je rezultat dijeljenja definisan kao realan broj.25 56 C++ programiranje za srednje škole prof. ako su oba operanda cijeli brojevi. int volumen = 80. Cjelobrojno dijeljenje predstavlja jednu od najčešćih greški u programiranju. ali je za naš slučaj vaţan operator static_cast (koristi se u slučajevima kada se manjem aritmetičkom tipu pridruţuje veći. double jedinicnaCijena = cijena/volumen. rezultat je takoĎer cijeli broj (tzv.Smajo Mekić . cast operators): static_cast. Ovakav način konverzije u C++ naziva se implicitna konverzija). inkrement i dekrement. Sljedeći primjer pokazuje njegovu primjenu: int cijena = 100. // daje 1 rezultat dijeljenja je cjelobrojan. int volumen = 80.25 Operator static_cast moţe se koristiti i na varijabli volumen. pa je neophodno upoznati načine na koje se moţe zaobići. tu su i veoma korisne "popratne pojave" (eng. a ne -4. 9/2 daje 4.5! -9/2 daje -5. koji su sumirani u Tabeli. onda je i rezultat realan (na primjer. Ovo se moţe ostvariti pomoću tzv. starom načinu pisanja u jeziku C (sa tipom mežu zagradama): double jedinicnaCijena = (double)cijena/volumen. Kada su oba operanda pri dijeljenju cijeli brojevi.

Ovaj fenomen se lako moţe pokazati na slici ako se za tip int pretpostavi da ima 2 bajta. rezultat je neodreĎen. No. 7.Smajo Mekić 57 . stari način pisanja se ne preporučuje u pisanju programa koji će se kompajlirati na C++ kompajlerima. postoje funkcije koje mogu porediti i leksikografsku razliku dva stringa. Operator % daje ostatak pri dijeljenju dva cijela broja (oba operanda moraju biti cijeli brojevi!!!). 13%3 daje 1. tj. C++ programiranje za srednje škole prof. treba zapamtiti da se operatori <= i >= mogu koristiti samo u tom obliku. Dakle. Relacijski operatori se ne smiju korisiti za poreĎenje stringova. vrijednost koju dobivamo je -32768 (!!!). Pri tome. U tom slučaju.2. dobivena vrijednost moţe biti negativna. Ipak. i karakteri su ispravni operandi pošto predstavljaju brojnu vrijednost . a da =< i => ne znače ništa u ovom kontekstu. pošto se u tom slučaju porede njihove adrese. 16 bita (to znači da je maksimalan pozitivan broj jednak 215 = 32767).Relacijski operatori C++ nudi šest relacijskih operatora za računanje brojnih veličina. Operandi nekog relacijskog operatora moraju biti brojevi. npr. u slučaju da zbir brojeva prelazi maksimalno dozvoljenu vrijednost. Prilikom korištenja aritmetičkih operatora veoma vaţno mjesto zauzima pojam preljeva. ukoliko neku varijablu koja ima vrijednost 32767 uvečamo za samo 1. Naime. odnosno za jedan veća od najveće moguće u smjeru kazaljke na satu na slici. a ne sadrţaj.Ipak.

7. a 0 u ostalim slučajevima. svi bitovi koji su jednaki 0 postavlja u 1. tj.Bitovni operatori C++ obezbijeĎuje šest bitovnih (eng. Za razliku od logičkog i i logičkog ili operatora.Smajo Mekić . 7. Bitovni operatori su definisani samo za cjelobrojne (int. ima samo jedan operand kojem daje negaciju vrijednosti koju posjeduje. a 0 u ostalim slučajevima.3. bitwise) operatora koji se koriste za manipulisanje pojedinačnim bitovima cjelobrojnih podataka. binarna negacija (˜ . long int) operand i tretiraju ih kao sekvence bita. rezultat pri korištenju logičkih operatora je 0 (false) ili 1 (true). tj.Logički operatori Za kombinovanje logičkih izraza C++ nudi tri logička operatora. Binarno isključivo ili uporeĎuje odgovarajuće bitove svojih operanada i kao rezultat daje 1 ako su oba bita različita.tilda) predstavlja unarni operator koji mijenja stanje bita operanda. koji su binarni operatori. Binarno i uporeĎuje odgovarajuće bitove svojih operanada i kao rezultat daje 1 ako su oba bita 1. logička negacija je unarni operator. 58 C++ programiranje za srednje škole prof. Slično relacijskim operatorima. Tako.4. a sve bitove koji su jednaki 1 u 0.

ali koja je pomjerena n bitovnih pozicija ulijevo. npr.Operatori pridruživanja Operator pridruţivanja (=) se koristi za pohranjivanje vrijednosti na neku memorijsku lokaciju (koja je obično pridruţena nekoj varijabli). Lijevi operand operatora treba biti neka vrijednost. iako se ova karakteristika veoma rijetko koristi na realnim brojevima. 7. Kada se koristi u postfiksnom obliku. Prvi operator daje kao rezultat sekvencu bita koja je jednaka lijevom operandu. Razlika je velika. a kao desni neki cijeli broj n. oba operatora se mogu koristiti u prefiksnom i postfiksnom obliku. Desni operand se izračuna i pridruţi lijevoj strani. C++ programiranje za srednje škole prof. pri čemu se pretpostavlja da je int k = 5. moţe biti varijabla. dok desni operand moţe biti proizvoljni izraz. Drugi operator ima istu funkciju.Inkrementalni i dekrementalni operatori Takozvani auto inkrementalni (++) i auto dekrementalni (¡¡) operatori obezbijeĎuju prigodan način za povečavanje. Kao što se vidi. lijevaVrijednost. s tom razlikom što pomjera sekvencu bita za n pozicija udesno. jer kada se operator koristi u prefiksnom obliku prvo se primjenjuje operator. Oba operatora se mogu primijeniti kako na cjelobrojne. te zasnovana na pointerima i referencama. on se moţe koristiti kao desni operand za narednu operaciju pridruţivanja. tako i na realne brojeve. a onda se primjenjuje operator. Operator pridruţivanja moţe imati mnogo varijanti. Pri tome lijevaVrijednost predstavlja bilo šta što zauzima neku memorijsku lokaciju na koju se moţe pohraniti neka veličina. Upotreba ovih operatora je sumirana u Tabeli. prvo se računa izraz.5. a onda se u izrazu koristi rezultat. odnosno moţe se napisati: 59 . odnosno smanjivanje brojne varijable za 1. koje se dobivaju njegovim kombinovanjem sa aritmetičkim operatorima (moguća je kombinacija i sa bitovnim operatorima).6.Operatori pomaknuti lijevo i pomaknuti desno kao lijevi operand uzimaju sekvencu bitova. 7.Smajo Mekić Kako operator pridruţivanja sam po sebi predstavlja izraz čija se vrijednost pohranjuje u lijevi operand.

nBroji=0. pointera na funkcije.int m. .Operator razdvajanja (zarez-operator) Operator razdvajanja. Na primjer. pri čemu prvo izračunava lijevi operand. // isto kao: m = (n = (p = 5)) + 2. a zatim desni. a zatim se vrijednost m pohranjuje u min. . Inače. za prirodne. // isto kao: m = m + (n = p = 5)..Smajo Mekić . // isto kao: m = (n = (p = 100)). U ovom primjeru. . To je unarni operator..typedef imena Ključna riječ typedef omogućava definisanje novih imena (sinonima) za postojeće tipove podataka.. m : nBroji++. kao što su kompleksne deklaracije imenika.7. ili m = 100. typedef definicija počinje ključnom riječi typedef. Na primjer: int m. typedef unsigned int prirodni. Ovaj identifikator se moţe koristiti bilo gdje u programu u kojem bi se mogao koristiti i sam tip. ) ili izraz. m = n = p = 5. m =(n= p = 100) + 2. Treba napomenuti da se u posljednjem primjeru identifikator prirodni moţe koristiti kao tip u nekoj drugoj typedef deklaraciji. int mBroji =0. U suprotnom. tj. Opšta formula ima oblik: typedef tip novo_ime_tipa. sljedeći primjer pokazuje korištenje sinonima prirodni. . min. kada je m < n. Ovaj operator ima dva operanda. izračunava se nBroji++. n.sizeof operator Sizeof operator sluţi za računanje veličine bilo kojeg podatka ili tipa. izračunava se mBroji++.} 7. a zatim se vrijednost n pohranjuje u min. identifikator ne uvodi novi tip podatka. pišemo: prirodni N. te pointera na funkcijske članove klasa. n. p. n). nego samo sinonim (nadimak) za postojeći tip. Ovaj rezultat je u potpunosti zavisan od računara na kojem se radi. ili zarez-operator (eng. Ukoliko bismo ţeljeli definisati prirodni broj N korištenjem imena prirodni. nakon čega se ispisuje tip podatka i identifikator.8. min = (m < n ? mBroji++. nenegativne cijele brojeve. 7. typedef imena se koriste kako bi se smanjila kompleksnost ispisivanja pojedinih tipova. char. comma operator) koristimo kada mnogostruke izraze ţelimo kombinovati u jedan izraz. Pri tome. a kao rezultat daje broj bajtova koji operand zauzima u memoriji računara. koji za operand moţe imati tip (npr. Naredni primjer ilustruje korištenje ovog operatora za računanje veličine osnovnih tipova podataka.9. m += n = p = 5. 3 4 int main (void) 5{ 60 C++ programiranje za srednje škole prof... pa tek nakon toga vraća vrijednost posljednjeg kao konačan rezultat. 7. #include <iostream> 2 using namespace std. int. Dakle.

od onih sa najvecim prema onim sa najmanjim prioritetom. 8 cout << "int size = " << sizeof(int) << " bytes\n".Hijerarhija operatora Slično pravilima u matematici o redoslijedu izvoĎenja pojedinih računskih operacija. 10 cout << "float size = " << sizeof(float) << " bytes\n". 9 cout << "long size = " << sizeof(long) << " bytes\n". daje prikaz hijerarhije nekih od operatora operatora u C++ . Pri tome su operatori sa istim prioritetom smješteni u isti blok (odvojen horizontalnim linijama). Stoga se operatori dijele na različite hijerarhijske nivoe. Na primjer.6 cout << "char size = " << sizeof(char) << " bytes\n". pri čemu operatori na višim nivoima imaju prednost nad onim koji su niţe.10. 13 system("pause"). u izrazu 61 C++ programiranje za srednje škole prof.i redoslijed korištenja pojedinih operatora u nekom izrazu u C++ je veoma bitan. 12 cout << "HELLO size = " << sizeof("HELLO") << " bytes\n". 11 cout << "double size =" << sizeof(double) << " bytes\n". 14 } 7.Smajo Mekić . 7 cout << "short size = " << sizeof(short) << " bytes\n".

jer se pojedini operatori koriste za više namjena. imamo izraz: c=a+ ++b. pri čemu je drugi broj prethodno uvećan za jedan. imajući na umu hijerarhiju operatora. Relacijski operator. odnosno c=a+(++b). Ovakav način definisanja hijerarhije je neophodan.Dodati zagrade sljedećim izrazima tako da se pokaže kojim redom se izračunavaju pojedini operatori: a) (n <= p + q && n >= p . što bi. 8.3. a koji su binarni? 2. Tačno ili netačno: u naredbi pridruživanja. c) char c = ’a’ + 2. koji se moţe koristiti kao binarni operator za sabiranje. ţelimo sabrati dva broja. +. 9. prvo se računa c*d. kompajler razumio kao: c=a++ +b.14 . Napisati istu naredbu bez operatora pridruživanja. Pitanja za utvrđivanje: 1. 11.14). na primjer. Šta će biti vrijednost sljedećih varijabli nakon inicijalizacije: a) double d = 2 * int(3.’a’.2 : q / n + 1 : q . ali i kao operator za uvečavanje (postfiks i prefiks inkrement). 7. Napisati izraz koji koristi relacijski operator koji ima vrijednost true ako varijabla var1 nije jednaka varijabli var2. Ako. i na taj način zaobići ugraĎenu hijerarhiju. Operatori && i ||: a) Porede dvije numeričke vrijednosti 62 C++ programiranje za srednje škole prof. a zatim se broj a poveća za jedan.q) c) (n | p & q ˆ p « 2 + q) d) (p < q ? n < p ? q * n . Rezultat mnoţenja se zatim dodaje varijabli b. unarni operator za promjenu znaka nekog broja. b) long k = 3. jer znak mnoţenja * ima veći prioritet od znaka sabiranja + i znaka pridruţivanja =. Šta radi dekrement operator? 4. vrijednost sa lijeve strane od znaka jednako je uvijek jednako vrijednosti na desnoj strani. Objasniti pojam preljeva? 10.Smajo Mekić .q || n == 0) b) (++n * q– / ++p . Tako bi ranije primjere mogli napisati u obliku: a=b+(c*d). Treba napomenuti da u slučaju dvoumljenja oko prioriteta operatora. jer operacija sabiranja ima veći prioritet od operacije pridruţivanja.a=b+c*d. Šta radi inkrement operator? 3. Koji od logičkih operatora su unarni. 13. d) char c = ’p’ + ’A’ . najbolje je koristiti zagrade. Objasni šta radi sljedeća naredba: cout >> --broj! 5. U ovom slučaju.n) 6. a) Pridružuje jedan operator drugom b) Daje Boolean rezultat c) Poredi dva operanda d) Logički kombinuje dva operanda 12. prvo se izvršava sabiranje brojeva a i b. Napisati naredbu koja pomoću operatora pridruživanja povećava vrijednost varijable temp za 23. Tačno ili netačno: potpuno je normalno koristiti različite tipove podataka u istom aritmetičkom izrazu. moţe se desiti da umjesto prethodnog izraza napišemo: c=a+++b. No. što naravno nismo ţeljeli uraditi. Takav primjer je znak plus.

2: int min = (m < n ? m++ : n++). Izvan tog područja ona to više nije. b) omogućuju da se u program uvede područje definisanosti varijable (eng. i ovakva naredba ponekad ima smisla. naredbe pridruţivanja za jednostavne proračune.Smajo Mekić . 63 C++ programiranje za srednje škole prof. kao u sljedećim slučajevima: int i. n=7. itd.1. Mnogostruke naredbe se mogu kombinovati u sloţene naredbe kada se grupišu izmeĎu velikih zagrada ({}).1. cout << min << ’\n’. No. 8. scope). ako je m=5. kao na primjer: { int min. // deklaraciona naredba ++i.). } Ovakve naredbe su korisne iz dva razloga: a) omogućuju da se mnogostruka naredba postavi tamo gdje bi inače mogla da se postavi samo jedna. // naredba sa popratnom pojavom double d = 10.b) Kombinuju dvije numeričke vrijednosti c) Porede dvije Boolean vrijednosti d) Kombinuju dvije Boolean vrijednosti 14.Jednostavne i složene naredbe3 Jednostavna naredba je svaka naredba koja završava tačka-zarezom (. Provjeriti šta je rezultat sljedeće upotrebe uslovnog operatora. tzv. // beskorisna naredba Najjednostavniji oblik naredbe je linija koja sadrţi samo tačka-zarez.5. // deklaraciona naredba d + 5. 3 Preuzeto i obrađeno by Uvod u programiranja u C++ -predavanja na FIT Mostar. Definicije varijabli i izrazi koji završavaju sa tačka-zarezom su samo neki od primjera. i = 10.null-naredba. Kao i večina ostalih programskih jezika. C++ nudi različite vrste naredbi koje se koriste u različite svrhe. Tako se deklaracione naredbe koriste za definisanje varijabli. min = (i < j ? i : j). Područje varijable predstavlja dio programa unutar kojeg varijabla ostaje definisana. 8. j = 20.Naredbe Ovim naslovom opisat ćemo razne oblike C++ naredbi koje sluţe za pisanje programa.

13 system(“Pauase“). Varijanta if naredbe koja omogućuje da se specificiraju dvije alternativne naredbe. 9 if (x % 2 == 0) 10 cout << "Broj je paran" << endl. i ako je rezultat različit od nule izvršava se naredba. izvršava se naredba2.return 0. Primjer 1 Ako ţelimo provjeriti da li je pri dijeljenju djelilac različit od nule i izvršiti dijeljenje. Upravo tu mogućnost pruţa if naredba.Naredba if Ponekad je poţeljno da se izvrši odreĎena naredba koja zavisi od ispunjenja nekog uslova. tj. Na kraju naredbe if ne stavlja se znak tačka zarez .koristimo sloţenu naredbu. upotreba naredbe if ima oblik: if (djelilac != 0) Kolicnik=djelitelj/djelilac.2. U suprotnom. 1 #include <iostream> 2 using namespace std. ništa se ne dešava. što pokazuje i primjer provjere da li je broj paran ili ne: . 8 cin >> x. naziva se if-else naredba i ima oblik: if (izraz) naredba1. 11 else 12 cout << "Broj je neparan" << endl. zapisuje se unutar para okruglih zagrada. } 64 C++ programiranje za srednje škole prof. Ovdje se najprije izvršava izraz. U suprotnom.8. i ako je rezultat različit od nule. sve naredbe stavljamo izmeĎu velikih zagrada. Prvo se izvršava izraz. else naredba2. U slučaju da ţelimo izvršiti više naredbi koje ovise o nekom istom uslovu.Smajo Mekić Uvjet je logički izraz. 3 4 main() 5{ 6 int x. 7 cout << "Unesite neki broj". izvršava se naredba1. čiji je opšti oblik: if (izraz) naredba. jedna koja se izvršava kada je uslov ispunjen i druga kada nije.

00-19. } else cijena = osnovnaCijena. U oba slučaja ispisati apsolutnu vrijednost broja. postoji i ugnijeţdena if naredba. Primjer 2 Treba unijeti cijeli broj različit od 0 pa provjeriti da li je negativan ili pozitivan.Pored prethodno navedenih varijanti. a to je provjera drugog uvjeta (a>0). izračunavanje cijene telefonskog računa: if (vrijemePoziva > 7 && vrijemePoziva < 19) { if (duzinaPoziva <= 60) cijena = duzinaPoziva * tarifa1. U slučaju da je poziv izvršen izvan perioda 7. koja provjerava uslov da li je poziv izvršen u periodu 7.00 sati. nalazi se još jedna if naredba. u kojoj se javlja više od dvije alternative. Ako nije ispunjan niti drugi uvjet (za a=0). Ako je (a<0) izvršit će se prvi blok naredbi. Ako uvjet nije zadovoljen.else.00. recimo.60) * tarifa2.Smajo Mekić . Naredba if else Za dvostruko uvjetno grananje koristi se naredba if . drugi blok naredbi se preskače i izvoĎenje se nastavlja od naredbe return 0. Primjer takve varijante je. 65 C++ programiranje za srednje škole prof. i na osnovu toga formira cijenu istog. Ova naredba ima za cilj da provjerava duţinu poziva. cijena se formira na osnovu osnovne cijene poziva. else cijena = 60 * tarifa + (duzinaPoziva . Kao što se vidi unutar prve if naredbe.00-19. prvi blok naredbi se preskače i izvoĎenje se programa nastavlja od prve naredbe iza bloka.

Ako je vrijednost uvjeta logička istina izvodi se prvi blok. Nakon njegova završetka izvoĎenje se nastavlja od prve naredbe iza drugog bloka. preskače se prvi blok i izvodi se drugi blok naredbi. pa unese broj 0? Rezultat neće biti ispravan: 66 C++ programiranje za srednje škole prof. Primjer3. Nakon njegova završetka izvoĎenje se nastavlja od prve naredbe iza drugog bloka. preskače se prvi blok i izvodi se drugi blok (iza naredbe else). Ako je (a<0) izvršit će se prvi blok naredbi. Što ako korisnik ne pročita uputu paţljivo. Ako je (a>0).Smajo Mekić . Ako je vrijednost uvjeta logička neistina. Primjer je riješen uz pomoć if – else naredbe.

¸ Čestom upotrebom naredbe goto teško je slijediti tok odvijanja programa što oteţava otkrivanje pogrešaka. Naredba na koju se ţeli skočiti. Nredba if-else if-else 67 C++ programiranje za srednje škole prof.Smajo Mekić .Uneseni broj treba provjeriti. Opći oblik naredbe: goto oznaka_naredbe. Naredbu goto stoga treba izbjegavati i nastojati zadatak rješiti na drugi način. oznaka_naredbe:naredba. a potom korisnik mora unijeti novi broj koji je različit od 0. Naredba goto Naredba goto omogućava nastavak odvijanja programa od odabrane naredbe. moţe biti bilo gdje u programu. Naredbu od koje se ţeli nastaviti odvijanje programa treba označiti oznakom iza koje dolazi znak dvotačke. korisnika valja upozoriti. pomoću petlji koje će biti objašnjene kasnije. potrebna je naredba koja omogućava nastavak odvijanja programa od odabrane naredbe. …… …… goto oznaka_naredbe. Ako je unesena 0. Da bi to bilo moguće. od koje se ţeli nastaviti odvijanje programa.

izvršit će se zadnji blok naredbi koji se nalazi iza naredbe else. izvodi se prvi blok naredbi. Primjer4 68 C++ programiranje za srednje škole prof. a potom prva naredba iza zadnjeg bloka naredbi.Broj pustavljenih uvjeta nije ograničen. Ako je vrijednost prvog uvjeta logička neistina. Ako je on logička istina. provjerava se drugi uvjet. Ako je vrijednost prvog uvjeta logička istina.Za višestruko uvjetno grananje koristi se naredba if – else if .Smajo Mekić . Ako je vrijednost drugog uvjeta logička neistina.else. Ako do tada niti jedan od uvjeta nije imao vrijednost logičke istine. Provjere se tako redom nastavljaju sve do naredbe else. izvodi se drugi blok naredbi. i td. Nakon njegova završetka izvoĎenje se nastavlja od prve naredbe iza zadnjeg bloka naredbi. provjerava se treći uvjet.

Smajo Mekić . Višestrukim uvjetnim grananjem provjerava se da li je broj veći. u naredbi switch-case uvjet je cjelobrojan izraz ili cjelobrojna varijabla. manji ili jednak 100.3. Parnost se provjerava operatorom modulo (ostatak dijeljenja s 2 se usporeĎuje s 0). te da li je paran ili neparan.Grananje swich-case.Naredba switch Naredba switch-case omogućava jednostruko grananje koje ovisi o vrijednosti postavljenog uvjeta. Dvostrukim uvjetnim grananjem (neovisno o tome da li je broj veći ili manji od 100) provjerava se parnost broja. Za razliku od višestrukog grananja naredbom if u kojoj su uvjeti logički izrazi. 8.Treba upisati prirodni broj pa provjeriti da li je veći ili manji od 100. 69 C++ programiranje za srednje škole prof.

po redu kako se javljaju. koji odreĎuje opseg osvojenih bodova na ispitu na osnovu dobijene ocjene. a i ne mora da se koristi. break. break. } . a zatim se rezultat poredi sa svakom od numeričkih konstanti (labele). 70 C++ programiranje za srednje škole prof. dok se ne poklopi sa jednom od komponenti. Korištenje ove naredbe dat je u sljedećem primjeru. i pokreće se ako nijedna od prethodnih konstanti nije zadovoljena.. Nakon toga se izvršavaju naredbe koje slijede.Smajo Mekić Opšti oblik switch naredbe je: switch (izraz) { case konstanta_1: naredbe.Prvo se računa izraz (switch tag). case konstanta_n: naredbe. Izvršavanje se izvodi sve dok se ne naiĎe na naredbu break ili dok se ne izvrše sve naknadne naredbe. default: naredbe. . Posljednji slučaj (default) moţe..

Ovisno o tome što korisnik upiše (broj 1 ili broj 2) izvršit će se jedna od dvije grane. break. case 4: cout << "Imate 80 – 89 bodova" << endl. paralelni-2). break. cin >> ocj. Za odabir serijskog spoja korisnik upisuje 1. break. Valja načiniti dvije grane (serijski spoj-1. } } Primjer 5 Treba izračunati ukupni otpor za otpore R1 i R2. system(“Pause“).Smajo Mekić 71 . ispisat će se upozorenje. C++ programiranje za srednje škole prof.return 0. U slučaju da korisnik unese vrijednost koja nije 1 ili 2. break. switch (ocj) { case 5: cout << "Imate 90 – 100 bodova" << endl. cout << "Unesite ocjenu: ". main() { int ocj. ovisno o tome da li su spojeni serijski ili paralelno. case 3: cout << "Imate 70 – 79 bodova" << endl. a za paralelnog 2.#include <iostream> using namespace std. case 2: cout << "Imate 60 – 69 bodova" << endl. default: cout << "Imate ispod 60 bodova" << endl.

Ako se ne upiše broj 1 ili 2 ispisat će se poruka o grešci.Naredba for 72 C++ programiranje za srednje škole prof. 8.Rezultat programskog koda.4.Smajo Mekić .

ali ima dvije dodatne komponente: (i) izraz koji se izračunava samo jednom prije nekog proračuna koji se ponavlja. izraz3. izraz3) naredba. Svakim prolaskom kroz petlju se izračunava izraz2. Bilo koja od komponenti u petlji moţe biti prazna. Po zadavanju početnog stanja kontrolne varijable petlje zapisuje se uvjet.Smajo Mekić . while (izraz2) { naredba. U suprotnom petlja se zaustavlja. odnosno kada je broj iteracija unaprijed poznat. onda je do petlja for (. Nakon toga. Ako je rezultat različit od nule izračunava se izraz3. Treba naglasiti da se umjesto prefiks inkrementa. ekvivalentna sa while petljom . Sljedeći primjer računa zbir svih brojeva od 1 do n: sum = 0. 73 C++ programiranje za srednje škole prof. izračunavase treći izraz.) bilo-sta. kao treći izraz mogao staviti i postfiks inkrement (i++). ako se uklone prvi i treći izraz. i <= n. Pošto petlje predstavljaju naredbe.. ugnijeţdene petlje).). i postupak nastavlja sve dok se ne ispuni uslov i <= n. Prvi izraz u petlji for predstavlja početnu vrijednost brojača i. ++j) cout << setw(5)<< i*j. izračunava se naredba. Svaka for petlja ima svoju kontrolnu varijablu. U ovom slučaju. j <= 10. Rezultat uvjeta je podatak tipa bool (0 ili 1). Kontrolnu varijablu petlje potrebno je prije ulaska u petlju deklarirati. i (ii) izraz koji se izračunava jednom na kraju svake iteracije. cout << endl. i <= 10. Prvo se izračunava izraz1. Naredba for (for petlja) je slična naredbi while.Njena se vrijednost svakim prolaskom kroz petlju mijenja ovisno o vrijednosti prirasta. Kad vrijednost uvjeta postane neistina (0) petlja se prekida. tako da nema potrebe za korištenjem velikih zagrada. koja je jednaka 1. Prvo se vrijednost zbira inicijalizira na vrijednost nula (sum=0. Opšti oblik naredbe for je: for (izraz1. Klasični primjer je korištenje dvostruke petlje pri ispisu tablice mnoţenja brojeva do 10: for (int i = 1. U petlji se najprije zadaje vrijednost početnog stanja kontrolne varijable petlje (početno stanje). } Naredba for se najčešće koristi u situacijama kada se neka varijabla povečava ili smanjuje za neku veličinu u svakoj iteraciji. izraz2. ++i) sum += i. Nakon izvršenja naredbe. mogu se pojaviti unutar drugih petlji (tzv.Blok naredbi se izvršava sve dok je vrijednost uvjeta jednaka logičkoj istini (1). provjerava se uslov i <= n.For petlja se najčešće koristi ako se dijelovi programa trebaju ponoviti unaprijed poznati broj puta. i != 0.) // beskonačna petlja bilo-sta. ++i. Uklanjanje svih izraza u petlji daje beskonačnu petlju: for (. ++i){ for (int j = 1. radi se o jednostavnoj naredbi (sum += i. Na primjer.). Ako je uslov ispunjen. Oblik while petlje koja je ekvivalentna do petlji je: izraz1. while (i != 0) bilo-sta. for (int i = 1.

} U liniji sa ispisom (cout << setw(5)<< i*j. Primjer 1: Ispiši prvih 20 prirodnih brojeva.) korišten je operator za manipulisanje setw().Smajo Mekić . koji se koristi za formatirano ispisivanje. Naime. svaki u svom redu. brojka unutar zagrada (u gornjem primjeru to je broj 5) predstavlja najmanji prostor predviĎen za ispis podataka u izlaznom toku. Rješenje: 74 C++ programiranje za srednje škole prof. Na kraju ispiši i vrijednost varijable i nakon izvoĎenja petlje. Rješenje: Primjer 2: Ispiši parne brojeve od 20 do 450.

koji su djeljivi sa 3.Primjer 3: Ispiši sve prirodne brojeve izmeĎu 1 i N.Smajo Mekić . Rješenje: 75 C++ programiranje za srednje škole prof.

ali to nije uobičajeno. sljedeći primjer. Primjer:Za niz od 5 različitih brojeva ispiši zbir. 76 C++ programiranje za srednje škole prof. upotreba while naredbe ima oblik: i = 1. Opšti oblik ove naredbe je: while (izraz) naredba. while (i <= n) sum += i++. Ako je rezultat različit od nule tada se izvršava naredba (naziva se i tijelo petlje) i cijeli proces se ponavlja. U suprotnom.Smajo Mekić .Naredba while Naredba while (naziva se i while petlja) omogućuje ponavljanje neke naredbe sve dok je ispunjen neki uslov. Na primjer. Prvo se izračunava izraz (naziva se i uslov petlje). sa null-naredbom.5. pokazuje i jedan takav slučaj. sum = 0. Ipak. tako da nema potrebe za tijelom. \\ili {sum = sum + i. ako ţelimo izračunati zbir svih brojeva od 1 do n. problem nalaţenja največeg neparnog faktora nekog broja.8. while (n % 2 == 0 && n /= 2) Ovdje uslov petlje izvršava sve neophodne kalkulacije. proces se zaustavlja. tj.} Tijelo petlje while moţe biti prazno. i = i + 1.

osim što se prvo izvršava tijelo petlje. recimo. Prvo se izvršava naredba. Opšti oblik naredbe je: do naredba. Takav primjer je. U suprotnom.Smajo Mekić . Ako je izraz različit od nule cijeli proces se ponavlja. Primjer:Za niz prirodnih brojeva od 1-N ispiši sumu (zbir) neparnih.8. Naredba do se manje koristi nego while petlja. a zatim se provjerava uslov. 77 C++ programiranje za srednje škole prof. Za razliku od while petlje. a zatim provjerava izraz. Obično se koristi kada se tijelo petlje mora izvršiti najmanje jedanput bez obzira na ispunjenje uslova.Naredba do Naredba do (naziva se i do petlja) je slična naredbi while. } while (n != 0). ponovljeno unošenje nekog broja u primjeru izračunavanja njegovog kvadrata sve dok se ne unese broj 0: do { cin >> n. while (izraz). do petlja se nikada ne koristi sa praznim tijelom prvenstveno zbog jasnoće.6. cout << "Kvadrat broja " << n << " je" << n * n << "\n". petlja se zaustavlja.

78 C++ programiranje za srednje škole prof. Blok nekog koda je odvojen .. do) se izvršava barem jednom? 2. 4. while.. šta će biti rezultat sljedećeg koda: if (n >= 0) if (n < 10) cout << "n je malo\n". Koja od petlji je najbolji izbor kada je broj iteracija poznat? 3. 5.. Dati sintaksu naredbe switch! . Koliko puta se izvršava tijelo do petlje? 9. else cout << "n je negativno\n".. Napiši naredbe za sljedeće: a) provjera da li je broj neparan. Tačno ili netačno: inkrementalni izraz unutar for petlje moţe smanjiti varijablu petlje. Pretpostavljajući da je n = 20. Opiši svrhu tri naredbe unutar for petlje. Koja od petlji (for. c) dati apsolutnu vrijednost nekog broja. 8. 6.Smajo Mekić Pitanja za utvrĎivanje: 1. 7. b) provjera da li je broj neparan i negativan.

 Parametara (ili potpisa).Funkcije Funkcije obezbijeĎuju prikladan način pakovanja nekog numeričkog "recepta".u ovom slučaju radi se o cjelobrojnoj vrijednosti. prvo se računaju argumenti i njihove rezultujuće vrijednosti se pridruţuju odgovarajućim parametrima. return rezultat. jer je i funkcija Stepen cjelobrojnog tipa int1. Poziv funkcije se sastoji od imena funkcije.Korištenje funkcije se izvodi njenim pozivanjem. Unutar ovih zagrada se pojavljuje nula ili više argumenata koji se odvajaju zarezom. pračenim zagradama za pozivanje (). Pri tome. Za dati ulaz x mašina će proizvesti jedinstven izlaz broj ((x + 2) * x). Sljedeći primjer ilustrativno pokazuje definiciju jednostavne funkcije koja izračunava vrijednost stepena cijelog broja na neki cijeli broj. Stepen. Efekt procesa obrade na računaru moţe se posmatrati kao evaluacija funkcija. Nakon toga je dato ime funkcije. proces koji. osim što se parametri ne odvajaju zarezom. da mašina izračuna x + 2. Sintaksa parametara je slična sintaksi definisanja varijabli. Ovo je. Broj argumenata treba odgovarati broju parametara funkcije. koji se moţe koristiti koliko god je to puta potrebno. Nakon toga se izvršava tijelo funkcije.9. Na kraju. unsigned int eksponent) { int rezultat = 1. Na primjer «Ja ću vam dati jedan broj. Funkcija koja ne vraća nijednu vrijednost bi trebala da ima tip void.tijela funkcije. Funkcija Stepen ima dva parametra (baza i eksponent) koji su tipa int. 1 2 3 4 5 6 7 int Stepen (int baza. U matematici.  Tipa. i 2.Definicija Definicija funkcije se sastoji od dva glavna dijela: 1. 9. Tijelo funkcije sadrţi računske korake (naredbe) koji čine samu funkciju. i predstavljaju okosnicu tehnike proceduralnog programiranja. } Linija 1 definiše interfejs funkcije. zatim (x + 2) * x. funkcija vraća vrijednost poziva (ako isti postoji). Slične instrukcije moţete dati i kompjuteru izraţene na nekom programskom jeziku. nakon tipa daje se ime parametra. Vi trebate tom broju dodati 2 i proizvod pomnoţiti sa datim brojem» .1. Interfejs definiše kako se funkcija moţe koristiti. Ona počinje tipom funkcije koji se vraća. jedinstveni identifikator funkcije. proizvodi jedinstven izlaz naziva se funkcija. Zato su funkcije najvaţnija matematička tema u oblasti kompjuterske obrade.zaglavlja ili interfejsa. u stvari. i < eksponent. int . Ovo je niz od nula ili više identifikatora nekog tipa koji se koriste za prosljeĎivanje vrijednosti u i iz funkcije. uzeto je da varijabla eksponent ima samo pozitivne vrijednosti (unsigned int). Kada se izvršava poziv funkcije. kao u: 79 C++ programiranje za srednje škole prof. a zatim lista njenih parametara. ++i) rezultat *= baza.Smajo Mekić . za dati ulaz (odreĎenog tipa). tj. On se sastoji od tri dijela:  Imena. Tada očekujete da broj x unesete. for (int i = 0. Svaki argument je izraz čiji tip treba odgovarati tipu odgovarajućeg parametra u interfejsu funkcije. Ovo specificira tip vrijednosti koji funkcija vraća.

3 4 main(void){ 5 cout << "2 ^ 8= " << Stepen(2. Poziv funkcije. respektivno. U liniji 3 definisana je lokalna varijablu rezultat. Zagrada } u liniji 7 predstavlja kraj tijela funkcije. tako da je za definisanje dovoljno ispisati samo njen prototip. pri čemu tipovi oba argumenta a i b. kompletna definicija funkcije se moţe dati kasnije. U ovom slučaju. 22 } Vidi se da je funkcija Stepen definisana prije glavnog programa (sve funkcije. 1 #include <iostream> 2 using namespace std. 16 cout << "Unesi bazu:". 17 cin >> a. Treba napomenuti da se definicija funkcije sastoji od njenog prototipa.int Stepen (int baza. 20 cout << a<<"^" <<b<<" = " << Stepen(a. 21 system("PAUSE"). i < eksponent. 7 8 for (int i = 0. ++i) 9 rezultat *= baza. Na taj način. eksponent) // Ovo je pogrešno! Zagrada { u liniji 2 predstavlja početak tijela funkcije. dakle prije funkcije main).b. respektivno.b) << ’\n’. odgovaraju tipovima parametara funkcije baza i eksponent. 1 #include <iostream> 2 using namespace std. 10 return rezultat. 11 } 12 13 main () 14 { 15 int a. Primjer 1. tako da moţe da "pokrije" više mogućnosti (veće rezultate. funkcija ima tip double. Naredni primjer pokazuje kako se funkcija poziva (bez definicije funkcije).koje se koriste u nekom programu. a zatim se računa tijelo funkcije. Posljedica poziva funkcije je da se vrijednosti argumenata 2 i 8 pridruţuju parametrima baza i eksponent.b). 6} Kada se program pokrene daje sljedeći izlaz: 2 ^ 8 = 256 Definisanje gore pomenute funkcije moţe se izvršiti na više načina. Primjer 2. 3 4 double Stepen (int baza. 18 cout << "\nUnesi eksponent:". linija 20. 80 C++ programiranje za srednje škole prof. int eksponent) 5{ 6 double rezultat = 1. vrši se pomoću Stepen(a.Smajo Mekić . decimalne brojeve kao rezultat). moraju se definisati prije glavnog programa. U liniji 6 vraća se vrijednost rezultat kao rezultat funkcije.8) << ’\n’. kao što ćemo pokazati u narednim primjerima. 19 cin >> b. Rezultat se pohranjuje u varijablu rezultat (linija 5). Stepen varijable baza na varijablu eksponent pomoću for petlje se računa u linijama 4 i 5.

16 cout << "\nUnesi eksponent:". 15 cin >> a. Vaţno je napomenuti da je u ovom slučaju neophodno staviti tačka-zarez (. ali to nije preporučljivo. Sjetimo se da se nakon definisanja funkcije ne stavlja tačka-zarez nakon zagrade }. int).h. int eksponent). ako je definicija funkcije Stepen data u datoteci StepenInt. čitava definicija funkcije data je linijama 22-29. 81 C++ programiranje za srednje škole prof. funkcija je definisana u liniji 4. TakoĎer je moguće izostaviti nazive parametara u definiciji. treba samo pročitati tu datoteku.tj.Smajo Mekić 1 #include <iostream> 2 using namespace std.b. 25 26 for (int i = 0. i < eksponent. 28 return rezultat. jer linija 4 predstavlja naredbu. koja zatvara tijelo funkcije.kao što je pokazano u narednom primjeru. 19 system("PAUSE"). 3 4 double Stepen (int baza. Radi preglednosti veoma je korisno sakupiti sve funkcije u posebne datoteke. Primjer 3. 20 } 21 22 double Stepen (int baza.) nakon definisanja. ++i) rezultat *= baza. 5 // deklarisanje funkcije 6 7 /* moguce je funkciju daklarisati i na sljedeci način 8 double Stepen (int. \\ sadrzaj datoteke StepenInt. i umjesto njihovog definisanja u sklopu izvršne datoteke.b) << ’\n’. 29 } . i < eksponent. int eksponent) { int rezultat = 1.h int Stepen (int baza. 18 cout << a<<"^" <<b<<" = " << Stepen(a. int eksponent) 23 { 24 double rezultat = 1. koristeći njen potpis. Dakle. ++i) 27 rezultat *= baza. for (int i = 0. 14 cout << "Unesi bazu:". 17 cin >> b. 9 */ 10 11 main () 12 { 13 int a. Na primjer.

Na primjer. ovo neće promijeniti vrijednosti argumenata. U suprotnom. system("PAUSE"). u prethodnom primjeru interfejs funkcije. path). x = 10. potrebno je dodati simbol & (ampersand) ispred varijable koja je parametar u interfejsu funkcije. ako funkcija napravi bilo kakvu promjenu na parametrima.b. system("PAUSE"). U primjeru koji je dat. to nece utjecati na varijablu x.Parametri i argumenti C++ podrţava dva oblika parametara: vrijednost i referencu. Funkcija(x).2.h” using namespace std.return rezultat. } kao lokalna varijabla u funkciji. Parametar po vrijednosti prima kopiju vrijednosti argumenata koja im se prenosi.h nalazi. } int main () { int x = 10. Da bismo definisali parametar po referenci. } Ovdje treba paziti gdje se datoteka StepenInt. cin >> a. } onda prethodni program ima oblik: #include <iostream> #include “StepenInt. Kao posljedica toga. Bilo koja promjena parametra po referenci u samoj funkciji. cout << "\nUnesi eksponent:". u programu: #include <iostream> using namespace std.direktno se odnosi i na argument. 9.b) << ’\n’. iako varijabla broj u funkciji mijenja vrijednost na 0. ona se nalazi u istom direktoriju kao i izvršna datoteka. parametar po referenci prima argumentkoji se prenosi i sve obavlja direktno na njemu. Za razliku od parametra po vrijednosti. main () { int a. tj. void Funkcija (int broj) { broj = 0. treba dati tačnu lokaciju iste (eng. Kada se funkcija pozove i vrijednost x se prenese. cout << "broj = " << broj << ’\n’. cout << "Unesi bazu:". cin >> b. Funkcija ima oblik: void Funkcija (int &broj) 82 C++ programiranje za srednje škole prof. cout << "x = " << x << ’\n’. tj.Smajo Mekić . Program će dati sljedeći izlaz: broj = 0. return 0. Kao rezultat toga. cout << a<<"^" <<b<<" = " << Stepen(a. i on se mijenja. varijabla broj primi kopiju vrijednosti varijable x.

Na primjer. nepristupačna unutar funkcije. oni moraju biti jedinstveni na nivou programa. pošto je poništena lokalnim parametrom greška. Tako.Smajo Mekić . kao u void Funkcija (int& broj). 9. // globalna funkcija int main (void){ // globalna funkcija //.Svaki blok u programu definiše lokalno područje. dok se lokalne varijable kreiraju kada se uĎe u njihovo područje. Pošto su globalni entiteti "vidljivi" na svim programskim nivoima. } } // xyz je globalna varijabla // xyz je lokalna varijabla // u tijelu funkcije // xyz je lokalna varijabla u ovom bloku //. Varijable koje su definisane unutar lokalnog područja su vidljive samo u tom području. tj.i na programeru je da odabere način koji mu više odgovara.3. U praksi (u pogledu funkcija) se mnogo više koristi pridruţivanje prema vrijednosti. a uništavaju kada se iz njega izaĎe... dok je memorijski prostor za lokalne varijable alociran "u hodu" u toku izvršenja programa. na primjer. pri cemu unutrašnje područje poništava vanjsko. \\globalna varijabla void Greska (int greska) { \\lokalna varijabla //.. Lokalno područje moţe da bude ugnijeţdeno. ţivotni vijek varijable je ograničen na područje iste.Globalne i lokalne varijable Za sve što se definiše izvan programskog područja (scope) se kaţe da ima globalni karakter.int). // globalna varijabla int Maksimum (int. kao u primjeru 83 C++ programiranje za srednje škole prof.. Globalni entiteti su općenito pristupačni bilo gdje u programu. Tako. ako ni zbog cega drugog onda zbog preglednosti programa. u int greska. Parametri funkcije imaju isto područje kao i tijelo funkcije. Greska. imamo tri različita područja... kao što se i očekuje. } Treba zapamtiti da su globalne varijable automatski inicijalizirane na vrijednost nula. void Funkc (int xyz) Funkc { if (xyz > 0) { double xyz. Na primjer: int godina = 1994. U principu. i varijable se mogu definisati u globalnom području. Na primjer: int xyz. razlikujemo dvije vrste pridruţivanja: pridruţivanje prema vrijednosti i pridruţivanje prema referenci.izvan svih funkcija koje se koriste u programu. globalne varijable traju svo vrijeme izvršenja programa. iako se ime funkcije moţe definisati više puta sve dok su im parametri (njen potpis) jedinstveni . Pošto lokalno područje poništava globalno.Moguće je simbol & staviti i iza tipa varijable broj. No. tijelo funkcije predstavlja lokalno područje. a na osnovu prethodno iznesenog. uključujući i funkciju main. od kojih svaki ima različitu varijablu xyz. to lokalne varijable sa istim imenom kao globalne varijable onemogućavaju pristup globalnim varijablama unutar lokalnog područja. vaţno se uvijek drţati istog pravila.Ovaj problem se moţe prevazići korištenjem unarnog operatora područja (unary scope operator). Memorijski prostor za lokalne varijable je rezervisan prije izvršenja programa. Na taj način. sve funkcije koje smo do sada koristili predstavljaju globalne funkcije. To znači da se globalne varijable ili funkcije na globalnom području ne mogu definisati više nego jedanput.Općenito. U kontekstu pozivanja funkcija. koji globalni entitet uzima kao argument. } globalna varijabla greška je.

sve rekurzivne funkcije se mogu napisati koristeći iteracije...funkcija radi sa originalnim argumentima iz programa koji poziva funkciju. n!=n(n-1)! Posljednji dio definicije jasno pokazuje da je faktorijel definisan u odnosu na samog sebe. na primjer. } 9. problem računanja faktorijela je primjer rekurzivne funkcije. 84 C++ programiranje za srednje škole prof. Na primjer. return rezultat. naziva se . if (::greska != 0) // odnosi se na globalnu varijablu // greska //... No. b) od tačke definisanja nadalje u funkciji. Varijabla definisana unutar bloka je ’vidljiva’: a) od tačke definisanja nadalje u programu. c) od tačke definisanja nadalje u bloku. Opis funkcije dat jednom naredbom. Da li funkcija moţe imati više od jedne return vrijednosti? 4.. while (n > 0) rezultat *= n--. 10. iterativna opcija je bolja. d) u cijeloj funkciji.Rekurzivne funkcije Za funkciju koja poziva samu sebe kaţemo da je rekurzivna. treba imati u vidu da u slučaju velikog broja poziva funkcija (u primjeru faktorijela je to veliki broj n). te se stoga moţe predstaviti rekurzivnom funkcijom. npr. Rekurzija je opšta programska metoda koja se primjenjuje na probleme koji se definišu u odnosu na same sebe. } U principu. } Pitanja za utvrĎivanje: 1. 7.... pa je upotreba iteracija bolje rješenje... koja započinje definiciju funkcije.. void Greska (int greska) { //. Da li je moguće da funkcija nema ni argumente ni return vrijednost? 5. 8. Nakon imena funkcije slijedi ... Da li funkcija moţe imati i argumente i return vrijednosti? 6.. funkcije. u nekim slučajevima elegantno i jednostavno rekurzivno rješenje moţe da bude bolja opcija. Faktorijel je definisan sa:  Faktorijel od 0 je 1. Da li funkcija moţe imati više od jednog argumenta? 2. dolazi do zauzimanja velikog memorijskog prostora (tzv. Tijelo funkcije je odvojeno . U slučaju faktorijela..Smajo Mekić . Da li funkcija mora imati return vrijednost? 3... Tačno ili netačno: kada se argumenti funkcije prenose po vrijednosti.  Faktorijel pozitivnog broja n je n puta faktorijel od n-1. Naime.4. 9. Skup naredbi koji obavlja radnje neke funkcije predstavlja . 11. pa bi funkcija imala oblik: int Faktorijel (unsigned int n) { int rezultat = 1. int Faktorijel (unsigned int n) { return n == 0 ? 1 : n * Faktorijel(n-1). tj.int greska.. runtime stack ).

Jednodimenzionalni niz Polje se sastoji od niza objekata (nazivaju se i elementi polja). niz rezultati koji se sastoji od 5 elemenata tipa int moţemo grafički predstaviti ovako: 85 C++ programiranje za srednje škole prof. Nizovi omogućavaju brz (random access) pristup pojedinim elementima.dozvoljavaju predstavljanje samo pojedinačnih vrijednosti. Često pri rješavanju problema iz stvarnog svijeta trebamo predstaviti skupinu vrijednosti koje su sve istog tipa. Broj elemenata u polju naziva se dimenzija polja. Kao i varijable. b) funkcija ne moţe pristupiti vrijednosti argumenta. individualnih objekata.Smajo Mekić . koji pokazuje poloţaj nekog elementa u polju. na primjer:  Prosječne količine padavina za svaki mjesec  Ocjene svih učenika u razredu  Stanje prodaje za svaki dan u sedmici. tabela gradova i njihovih sezonskih temperatura. veličina niza (obavezno neka konstantna vrijednost).12. Polja su pogodna za predstavljanje podataka koji se sastoje od mnogo sličnih. koji su istog tipa i zauzimaju neprekidan memorijski prostor. Sintaksa deklaracije niza izgleda ovako: tip ime_niza [broj_elemenata]. Koliko vrijednosti se moţe vratiti iz funkcije? 14. Tačno ili netačno: kada funkcija vraća vrijednost. Svaki element je identificiran njegovim indeksom. int. float.Dimenzija polja je fiksirana i prethodno odreĎena. c) kreira se privremena varijabla u programu koji poziva funkciju da pohrani vrijednost argumenta. niz moramo deklarirati prije nego ga upotrijebimo. Primjeri za to su lista imena.  tip moţe biti bilo koji validni tip podatka u C++(npr.Niz je struktura podataka koja omogućava pohranu niza vrijednosti. 10. Tipovi poput „int“.. cijeli poziv funkcije se moţe pojaviti na desnoj strani znaka jednakosti i pridruţiti drugoj varijabli. itd U jeziku C++ takve skupine vrijednosti predstavljamo pomoću nizova.)  ime niza je bilo koji validan identifikator u C++  u uglatim zagradama[] se nalazi broj elemenata niza tj. Šta znači kada se koriste prazne zagrade () u definiciji funkcije? 13. Kada se argument prenosi po referenci: a) kreira se varijabla u funkciji da pohrani vrijednost argumenta. a ne njegovi elementi. d) funkcija pristupa originalnoj vrijednosti argumenta u programu koji je poziva.. „double“ i sl. i slično.1. Na primjer: int rezultati [9]. samo polje ima simboličko ime. Vrijednosti su pohranjene u kontinuirani blok memorije.Polja (Arrays)ili nizovi 10. i ne moţe se promijeniti u toku izvršenja programa. Gdje se specificira tip vrijednosti koji se vraća nekom funkcijom? 16. 15. Općenito.

++i) srednja += broj[i]. elementi niza nemaju nikakvu precizno odreĎenu vrijednost sve dok se eksplicitno ne izvrši dodjela. tako da je uz pretpostavku da je „n“ cjelobrojna varijabla. ++i) srednja += broj[i]. Na primjer.deklaracija poput double prosjek[n]. u uglatim zagradama: Na primjer: rezultati [5]= 21. ako je „n“ varijabla. Indeks se navodi nakon imena niza. Još jedan primjer u kojem se dimenzija polja moţe izostaviti je kada je neko polje parametar u nekoj funkciji. nije dozvoljena. koja ide kroz polje od elementa do elementa. kod globalno deklariranih nizova članovi niza se automatski inicijaliziraju nulama. 2. return srednja/velicina. Zagreb. Ne moţemo jednom naredbom ispisati čitav niz na ekran. Kod nizova isključivo pristupamo pojedinačnim elementima. double Srednja (int broj[]. Procesiranje bilo kojeg polja obićno uključuje korištenje petlje. moţe se vršiti i nad individualnim elementima niza. B. return srednja/velicina. Indeksi niza koji ima n elemenata se kreću od 0 do n-1. kada pristupamo elementima niza. 49 }. tj. 2. i < velicina.Smajo Mekić .Deklaracija nizova4 Prilikom deklaracije nizova. } 4 Preuzeto i prilagođeno by Motik. J. unutar uglastih zagrada mora se nalaziti nešto čija je vrijednost konstantna. bilo pomoću unosa sa tastature. Bilo koja operacija koja se moţe vršiti nad varijablama običnog tipa. 86 C++ programiranje za srednje škole prof. ako se postavi da dimenzija polja nije fiksirana na neku konstantnu vrijednost. Na primjer: int rezultat [9] = { 16. kao i kod običnih varijabli. Demistificirani C++. double Srednja (int broj[velicina]) { double srednja = 0. funkcija Srednja se moţe napisati na bolji način. indeks u zagradi moţe biti proizvoljan cjelobrojni aritmetički izraz. int velicina) { double srednja = 0. } 10.Svaki element niza je varijabla . U oba slučaja ( i lokalno i globalno) pri deklaraciji niza imamo mogućnost dodijeliti inicijalne vrijednsti svakom elementu niza. 77. nego se doda još jedan parametar. 22. Tako. for (int i = 0. for (int i = 0. bilo pomoću operatora dodjele „=“. niti jednom naredbom unijeti cijeli niz sa tastature. Nizovi su sloţeni tipovi (non-scalar types) podataka. sljedeći izraz potpuno legalan: prosjek [2*n-3] = 13. 18. MeĎutim.7. Element. izdanje edition. odreĎena svojim indeksom. poput broja ili konstante deklarirane sa „const“. 1207.3. and Šribar. dok je ista deklaracija dozvoljena u slučaju da je „n“ konstanta.Inicijalizacija niza Kad deklariramo niz lokalno (npr u funkciji). 103. Sljedeći primjer pokazuje funkciju koja računa srednju vrijednost elemenata nekog polja od tri cjelobrojna elementa: const int velicina = 3. i < velicina. a nikad nizu kao cjelini. 10. 2001.2. 40. cout<<rezultati [5]. S druge strane.

1#include <iostream> 2 using namespace std. Pri tome. 12 for (i = 0.Vidi se da se pomoću definicije int broj[] omogućava veća fleksibilnost dimenzije polja. i < n. 3 int main () 4{ 5 // DEFINISANJE 6 int x[10].Smajo Mekić 87 . 17 } 18 // SORTIRANJE 19 for (i = 0. 16 y[i] = x[i]. " << i << ": ". sortiranje je izvedeno od najvećeg prema najmanjem elementu niza. i++) C++ programiranje za srednje škole prof. 7 int y[10]. 8 int i. 15 cin >> x[i]. j. 11 cin >> n. i++) 13 { 14 cout << "Unesite clan br. 9 // UNOSENJE 10 cout << "Unesite broj clanova polja (<10): ". i < n-1. pa je kompletan program u tom slučaju: Sljedeći program predstavlja primjer pomoću kojeg se unosi. sortira i ispisuje neki niz. n.

’A’}. respektivno. i < n. ostali elementi su inicijalizirani na nulu. ovdje o tome neće biti riječi. Završni prazan karakter postavlja kompajler. 10. 15}.U tu svrhu koriste se zagrade {}. // broj[2] je inicijaliziran na 0 88 C++ programiranje za srednje škole prof. To su. S obzirom da se radi o specijalnoj klasi u C++ . j++) { if (y[i] < y[j]) swap(y[i]. vrijednosti elemenata polja se mogu inicijalizirati. 15. u C++ je ugraĎen i tip string. ’Z’. definiše varijablu str kao niz od sedam (7) karaktera: šest slova i jedan prazan karakter (nullkarakter). Broj elemenata navednih u vitičastim zagradama mora biti jednak broju elemenata koje smo naveli u uglatim zagradama. } } // STAMPANJE cout << "x:" << ’\t’ << "y:" << endl. i inicijalizira tri elementa ovog polja na vrijednosti 5. 2. eksplicitno inicijaliziranje. jer svaki pravilno inicijalizirani niz karaktera mora obavezno da završi null-karakterom. int rezultat [ ] = { 16. 22. za pohranjivanje testova se koriste znakovna polja (eng. definiše varijablu str kao niz od 6 elemenata. int broj[3] = {5. Na primjer. znakovnih polja. string).y[j]). sadrţaj se stavlja izmeĎu znaka dvostrukih navoda .20 21 22 23 24 25 26 27 28 29 30 31 32 { for (j = i+1. i++) { cout << x[i] << ’\t’ << y[i] << endl. ’D’. for (i = 0. Osim ovakvog predstavljanja riječi. TakoĎer. ’O’. kao u slučaju: int broj[3] = {5. } } U ovom primjeru je za zamjenu vrijednosti varijabli korištena funkcija swap (linija 23). 103. Kao i kod ostalih varijabli. 40. C++ dozvoljava i sljedeće: ukoliko pri inicijalizaciji ostavite uglate zagrade prazne kompjaler će pretpostaviti da je veličina niza jednaka broju vrijednosti navedenih u vitičastim zagradama. 77. Treba naglasiti da prethodni primjer nije ispravan. u stvari. Kao što je ranije rečeno. Prilikom inicijalizacije ovakvih polja. 49 }. 18. Zarazliku od toga. Kada je broj vrijednosti u inicijalizatoru manji od dimenzije polja. 10. polja čiji elementi imaju tip char. Ovo je tzv. ’R’. Na primjer: "char str[] = "VOZDRA". što pripada objektnoorijentisanoj paradigmi. mada programer sam moţe definisati sličnu funkciju. char str[] = {’V’. ovakav način inicijaliziranja je neefikasan u odnosu na prvi. koji manipuliše sa znakovnim poljima. 10}. j < n.Smajo Mekić . definiše polje broj. 1207. tj. izmeĎu kojih se specificira lista početnih vrijednosti elemenata polja koje su odvojene zarezom.

Neka se bitna svojstva niza statističkih podataka mogu izraziti pomoću nekoliko statističkih parametara: a) za dani se niz podataka n-1 . dimenzija polja postaje suvišna i moţe se izostaviti. Niz je uredeni skup koji sadţi odreĎeni broj elemenata istoga tipa T. Sada ćemo objasniti osnovne elemente upotrebe niza kao parametra funkcije: Navedimo nekoliko primjera: 1. U ovom slučaju inicijalizacija polja broj se moţe izvršiti i na sljedeći način: int broj[] = {5. // dimenzija nije potrebna 10. Vidjeli smo osnovne karakteristike jednodimenzionalnog niza. 10. Najčešće su to nizovi podataka istog tipa (realni ili cijeli brojevi).Pristup elementima niza Moguće je pristupiti bilo kojem pojedinačnom elementu niza (kao bilo kojoj običnoj varijabli) jednostavnim navoĎenjem imena niza i indeksa ţeljenog elementa: ime [indeks] 89 C++ programiranje za srednje škole prof. pritom vrijeme pristupa ne ovisi o vrijednosti indeksa. Nekom se elementu niza pristupa navoĎenjem njegovoga indeksa. a ako ţelite dodijeliti vrijednost trećeg elementa niza varijabli a. 15}. pa su nizovi prikladne strukture za njihov prikaz. Zašto indeks trećeg elementa ima vrijednost 2? Prvi element niza ima vrijednost indeksa . S nizom se moţe manipulisati kao sa cjelinom. moţete pisati: a = rezultati[2]. U znanstvenim i tehničkim primjenama često se pojavljuju velike količine podataka (naprimjer rezultata raznih mjerenja) koje treba srediti i klasificirati. Trebamo naći element niza koji ima maksimalnu vrijednost 2. ako ţelite pohraniti vrijednost 75 kao treći elment niza billy moţete napisati sljedeće: rezultati[2] = 77. tj. Primjećujete da je treći elment niza rezultati specificiran sa rezultati[2].4.Kada se koristi potpuni inicijalizator (broj početnih vrijednosti odgovara dimenziji polja). broj elemenata je implicitan u inicijalizatoru – implicitna inicijalizacija. ali se takoĎer moţe i pristupati pojedinim njegovim elementima. Dakle. polje ili niz je najjednostavnija struktura podataka . Vaţno je upamtiti da prvi element niza koji sadrţi n elemenata ima indeks 0. a posljednji indeks n-1.Smajo Mekić Na primjer. U jezicima C i C++ za pristup i_tom elementu niza a pišemo a[i]. Elementi niza se u memoriji računala pohranjuju u n uzastopno smještenih varijabli odreñenoga tipa T.

U C i C++ programskom jeziku ime niza „sadrţava“ adresu prvog (sa indeksom 0) člana. Dakle. for (int i=1. . } Poziv funkcije iz glavnog programa biće imax(x. za član niza sa maksimalnom vridjenošću funkciju double max(double x[]. s time da je int n poznat (definiran kao konstanta).90 C++ programiranje za srednje škole prof. Navedemo li. Medutim ako bi tako radili sa nizom kao parametrom funkcije trebali bi u funkciju iskopirati vrijednosti svih njegovih elemenata (kopiranje u novi privremeni niz) što bi nepotrebno produljilo vrijeme izvoñenja programa i gubitak memorijskoga prostora. parametri funkcije su ime niza i veličina niza. Znamo da se takvo prenošenje argumenta u funkciju naziva poziv po vrijednosti. i<velicina. i++) if (x[i]>x[imax]) imax=i. int velicina) 2. int velicina). kao argument naziv neke varijable. pri pozivu funkcije. Funkcija za zadatak 1 je: int max(int x[]. njezina se vrijednost pridruţuje parametru funkcija (barata sa kopijom vanjske varijable). int velicina) { int imax=0. velicina). a) za izračunavanje aritmetičke sredine napisati ćemo funkciju koju ćemo nazvati double: double mean(double x[].Smajo Mekić Za izračunavanje ćemo koristiti funkcije: 1. Radi toga niz u funkciju prenosimo referencom ali ne kristimo operator adrese & kao kod varijabli. return(imax).

Smajo Mekić 10.5.91 C++ programiranje za srednje škole prof.Multidimenzionalna polja(nizovi) .

20. a ostali su jednaki nuli. 10. 11. bolja opcija je korištenje ugnijeţdenog inicijalizatora.kao na slici. Ovo je u memoriji predstavljeno kao neprekidan niz od 12 elemenata tipa int . moţe to zamisliti kao tri reda od po 4 elementa u svakom. 4} }. 11. Programer.Smajo Mekić Pošto se ovo dvodimenzionalno polje mapira kao jednodimenzionalni niz od 12 elemenata. C++ programiranje za srednje škole prof. meĎutim. Kao i kod jednodimenzionalnih polja (nizova).pa je percepcija programera nešto drugacija od one koja se nameće na prvi pogled (kao multidimenzionalna). 12. 13. 4 }. neophodan je dodatni indeks za svaku dimenziju. ako je samo prvi element svakog reda različit od nule. Na primjer. {13. tri. 1}. {24}. 1. organizacija polja u memoriji je ista kao i prije. {28}}. 3. Na primjer. kao u: int godDobTemp[3][4] = { {10. 3}. pošto ne samo da je pregledniji. Ipak. kao u: int godDobTemp[][4] = { 92 . Na primjer. tj. {14. Inicijalizacija polja se moţe obaviti pomocu ugnijeţdenog inicijalizatora. 20. i više). Također je moguće izostaviti prvu dimenziju (implicitna inicijalizacija). data je elementom godDobTemp[2][1]. 23. i ovdje se elementima pristupa preko indeksa. 12. pretpostavimo da je srednja vrijednost temperatura po godišnjim dobima za tri bosanskohercegovačka grada data tabelom: Ovo se moţe predstaviti dvodimenzionalnim poljem cijelih brojeva: int godDobTemp[3][4]. moguće je koristiti i sljedeći način: int godDobTemp[3][4] = { 10. 21. neprekidna sekvenca elemenata. 21. 10.Polje moţe da ima i više nego jednu dimenziju (dvije. Ipak. No. nego daje i dodatne mogućnosti. moţemo koristiti: int godDobTemp[3][4] = {{26}. srednja temperatura u Zenici u toku ljeta. 14. 23.

const int redovi = 3. 10. for (int i = 0. int godDobTemp[redovi][kolone] = { {72. 21. 21. const int kolone = 4. i < redovi. 12. 11.Smajo Mekić #include <iostream> using namespace std. 23. 4} }. {14. 11. 20. } Napomena: Treba paziti kako se inicijalizira vrijednost kontrolne varijable najveća u prethodnom primjeru. 56.umjesto pretpostaviti neku konačnu vrijednost (na primjer 0). } main () { cout << najTemp(godDobTemp) << "\n". j < kolone. Procesiranje multidimenzionalnih polja je slično jednodimenzionalnim. 20. s tim da se moraju koristiti ugnijeţdene petlje. 11}. system("PAUSE"). Sljedeći primjer pokazuje pronalaţenje maksimalnog elementa u dvodimenzionalnom polju iz prethodnih primjera. int najTemp (int temp[redovi][kolone]) { int najveca = temp[0][0]. 10. {13.{10. {14. ++j) if (temp[i][j] > najveca) najveca = temp[i][j]. 3}. return najveca. pravilno je postaviti na prvi član polja. takoĎer petljom for 93 C++ programiranje za srednje škole prof. 3}. . Primjer 1: Unesi N članova niza X pomoću for petlje te ih zatim ispiši na ekranu računara. 1}. 4} }. 66. ++i) for (int j = 0. {13.

} /*ispis članova niza for petljom*/ /*ispis i. } system ("PAUSE").Smajo Mekić 11.1.Pointeri(Pokazivači) 11. Da li neko polje moţe sadrţavati i cijele brojeve. Koja su dva načina inicijalizacije polja? C++ programiranje za srednje škole prof.tog člana niza*/ /*ispis praznog retka (end line)*/ Pitanja za utvrĎivanje 1.i<N. cout <<endl.i++) { cout << X[i].N. 94 . for (i=0. int X[10]. Koji je indeks prvog elementa u nizu? 3. /*deklaracija niza od 10 cijelih brojeva*/ cout<<"Zadaj 0<N<10 = ". Koji je indeks posljednjeg elementa u nizu? 4.Osnovno o pointerima5 5 Preuzeto i obrađeno by Osnove programiranja u C++ -Aleksandar Karač. int main() { int i.i++) /*upis članova niza*/ { cin>>X[i]. return 0. /*broj N mora biti manji od 10 jer je deklariran niz od maksimalno 10 članova*/ cin >>N. /*upis i-tog člana niza*/ } for (i=0. Koja je razlika izmeĎu inicijalizacije i pridruţivanja? 5.i<N.#include <cstdlib> #include <iostream> using namespace std. realne brojeve i karaktere? 2.

Općenito. // pointer karaktera Vrijednost pointera varijable je adresa na koju pokazuje. programski stog se često naziva statička memorija. linkovane liste i sl. char *str = new char[10]. kaţemo da ptr1 pokazuje na num. Ova memorija se koristi za dinamičko alociranje memorijskih blokova u toku izvršenja programa.2. respektivno. tip pointera mora odgovarati tipu podatka na koji taj pointer pokazuje. ili one podatke kojima tip u početku nije poznat. scope rules) kao normalne varijable. koji se koristi za pohranjivanje globalnih varijabli. Bez obzira na tip. On vraća pointer na alocirani prostor. S druge strane. pa je time ekvivalentan num. ako se uzme da je: int num. kada funkcija Funkcija 95 C++ programiranje za srednje škole prof. Izraz: *ptr1 dereferencira ptr1 da bi se dobilo ono na šta on pokazuje. Zbog toga se ova memorija često naziva i dinamička memorija. koji se naziva hrpa (eng.). int *ptr = new int. on uzima varijablu kao argument i vraća memorijsku adresu te varijable. 11. Pointer se moţe konvertovati (pomoću cast) u neki drugi tip. i za obiljeţavanje kraja struktura sa podacima koji se zasnivaju na pointerima (na primjer. // pointer cijelog broja char *prt2. Na primjer.Pointeri (pokazivači) predstavljaju adresu neke memorijske lokacije i omogućuju indirektni način pristupa podacima u memoriji. Ovakav pointer se naziva null-pointer. Na primjer. on uzima pointer kao argument i vraća sadrţaj memorijske lokacije na koju pokazuje. na raspolaganju je i drugi vid memorije. Simbol & (ampersand. te blokova stogova za pozivanje funkcija. Operator new kao argument uzima tip i alocira memorijski prostor za objekat tog tipa. stack ). heap). Ovo je veoma korisno pri definisanju pointera koji mogu pokazivati na podatke različitih tipova. konvertuje ptr1 u pointer karaktera prije nego se pridruţi pointeru ptr2. pointer tipa void odgovara bilo kojem tipu.Dinamička memorija Pored programskog stoga (eng. Memorija koja se alocira iz hrpe ne ispunjava ista pravila područja definisanosti (eng. Na primjer. pointeru se moţe pridruţiti vrijednost 0. Simbol * je operator dereferenciranja. možemo pisati: ptr1 = &num. Na primjer. ptr2 = (char*) ptr1. Pointer varijabla se definiše pokazivanjem na podatak odreĎenog tipa. Dijagramski prikaz ovog pridruţivanja datje na slici Uzimajući da ptr1 pokazuje na num. int *ptr1. Efekt prethodnog pridruţivanja je da je adresa varijable num pridruţena pointeru ptr1. Na primjer. Na taj način. Nullpointer se koristi za inicijalizaciju pointera. alociraju prostor za jedan cijeli broj i prostor koji je dovoljno velik da pohrani niz od deset karaktera. znak i) je adresni operator.Smajo Mekić . Za alociranje i dealociranje memorijskih blokova u hrpi (još se naziva i javna memorija) koriste se dva operatora. MeĎutim.

1 2 3 4 5 6 7 #include <string> char* CopyOf (const char *str) { char *copy = new char[strlen(str) + 1]. karakter po karakter.3. kompajler vrijednost indeksa dodaje pointeru na prvi elemenat.Ime varijable cijeliBroj ima smisao pointera na prvi elemenat polja cijeliBroj[0]..Pointeri i polja Pointeri i polja su u jeziku C++ povezani. ali se i ne oslobodi. uvijek postoji mogućnost da se dinamička memorija "potroši" u toku izvršenja programa. potpuno je bezazleno primijeniti ovaj operator na null-pointer. oslobaĎa se prostor samo jednog elementa niza. koristio prvi pristup. kopira drugi argument na prvi. rad sa iznimkama. daje broj karaktera njenog argumenta (koji je tipa string) do posljednjeg null-karaktera. kao što je već poznato. treba dodati još jedan karakter i alocirati niz karaktera te velicine (sa tim brojem karaktera). Operator delete se koristi za oslobaĎanje memorijskog prostora koji se alocira pomoću new. strcpy(copy. } 11. ali memorijski prostor koji pokazuje na str nije. lokalna varijabla str je uništena. prevodi kao int broj = *(cijeliBroj+3). definišemo jednodimenzionalno polje cijelih brojeva tipa int sa deset članova. //. 96 C++ programiranje za srednje škole prof. daje praktičan primjer šta i kako raditi sa ovim problemima. str). Na primjer. Funkcija strcpy. S druge strane..Smajo Mekić U linija 1. U slučaju da operator new ne moţe da alocira prostor potrebne veličine. Sljedeći primjer pokazuje jedan takav slučaj. delete ptr. članovima polja se pristupa preko pointera. Na programeru je da sebavi ovakvim problemima. tako da je u slučaju nizova uvijek neophodno dodati zagrade [ ]. Naime.void Funkcija (void) { char *str = new char[10]. Tako na primjer. u liniji 4. moţe doći do ozbiljne greške (tipa runtime). tako da se naredba int broj = cijeliBroj[3]. . } vraća vrijednost. Dinamički objekti su veoma korisni za kreiranje podataka koji traju duţe od poziva funkcija koje ih kreiraju. // briše neki objekat delete [] str. On uzima pointer kao argument i oslobaĎa memorijski prostor na koji taj pointer pokazuje. poziva se standardna biblioteka string koja definiše mnoštvo funkcija za manipulisanje sa stringovima. Zbog ograničenih memorijskih resursa. koji nije uzet u obzir. koja je takoĎer definisana u string. naročito ako se alocira veliki prostor. Ako se operator delete treba primijeniti na pointer koji pokazuje ni na šta drugo no dinamički alocirani objekat (na primjer varijabla u stogu). return copy. Funkcija strlen (definisana u string). gdje se koristi funkcija koja uzima string parametar i vraća kopiju stringa. Kako nullkarakter nije uključen u brojanje. vratiće vrijednost nula. // briše niz objekata Ukoliko bi se na niz podataka. uključujući i posljednji null-karakter. Prilikom pristupa elementima polja. naredbom int cijeliBroj[10]. koje treba da to i pokaţu. Ovo posljednje ostaje alocirano sve dok ga programer eksplicitno ne oslobodi. Jedna od osnovnih karakteristika jezika C++ .

*(ptr+2) i *(ptr+3). za jedan bajt.. str++ će "napredovati" str za jedan karakter char. Vrlo slična diskusija se moţe primijeniti i na višedimenzionalna polja. 20. jer rezultat zavisi od veličine objekta na koji se pokazuje.4. tako da pokazuje na drugi elemenat niza. *(str+1). tj.ptr1. Sljedeći primjer pokazuje funkciju za kopiranje riječi sličnu funkciji strcpy. Ipak. int *ptr =&broj[0].3}. te pridruţi tu vrijednost varijabli broj.povečaj je za 3. int *ptr2 = &broj[3]. itd. Na primjer. int n = ptr2 . // vrijednost pocetnog elementa polja cout << &(cijeliBroj[1]) << endl. 30. int broj[] = {10. // adresa elementa cijeliBroj[1] cout << (cijeliBroj + 1) << endl. tj. tako da pokazuje na drugi karakter niza karaktera "VOZDRA". 40}. Dakle. s obzirom da su u memoriji računara ista predstavljena jednodimenzionalnim poljima. Na primjer. dok će ptr++ "napredovati"ptr za jedan int.Programeri često koriste ovu mogućnost. *(str+2).Aritmetika sa pointerima U C++ je moguće neku cjelobrojnu vrijednost dodati i oduzeti od pointera. Još jedan vid aritmetike sa pointerima koji je dozvoljen u C++ je oduzimanje pointera istog tipa. Ako se uzme da je char *str = "VOZDRA". pak. i na programeru je koji će pristup koristiti. nego je cijeliBroj samo sinonim za pointer na prvi elemenat polja. 11. // adresa elementa cijeliBroj[1] Stoga se elementima polja moţe pristupati i preko pointera i preko indeksa. // n postaje 2 Aritmetika sa pointerima je veoma korisna kada se pristupa elementima nekog niza. pretpostavimo da je int predstavljen sa 4 bajta. nije ista kao ona sa cjelobrojnim vrijednostima. // adresa pocetnog elementa cout << *cijeliBroj << endl. ne stvara pointer na varijablu cijeliBroj koji pokazuje na polje. Na sličan način. 4 bajta.Smajo Mekić Na osnovu prethodno rečenog slijedi da se elementi niza "VOZDRA" mogu predstaviti i sa *str. ako imamo definisano polje int cijeliBroj[] = {1. pogledaj šta se nalazi na toj adresi.2. elementi niza broj se mogu predstaviti sa *ptr. koja se još naziva i aritmetika sa pointerima. onda imamo sljedeća značenja: cout << cijeliBroj << endl. Ova aritmetika.Posljednja naredba se moţe shvatiti kao: uzmi adresu prvog elementa polja. treba naglasiti da se definicijom int cijeliBroj[10]. *(ptr+1). 97 . C++ programiranje za srednje škole prof. int *ptr1 = &broj[1].

98 C++ programiranje za srednje škole prof.5. Funkcija najTemp se moţe dalje pojednostaviti. umjesto da se na funkciju prenosi niz (linija 1).Sljedeći primjer pokazuje kako funkcija najTemp. broj[i] je ekvivalentno *(broj+i). 5 for (int i = 0. i < redovi * kolone. Razlika izmeĎu broj i ptr je u tome što je broj konstanta. tako da ne moţe pokazivati ni na šta. j < kolone. const char*). 9} 11. 8 return najveca. 1 int najTemp (const int *temp. ++j) 7 if (*(temp + i * kolone + j) > najveca) 8 najveca = *(temp + i * kolone + j). kao što je to slučaj sa broj sama po sebi adresa prvog elementa niza koji predstavlja. const int redovi. 6 Preuzeto i obrađeno by Osnove programiranja u C++ -Aleksandar Karač. int (*Uporedi)(const char*. Izraz *(temp+i * kolone+ j) u liniji 8. 5 for (int i = 0. ++i) 6 if (*(temp + i) > najveca) 7 najveca = *(temp + i). i < redovi. moguće je uzeti i adresu funkcije i pohraniti je kao pointer funkcije. Pokazuje se da je varijabla koja predstavlja niz.Funkcijski pointeri6 Pored svega do sada rečenog o pointerima. ++i) 6 for (int j = 0. Ovaj uslov postaje jednak nuli kada je posljednji null-karakter pointera src kopiran u dest. Ovo je pokazano u sljedećem primjeru. const int redovi. 1 int najTemp (const int *temp. dok je ptr varijabla i moţe se iskoristiti da pokazuje na bilo koji drugi cijeli broj. uslov petlje pridruţuje sadrţaj src sadrţaju dest. Na primjer. } U liniji 3. koja je pokazana u prethodnom poglavlju moţe da se poboljša korištenjem aritmetike sa pointerima. je ekvivalentan izrazu temp[i][j] koji je korišten u prethodnom poglavlju. char *src) { while (*dest++ = *src++) . Na ovaj način. funkcija nije ograničena na niz odreĎene duţine. 9 return najveca. 2 const int kolone) 3{ 4 int najveca = 0.Smajo Mekić . 10 } U ovom slučaju. 2 const int kolone) 3{ 4 int najveca = 0. Tada se pointer moţe koristiti da indirektno pozove funkciju. Stoga se elementima varijable broj moţe pristupiti i preko aritmetike sa pointerima na broj.1 2 3 4 5 void CopyString (char *dest. prenosi se int pointer i dva dodatna parametra koja specificiraju dimenzije niza. tj. ako se temp tretira kao jednodimenzionalni niz od redovi*kolone cijelih brojeva. a zatim inkrementalno povecava oba pointera.

definiše pointer funkciju koja se naziva Uporedi koja moţe zadrţati adresu bilo koje funkcije koja kao argumente uzima dva konstantna pointera tipa char i vraća cjelobrojnu vrijednost. Takva je, na primjer, funkcija strcmp, koja sluţi za uporeĎivanje stringova. Na taj način imamo: Uporedi = &strcmp; // funkcija Uporedi pokazuje na strcmp // funkciju Operator & nije neophodan i moţe se izostaviti: Uporedi = strcmp; // funkcija Uporedi pokazuje na strcmp // funkciju Kao alternativa, moguće je definisati i inicijalizirati pointer odjednom, kao int (*Uporedi)(const char*, const char*) = strcmp; Kada se adresa funkcije pridruţuje pointeru funkcije, dva tipa se moraju poklapati. Prethodna definicija je ispravna jer se prototip funkcije strcmp poklapa int strcmp(const char*, const char*); Sa definicijom funkcije Uporedi datom prethodno, strcmp se moţe koristiti direktno, ili indirektno preko Uporedi. Sljedeća tri poziva su ekvivalentna: strcmp("Suljo","Mujo"); // direktni poziv (*Uporedi)("Suljo","Mujo"); // indirektni poziv Uporedi("Suljo","Mujo"); // indirektni poziv (skraceno) čest slučaj korištenja pointer funkcije je da se prenese kao argument nekoj drugoj funkciji; obično zbog toga što posljednja traţi različite oblike prve u različitim okolnostima. Dobar primjer je binarna pretraţivačka funkcija koja pretraţuje kroz ureĎeni niz stringova. Ova funkcija moţe koristiti funkciju uporeĎivanja (kao što je strcmp) radi uporeĎivanja stringa koji se traţi i niza stringova. No, ovo ne mora da bude prigodno za sve slučajeve. Na primjer,strcmp razlikuje mala i velika slova. Ako bismo ţeljeli da izvršimo pretraţivanje bez razlikovanja malih i velikih slova, onda bismo trebali koristiti drugu funkciju za uporeĎivanje. Kao što je pokazano u sljedećem primjeru, postavljajući funkciju uporeĎivanja kao parametar funkcije pretraţivanja, imamo mogućnost da ih postavimo nezavisno jednu od druge. 1 int BinTrazi (char *podatak, char *tabela[], int n, 2 int (*Uporedi)(const char*, const char*)) 3{ 4 int dole = 0; 5 int gore = n - 1; 6 int sred, cmp; 7 while (dole <= gore) { 8 sred = (dole + gore) / 2; 9 if ((cmp = Uporedi(podatak,tabela[sred])) == 0) 10 return sred; // return item index 11 else if (cmp < 0) 12 gore = sred - 1; // pretrazi donji dio 13 else 14 dole = sred + 1; // pretrazi gornji dio 15 } 16 return -1; // nije pronadjeno 17 } C++ programiranje za srednje škole prof.Smajo Mekić

99

Linije 1 i 2 predstavljaju potpis funkcije BinTrazi, koja predstavlja poznati algoritam za traţenje kroz sortiranu listu podataka. Lista traţenja je, u ovom slučaju, tabela koja predstavlja polje stringova sa dimenzijom n. Podatak koji se traţi je pod imenom podatak. Linija 2 predstavlja pointer funkciju koja treba da se koristi za uporeĎivanje podatka podatak sa elementima polja. Algoritam za pretraţivanje započinje u liniji 7 koristeći while petlju, i u svakom koraku opseg pretraţivanja polovi. Postupak se zaustavlja kada se granice opsega, označene sa dole i gore, poklope, ili dok se podatak ne naĎe. Podatak se poredi sa srednjim elementom polja (linija 9), i ako se sa njim poklapa, vraća se indeks istog (linija 10). Ako je, pak, podatak manji od srednjeg podatka, pretraţivanje se ograničava na donju polovinu polja (linija 11-12). U suprotnom, pretraţivanje se ograničava na gornju polovinu polja (linija 13-14). U slučaju da nije pronaĎen podatak koji se poklapa sa traţenim, funkcija vraća vrijednost ¡1. Sljedeći primjer pokazuje kako se funkcija BinTrazi moţe pozvati sa strcmp,koji se prenosi kao funkcija za uporeĎivanje. char *gradovi[] = {"Doboj","Kakanj","Sarajevo","Zenica"} cout << BinTrazi("Zenica", gradovi, 4, strcmp) << endl; Rezultat posljednje naredbe bio bi, naravno, 3.

12.Datoteke
Ovo poglavlje pokazuje kako se podaci dobiveni pokretanjem nekog programa mogu sačuvati (pohraniti) na neku datoteku. S obzirom da čuvanje podataka nema svrhu ako tim podacima ne moţemo da pristupamo, biće objašnjeno i kako pročitati podatke sa neke datoteke. Datoteka, pri tome, predstavlja skup podataka koji su snimljeni na neku formu trajne memorije (hard disk, CD-ROM, floppy disk, itd.). Datoteci se pristupa preko njenog imena (filename), u čijem sastavu se obićno nalazi ekstenzija (dio imena iza tačke), koja označava tip podataka u datoteci (npr. .doc za Microsoft Word, .xls Microsoft Excel, .cpp za C++ izvornu datoteku, itd.).

100

C++ programiranje za srednje škole prof.Smajo Mekić

Pitanja za utvrĎivanje 1. Šta su pointeri ili pokazivači? 2. Koja je razlika u definisanju cjelobrojne varijable i cjelobrojne pointer varijable? 3. Koje je značenje tipa podatka u definiciji pointera? 4. Šta je to null-pointer? 5. Koji operator se koristi da bi se pointer pridruţio adresi neke druge varijable ili konstante? 6. Da li pointer moţe pokazivati na različitu memorijsku lokaciju u različitim vremenskim periodima u programu? 7. Da li na istu memorijsku lokaciju moţe da pokazuje više od jednog pointera? 8. Šta je rezultat inkrementiranja pointer varijable? 9. Šta je to dinamička memorija? 10. Koja je veza pointera i polja? 11. Šta predstavljaju aritmetičke operacije sa pointerima? 12. Objasni pojam funkcijskih pointera?

U osnovi, postoje dvije vrste datoteka: tekstualne i binarne. Tekstualne datoteke sadrţe tekst, dok binarne mogu sadrţavati i kompleksnije vrste podataka, kao što su slike, izvršni programi, baze podataka, itd. Tekstualnim datotekama je nešto jednostavnije pristupiti, pisati podatke u njih, te čitati sa njih. Upravo to je i razlog zbog čega ce se primjeri u ovom poglavlju odnositi samo na njih. 12.1.Standardna biblioteka fstream U ranijim poglavljima koristili smo standardnu biblioteku iostream (io se odnosi na input/output), koja pored ostalog, daje mogućnost ispisivanja na standardni izlaz (ekran, monitor) pomoću cout, te čitanje sa standardnog upisa (tastatura) pomoću cin. MeĎutim, ova datoteka nam ne omogućava da podatke trajno sačuvamo. U tu svrhu se koristi standardna biblioteka fstream (f se odnosi na datoteku, tj. file), koja omogućava pisanje na i čitanje sa datoteka. Ovo se postiţe pozivanjem sadrţaja datoteke fstream sa: #include <fstream> Biblioteka fstream definiše tri nova tipa podataka:  ofstream. Ovaj tip podataka predstavlja tok za izlazne datoteke (o se odnosi na output). Pravac izlaza je sa programa na datoteku. Ovaj tip podataka se koristi za kreiranje datoteka i pisanje informacija na njih. Ne može se koristiti za čitanje datoteka.  ifstream. Ovaj tip podataka predstavlja tok za ulazne datoteke (i se odnosi na input). Pravac ulaza je sa datoteke prema programu. Ovaj tip podataka se koristi za čitanje informacija sa datoteka. Ne može se koristiti za kreiranje datoteka i pisanje na njih.  fstream. Ovaj tip podataka predstavlja općenito tok za datoteke, ima karakteristike i ofstream i ifstream objekata. Pomoću ovog tipa, datoteke se mogu kreirati, može se pisati na njih ali i čitati sa njih. "Životni" ciklus pristupa datotekama Kada program pristupa datotekama, bez obzira da li ih čita, ili na njih piše,ili čini oboje, on prolazi kroz sljedeće korake:  Datoteka prvo mora da se otvori. Ovo otvara put u komunikaciji između datoteke i objekta toka u programu (fstream, ifstream, ofstream), koji se koristi u pristupu datoteci.  Nakon otvaranja, program čita sa datoteke, piše na nju, ili čini oboje.  Na kraju, program zatvara datoteku. Ovo je bitan korak, pošto održavanje komunikacije između datoteke i objekta toka zahtijeva resurse, tako da zatvaranje datoteke oslobađa ove resurse kada više nisu potrebni. Uz to,postoji mogućnost da se kasnije u programu ne može pristupiti datoteci ako prethodno nije zatvorena. 12.2.Otvaranje datoteka Bez obzira da li se sadržaj datoteke treba pročitati ili se na datoteku trebaju ispisati neki podaci, datoteka prvo treba da se otvori. Naredna poglavlja pokazuju kako se to obavlja. Otvaranje datoteke za pisanje Datoteke za pisanje se mogu otvoriti pomoću fstream i ofstream objekata na dva načina: (i) pomoću metode open, ili (ii) pomoću konstruktora (constructor1). Otvaranje pomoću funkcije open Ovaj način otvaranja datoteke postižemo na sljedeći način: 1 ofstream izlaz; 2 izlaz.open("ucenici.txt"); Prvom linijom je kreiran objekat izlaz tipa ofstream, dok se u drugoj liniji kreira datoteka ucenici.txt. Kao što se vidi, argument funkcije open je ime i lokacija datoteke koja se treba otvoriti. MeĎutim,

101

C++ programiranje za srednje škole prof.Smajo Mekić

nego i (string) varijabla. Vidimo da se u tom slučaju koriste po dva znaka n. ofstream izlaz. ili se ţeli neki drugi modul od onog koji se daje . ali ne i čitati sa nje. char imeDatoteke[80]. onda ne moramo koristiti dodatne argumente. sadrţavajući sve direktorije i poddirektorije. ako je datoteka ucenici.open("C:\\MFZE\\Busovaca\\ucenici. ali treba zapamtiti da u tom slučaju moţemo samo upisivati informaciju na datoteku. Neke od opcija (tzv.open(imeDatoteke). cout << "Unesite ime datoteke: ". ona će se automatski kreirati pod imenom i na lokaciji koju smo upisali. dok se ne doĎe do datoteke. tj. na primjer. cin >> imeDatoteke. Kada za otvaranje datoteke koristimo ofstream objekat. Bez obzira da li koristimo relativni ili apsolutni put. Korištenje drugog argumenta u funkciji open definiše modul u kojem se datoteka treba otvoriti. naročito ako se program koristi na nekom drugom kompjuteru (sa drugačijim rasporedom direktorija). Za razliku od relativnog puta. Lokacija se moţe dati kao relativna (relative path) ili apsolutna (absolute path).txt"). file mode flag). izlaz. tj.direktorij u kojem se nalazi izvorna datoteka. relativni put predstavlja lokaciju u odnosu na lokaciju programa. ţelimo da konstantno dodajemo neke podatke u datoteku log.open("log". 102 C++ programiranje za srednje škole prof. ios::app). Vaţno je zapamtiti da je korištenje relativnog puta bolja opcija. Na primjer. a ovaj je poddirektorij direktorija Mssbusovaca. onda bi se datoteka otvorila na sljedeći način: ofstream izlaz. a sve se nalazi na tvrdom disku sa slovom C. jer samo jedan između navodnika predstavlja escape-sekvencu.moguće je dodati i drugi argument zavisno od toga da li je funkcija open član objekta fstream ili ofstream. kao što je to u sljedećem primjeru: ofstream izlaz. apsolutni put predstavlja lokaciju koja započinje slovom drajva. izlaz.Smajo Mekić . Datoteka u koju ţelimo pisati podatke ne mora postojati. jer se moţe desiti da neki direktorij u apsolutnom putu ne postoji. Pri tome. koje se mogu koristiti date su u Tabeli: Ako. argument za funkciju open ne mora da bude neko ime (riječ). U slučaju da ne postoji.txt u direktoriju Srednja. koristimo opciju ios::app. izlaz.

//obavezno dodati argument ios::in 3) pomoću konstruktora ifstream ulaz("ucenici. . ili više argumenata.txt"). Kao i u slučaju definisanja (deklarisanja) i inicijalizacije varijabli. izlazUlaz. izlaz. Uz to. Analogno diskusiji o otvaranju datoteka za pisanje.txt").txt"). opcija za pisanje ios::out.txt". fstream izlaz("ucenicii. Otvaranje datoteka za čitanje i pisanje Kao što je ranije rečeno. a drugi fstream izlaz.open("ucenici. objekat fstream se moţe koristiti za otvaranje datoteka i za pisanje i za čitanje.open("ucenici. omogućava definisanje i inicijalizaciju primjerka nekog objekta. U ovom slučaju imamo: fstream izlaz.open("ucenici.open("ucenici. ios::out). ios::in | ios::out). fstream izlaz. ili pomoću konstruktora: 103 C++ programiranje za srednje škole prof.txt". tj. Naredni primjeri pokazuju upotrebu konstruktora sa jednim i dva argumenta. korištenje jednog od načina otvaranja datoteke zavisi od samog programa i naših potreba.ios::out). U tu svrhu koristi se sljedeća sintaksa: fstream izlazUlaz. ios::out). Jedina razlika je što se.txt").Smajo Mekić Otvaranje datoteka za čitanje Sve što je rečeno u prethodnom poglavlju moţe se primijeniti i na otvaranje datoteka za čitanje. ios::in).txt". Otvaranje pomoću konstruktor Konstruktori su funkcije koje se automatski pozivaju kada se pokušava kreirati primjerak (eng. datoteka sa koje se čita mora postojati. Oni mogu biti opterečeni (eng.open("ucenici. 2) pomoću fstream objekta fstream ulaz. overloaded).txt". ulaz. respektivno: ofstream izlaz("ucenici. jednim. dva.txt". umjesto objekta ofstream koristi ifstream objekat. izlaz. jer se pokretanjem jednog od prethodnih objekata datoteka ne kreira.) korištene su naredbe sa konstruktorima bez argumenata.txt". tako da isti objekat moţe imati konstruktor sa nijednim.MeĎutim. treba dodati još jedan argument. U prethodnim primjerima (npr. u stvari. Prvi slučaj zamijenjuje izraz: ofstream izlaz. Primjena konstruktora. instance) nekog objekta (primjerak je prema objektu isto što i varijabla prema tipu podatka).open("ucenici. ios::in). otvaranje datoteke za čitanje se moţe otvoriti na jedan od sljedećih načina: 1) pomoću ifstream objekta ifstream ulaz. izlaz. ulaz. uz korištenje objekta fstream. fstream ulaz("ucenici. ako se za otvaranje datoteke za pisanje koristi fstream objekat.

na primjer: (ulaz) = 0x22fed4 (ulaz. korisno je znati da li ona uopšte postoji. Ako se datoteka ne moţe otvoriti za čitanje.fail() << endl. cout << "(ulaz) = " << ulaz << endl. (ii) vrijednost funkcije fail objekta ifstream je true(1).fail()) = 1 U slučaju da postoji. cout << "(ulaz.txt"). ulaz. Prije nego počnemo čitati podatke sa neke datoteke.fail()) = " << ulaz. Sljedeći primjer ilustruje korištenje oba načina. Provjera da li je datoteka otvorena. 104 C++ programiranje za srednje škole prof. onda je: (i) vrijednost ifstream objekta jednaka NULL (nula).fstream izlazUlaz("ucenici. #include <fstream> #include <iostream> using namespace std. ios::in | ios::out).txt". |.txt ne postoji nakon izvršenja programa dobijamo: (ulaz) = 0 (ulaz. U oba primjera korišten je bitovni operator i. return 0. } Ako datoteka ucenici. izlaz je.Smajo Mekić .open("ucenici. Provjera se moţe izvršiti na dva načina. int main (){ ifstream ulaz.fail()) = 0 pri čemu 0x22fed4 predstavlja memorijsku lokaciju (adresu) ifstream varijable ulaz.

Osim toga. // skup naredbi outfile. a funkcije fail je true. . tj. To je zbog toga što svaka otvorena datoteka zahtijeva sistemske resurse. dobićemo negativan odgovor o njenom postojanju (vrijednost iostream objekta je NULL. 1). 105 C++ programiranje za srednje škole prof. Zatvranje datoteka se vrši pomoću funkcije close. i u ovom slučaju je korisno provjeriti da li datoteka postoji.Smajo Mekić Za razliku od ifstream objekta. a njegova fail funkcija ima vrijednost false(0). ako ona ne postoji. ofstream objekat koji pokušava otvoriti datoteku koja ne još postoji nije NULL.txt"). Ipak.3.close().Zatvaranje datoteka Svaka otvorena datoteka se treba zatvoriti prije nego se napusti program. To je zbog toga što operativni sistem kreira datoteku. ako datoteka postoji. Naime. ali ima osobinu read-only2. neki operativni sistemi imaju ograničenje na broj otvorenih datoteka sa kojima se ne "manipuliše". izlaz.12. Sljedeći primjeri pokazuju njenu upotrebu pri zatvaranju datoteka za pisanje i čitanje: ofstream izlaz.open("ucenici.

12 cin. Sljedeći program pokazuje primjer upisivanja podataka na datoteku ucenici.ignore(). 13 izlaz << podaci << endl.open("ucenici. 18 izlaz. 12. 10 cout << "=======================" << endl. 11 cout << "Upisite razred: ". Jedina razlika je utome što se ovdje koristi fstream ili ofstrem objekat.txt"). // skup naredbi ulaz. 9 cout << "Zapisivanje u datoteku" << endl.Smajo Mekić 106 . ulaz. 4 5 int main (){ 6 char podaci[80]. kao što je to bio slučaj sa ispisivanjem na ekran (cout<<). 8 izlaz. 20 } C++ programiranje za srednje škole prof.Pisanje na datoteke Pisanje podataka na datoteku se izvodi pomoću operatora za ispisivanje (<<). 14 cout << "Unesite broj ucenika: ".getline(podaci. a ne cout objekat.txt: 1 #include <fstream> 2 #include <iostream> 3 using namespace std. 16 cin. 19 return 0. 15 cin >> podaci. 7 ofstream izlaz. 80).4.txt").ifstream ulaz.open("ucenici.close(). 17 izlaz << podaci << endl.close().

Ovim se tekst koji je upisan preko tastature. koji kao prvi argument uzima znakovni niz. To je zbog toga što nema potrebe za pridruţivanjem karaktera.pridruţuje varijabli podaci. U liniji 16 korištena je funkcija ignore() (i ovo je funkcijski član klase iostream). ali ga ne pridruţi nijednoj varijabli. koji označava novu liniju. a kao drugi duţinu istog. koja je data kao niz od 80 elemenata. Upotrebom drugog argumenta pri otvaranju datoteke za pisanje (ios::app) moţemo dodavati sadrţaj na postojeću datoteku kao što to pokazuje sljedeći primjer. U ovom primjeru zapisivanje se prekida nakon unosa znakova ***. input buffer) nekoj varijabli. #include <iostream> 107 C++ programiranje za srednje škole prof.Smajo Mekić . koja u ovom obliku (bez argumenata) ima za cilj da pročita sljedeći karakter pri upisu.U ovom primjeru upis teksta sa tastature je obavljen pomoću funkcijskog člana objekta cin getline() (linija 12). koji je ostao pri čitanju u ulaznom mežuspremniku (eng.

open("podaci. 19 20 ifstream ulaz. 12 getline(cin. 27 cout << podaci << endl.5. 13 izlaz << podaci << endl. 16 cin.Smajo Mekić . program čita iste podatke sa datoteke i ispisuje ih na ekran. 26 getline(ulaz. 25 cout << podaci << endl.txt"). ios::app).podaci). 108 C++ programiranje za srednje škole prof. } izlaz.close(). 15 cin >> podaci. 10 cout << "=====================" << endl. 29 return 0. 28 ulaz.podaci).ignore(). tj. int main () { char x[100].open("ucenici. 21 cout << "Citanje sa datoteke" << endl. izlaz << x << endl. 24 getline(ulaz.podaci). while (x != "***") { cout << "Unesite neki tekst (za kraj unesite ***):" << endl. 18 izlaz. 17 izlaz << podaci << endl.txt". 14 cout << "Unesite broj ucenika: ". Sljedeći primjer nadopunjava onaj iz prethodnog dijela.close(). 1 #include <fstream> 2 #include <iostream> 3 using namespace std.open("ucenici.close(). čitanje podataka sa datoteka obavlja se pomoću operatora za čitanje (>>) kao što je to slučaj sa ispisivanjem sa tastature (cin>>). } 12. ofstream izlaz. 22 cout << "===================" << endl.Čitanje sa datoteka Analogno prethodnom poglavlju. 4 5 int main (){ 6 char podaci[100]. 9 cout << "Upisivanje u datoteku" << endl. 23 ulaz. 8 izlaz. cin >> x. 7 ofstream izlaz. nakon što korisnik upiše informacije na datoteku. 11 cout << "Unesite razred: ".#include <string> #include <fstream> using namespace std.txt"). izlaz.

txt"). cout << "Upisite razred: ". "ucenici. if (!status) { cout << "Datoteka za ispisivanje se ne moze otvoriti\n".ignore(). char*). cout << "Unesite broj ucenika: ". status = upisiDatoteku(izlaz. izlaz << podaci<< endl. "ucenici. podaci se unose pomoću funkcije getline (linija 13) sa nešto drugačijom sintaksom. cout << "==================" << endl.30 } Slično primjeru iz prethodnog dijela.Smajo Mekić . } ifstream ulaz. return 0. cout << "Program se zavrsava\n". izlaz << podaci<< endl. cin >> podaci.close(). if (!status) { cout << "Datoteka za citanje se ne moze otvoriti\n". Prethodni primjer se moţe napisati i na programerski adekvatniji način upotrebom funkcija za čitanje i pisanje na datoteku. } else { cout << "Citanje se datoteke" << endl.txt"). izlaz. bool upisiDatoteku (ofstream&. Na sličan način se pomoću iste funkcije podaci čitaju sa datoteke (linije 23 i 25). 109 C++ programiranje za srednje škole prof. return 0. getline(cin. bool citajDatoteku (ifstream&. a drugi varijabla podaci. Ovdje pomenuta funkcija (definisana je kao funkcija. system("PAUSE"). system("PAUSE"). cout << "Program se zavrsava\n". #include <fstream> #include <iostream> #include <string> using namespace std. status = citajDatoteku(ulaz. int main (){ char podaci[100]. ofstream izlaz. cin. bool status. podaci). char*). } else { cout << "Pisanje u datoteku" << endl. pri čemu je prvi član objekat ulaz tipa ifstream. a ne funkcijski član) ima dva argumenta: prvi tipa iostream (cin).

podaci). Sljedeći primjer pokazuje upotrebu ove funkcije u problemu čitanja nizova karaktera (riječi). if (datoteka. getline(ulaz. return 0.Smajo Mekić .open(strDatoteka).fail()) return false. Sukcesivno čitanje Često puta je potrebno pročitati sve podatke sa neke datoteke.close(). pri čemu unaprijed ne poznajemo konačan broj informacija (na primjer. system("PAUSE"). Razlog leţi u činjenici da unutrašnje stanje objekta toka moţe promijeniti korištenjem open funkcije. else return true. ifstream saDat.eof()) { saDat >> podaci.close(). saDat.fail()) return false. while(!saDat.fail()) { cout << podaci << endl. getline(ulaz. #include <iostream> #include <fstream> using namespace std. 110 C++ programiranje za srednje škole prof.txt"). } system("PAUSE"). cout << podaci << endl. podaci). proizvoljan broj vrijednosti neke varijable). } ulaz. int main () { char podaci[80]. while(!ulaz.open("podaci. koja je tačna ukoliko se proĎe posljednja linija u kojoj postoji neka informacija.cout << "===================" << endl. iako se sadrţaj ne mijenja. char* strDatoteka) { datoteka. } bool citajDatoteku (ifstream& datoteka. if (datoteka. char* strDatoteka) { datoteka. else return true. U tu svrhu se koristi funkcija eof (od engleske riječi end of file). } bool upisiDatoteku (ofstream& datoteka. } saDat.open(strDatoteka). iako nije dna od ovih funkcija ne mijenja sadrţaj datoteke. } Iz ovog primjera se vidi da se ifstream i ofstream objekti u funkcijama upisiDatoteku i citajDatoteku prosljeĎuju po referenci.

fstream. Ispis neka bude oblika: Unesi prvi broj: Unesi drugi broj: Kolicnik iznosi: .. Ispis neka bude oblika: Unesi cetiri realna broja: Srednja vrijednost brojeva ..} Linije petlja while. Sada A iznosi: . Zadatak 4 Zadatak je primjer svoĎenja rezultata na zajednički tip s operandima..Zadaci pravolinijska struktura Zadatak 1 Potrebno je izračunati srednju vrijednost po volji izabrana četiri realna broja... je ..1. Zadatak 3 Potrebno je unijeti broj i pridruţiti ga varijabli A. Šta je konstruktor? 6. Koji od tri objekta iostream. Od trenutnog sadrzaja varijable A se oduzima 8. on postaje . Da li se stream objekti trebaju proslijediti po vrijednosti ili referenci. Na analogan način se mogu čitati podaci rasporeĎeni u kolone.. Sadrţaj varijable prvo treba uvećati za 5. promijeni predznak... Trenutni sadrzaj varijable A se mnozi s 3.. Sada A iznosi: . Ispis neka bude oblika: Unesi broj: Kada se broju . Zadatak riješiti upotrebom operatora obnavljajućeg pridruţivanja.Zbirka Zadataka 13. omogućavaju sukcesivno čitanje podataka sa datoteke podaci.. na kraju pomnoţiti s 3...... Kada se doĎe do posljednje linije sa nekom informacijom. a drugi realan. Rezultat spremiti u cjelobrojnu varijablu kolicnikt. 111 C++ programiranje za srednje škole prof... Ispis neka bude oblika: Upisi zeljeni broj: Sadrzaj varijable A se uvecava za 5.txt... Ispis neka bude oblika: Unesi prvi broj: Unesi drugi broj: Vrijednost izraza a/b= . Koja standardna datoteka treba da se pozove kada program piše na datoteku ili čita sa nje? 3... Zadatak 2 Potrebno je unijeti cijeli broj. moţe sluţiti i za upis i za ispis na datoteke? 4.. ifstream. ... a zatim mu unarnim operatorom promijeniti predznak.. Nabrojati formate datoteka u kojima se mogu pohraniti podaci! 2.. Sada A iznosi: . funkcija eof vraća vrijednost true i automatski se izlazi iz petlje.... i zašto? 13... U čemu se suština zatvaranja datoteke? 5. Zadatak 5 Zadatak je primjer svoĎenja operanada na zajednički tip. ...Smajo Mekić .. pa umanjiti za 8. Treba izračunati kolicnik dva broja od kojih je jedan cijeli.... Pitanja za utvrĎivanje 1.. Treba izračunati kolicnik dvaju cijelih brojeva i spremiti ga u realnu varijablu.. i .

. Zadatak 8 Tijelu mase m kilograma promijeni se za t sekundi brzina s v1 na v2 m/s.. Potrebno je izračunati ukupni otpor R. Zadatak 10 Tijelo mase m kilograma pada s visine h metara brzinom v m/s.... J potencijalne energije.. minuta i sekundi. Ispis neka bude oblika: Upisi godinu svog rodjenja: Koja je godina sada? Sada imas .. Zadatak 9 Treba unijeti vrijeme u sekundama a zatim izračunati koliko je to sati.. J kineticke energije i . Ispis neka bude oblika: Upisi masu tijela (u kg): Upisi vrijeme (u s): Upisi pocetnu brzinu (u m/s): Upisi konacnu brzinu (u m/s): Na tijelo je djelovala sila od . Ispis neka bude oblika: Upisi vrijeme u sekundama: ... R2 i R3..... godina. sto daje ukupnu energiju od .. Ispis neka bude oblika: Upisi masu tijela (u kg): Upisi visinu (u m): Upisi brzinu (u m/s): Tijelo ima . oma. sekundi je ... sati... sekundi. Zadatak 6 Treba unijeti godinu roĎenja neke osobe i tekuću godinu. Kolika je ukupna energija tijela.. . N.. Ispis neka bude oblika: U (V)= R1 (om)= R2 (om)= R3 (om)= 112 C++ programiranje za srednje škole prof.. Ispis neka bude oblika: Upisi trocifreni broj: U trocifrenom broju ... m i presjeka .. Zadatak 7 Treba izračunati otpor bakrene ţice ako je zadana duzina u metrima i poluprecnik u milimetrima..Zadatak 12 Na izvor napona U su priključena tri serijski spojena otpornika: R1... na mjestu desetice je cifra ....snagu struje I i pojedine padove napona na otporima: U1. Zadatak 11 Treba unijeti trocifreni broj a zatim ispisati vrijednost cifre desetice. J.. minuta i . . Ispis neka bude oblika: Upisi poluprecnik zice (u mm): Upisi duzinu zice (u m): Bakrena zica duzine . mm2 ima otpor . Treba izračunati silu koja je djelovala na tijelo. U2 i U3.Smajo Mekić Sadrzaj varijable kolicnik iznosi: . Računaju se godine starosti osobe.

Vozovi ce se susresti nakon . za drugi su iznosi obrnuti). km obletjet ce Zemlju za .. Snaga struje I iznosi .. a drugi. km (vrijedi za prvi voz.. A. min moze .Smajo Mekić Ukupni otpor R iznosi . kg..Zadaci struktura grananja Zadatak 1 Treba unijeti cijeli broj pa provjeriti da li je >=0.. Potom treba provjeriti da li je broj paran. Ako nije..2.. Pad napona U2 je . Pad napona U1 je ..°C ima snagu od . . Presjek svake od noga je kvadrat sa stranicama X centimetara. Ispis neka bude oblika: Upisi visinu na kojoj leti avion (u km): Upisi brzinu kojom leti avion (u km/h): Avion koji leti brzinom . V. Pad napona U3 je . a zvuk je sporiji pa mu za isti razmak treba . grama vode zagrijati sa . djeluje na tlo je . Ispis neka bude oblika: Upisi vrijeme (u sek): Svjetlost preĎe razmak izmedju dva mjesta za . Izračunati udaljenost od mjesta A na kome će se vlakovi susresti i trenutak kad će se to dogoditi....°C na .. sati... Ispis neka bude oblika: Upisi vrijeme (u min): Upisi masu vode (u gr): Upisi pocetnu temperaturu (u °C): Upisi konacnu temperaturu (u °C): Elektricno kuhalo koje za . u obrnutom smjeru brzinom v2 km/h. km. km/s. Zadatak 13 Jedan voz kreće iz mjesta A prema mjestu B brzinom v1 km/h.. 13. Ako je paran treba izračunati i ispisati njegovu treću potenciju.. Koliki je pritisak na tlo ako stolica ima četiri noge. V. 113 C++ programiranje za srednje škole prof. Preostali dio puta je . istodobno. kg. Mjesta A i B su meĎusobno udaljena s kilometara...Zadatak 17 Treba izračunati koliko bi vremena bilo potrebno zvuku da preĎe razmak izmeĎu dva mjesta ako taj isti razmak svjetlost preĎe za t sekundi.. Zadatak 16 Treba izračunati snagu P koju mora imati električno kuhalo koje za t minuta moţe vodu mase m grama zagrijati od temperature temp1 do temperature temp2 (temperatura je izraţena u °C).. na visini od ..... sati. Ispis neka bude oblika: Upisi masu stolice u kg: Upisi masu covjeka u kg: Unesi vrijednost stranice kvadrata u cm: Pritisak kojim covjek mase .... s. a ako nije treba ispisati: Broj je neparan........... paskala... vata. Za koje će vrijeme avion obletjeti Zemlju ako leti na visini od h kilometara brzinom v km/h. s. Zadatak 14 Na stolici mase Ms kilograma sjedi čovjek mase Mc kilograma. V. koji sjedi na stolici mase . Zadatak 15 Poluprečnik Zemlje je 6370 km.. oma..... Ispis neka bude oblika: Upisi brzinu prvog voza (u km/h): Upisi brzinu drugog voz (u km/h): Upisi udaljenost izmedju dva mjesta (u km): Susret ce se dogoditi nakon . treba izračunati apsolutnu vrijednost unesenog broja..

... z2=..+. Potrebno je načiniti i provjeru... a njegova treca potencija iznosi .. jednačine nije kvadratna. = . = . Zadatak 2 Treba unijeti dva realna broja pa izračunati i ispisati njihov cjelobrojni kolicnik i ostatak dijeljenja. Ispis neka bude oblika: Upisi djeljenik : Upisi djelitelj : . i x2=. Vaţno je provjeriti vrijednost koeficijenta a. C++ programiranje za srednje škole prof.. Ako je djelitelj 0 treba ispisati odgovarajuću poruku.Treba izračunati vrijednost hipotenuze c... jednačina nije kvadratna. je neparan....... Unesi vrijednost ugla alfa u stepenima: 114 . ili Rjesenja su kompleksni brojevi: z1=. Provjera: . je paran.i. + . Treba provjeriti predznak diskriminante jer on odreĎuje hoće li rješenja kvadratne jednačine bit realni ili kompleksni brojevi.. cijelih i .. Ispis neka bude oblika: Upisi koeficijent a: Upisi koeficijent b: Upisi koeficijent c: Rjesenja su realni brojevi: x1=.. pa zavisno o njihovim vrijednostima izračunati i ispisati rješenja. Zadatak 3 Treba unijeti koeficijente kvadratne jednačine..-..... ili Ne moze se dijeliti sa 0. / .... ostatka. ili Broj ...... ako je a=0.i ili Ako je koeficijent a=0. * .Unesi broj : Broj ..Smajo Mekić Zadatak 4 U pravougli je trouglu poznat ugao alfa (izraţen u stepenima) i kateta a (u cm)..

. Ovisno o tome što se ţeli računati treba unijeti odgovarajuće podatke. Za računanje jačine struje treba birati 1.. Zadatak 7 Treba unijeti tri realna broja zatim ih ispisati od najmanjeg ka najvećem.. cm. . ampera Zadatak 9 Program na osnovu unesenog rednog broja mjeseca ispisuje koliko taj mjesec ima dana. a za otpor 3. Ispis neka bude oblika: Upisi prvi broj : Upisi drugi broj : Upisi treci broj: Ako se upisu brojevi: ...... za napon 2..... i .. jačina struje iznosi ... U slučaju unosa broja koji nije iz raspona od 1 do 12 treba ispisati upozorenje. Zadatak 5 Čamac vozi brzinom vc okomito na tok rijeke koja teče brzinom vr.... stepeni... hipotenuza ima vrijednost c= .... m/s. stepeni. Zadatak 6 Treba unijeti tri realna broja zatim pronaći i ispisati najmanji.. camac se u odnosu na obalu krece brzinom . Zadatak 8 Treba izračunati jačinu struje. Ako je napon . mjesec ima 31 dan.Unesi vrijednost katete a: Ako je vrijednost ugla alfa . a vrijednost katete a= . ili 115 C++ programiranje za srednje škole prof.. Ispis neka bude oblika: Upisi prvi broj: Upisi drugi broj: Upisi treci broj: Brojevi: ...... prema odabiru korisnika. Kojom se brzinom krece čamac u odnosu na obalu? Za koji ugao će čamac skrenuti sa svoje putanje? Unesi brzinu camca u m/s: Unesi brzinu rijeke u m/s: Ako je brzina rijeke . poredani od najmanjeg ka najvecem: .. oma.. Ispis neka bude oblika: Upisi redni broj mjeseca: ........ cm.. ili . a otpor .. Ispis neka bude oblika: Ohmov zakon Za računanje jačine struje upiši 1.. napon ili otpor. V. za računanje napona upiši 2.. m/s a brzina camca .Smajo Mekić .. m/s. . i ... a za otpor 3: NPR: U (V)=. . mjesec ima 30 dana... . R (om)=.. Camac je skrenuo sa svoje putanje za ... najmanji od njih je . ...

..... Ispis neka bude oblika: Upisi broj sa kojim zelis mnoziti: . ... * 1 = .. po ţelji korisnika... Upisi maksimalni broj bodova na testu: … Odlican od 89% do 100%: … .. ispisuje odgovarajuću ocjenu... .. Za rezultat obima upisuje se 1... a za rezultat povrsine 2: a= b= c= Obim trougla je O= . 116 C++ programiranje za srednje škole prof... a za površinu 2.. ili Povrsina trougla je P= . . do .… bodova.. Za rezultat obima upisi 1. * ..... Zadatak 10 Program na osnovu unesenih vrijednosti stranica trougla računa obim ili površinu.Smajo Mekić . Zadatak 11 Program na osnovu unesenog maksimalnog broja bodova koji se moţe ostvariti na testu oblikuje bodovnu skalu. . mjesec ima 28 dana (ili 29 ako je godina prestupna).. Nedovoljan za manje od 50%: … i manje bodova. Ispis neka bude oblika: Upisi broj veci od 0: .: . * ... Broj bira korisnik.. Zadaci struktura petlje Zadatak 1 Potrebno je ispisati brojeve iz raspona od M do N (raspon bira korisnik). * 2 = .. .2. Ispis neka bude oblika: Ispis pocinje od broja: Ispis zavrsava brojem: Ispis brojeva od .. ocjena je … Zadatak 12 Treba unijeti prirodni broj pa ga rastaviti na proste faktore... Dovoljan od 51% do 63%: … . = 1 * ... Vrlo dobar od 77% do 88%: … .… bodova. Zadatak 2 Treba ispisati tablicu mnoţenja odabranog broja sa brojevima od 1 do 10.... a zatim na temelju osvojenog broja bodova na testu.… bodova. * .… bodova. Upisi osvojeni broj bodova na testu: …: … bodova je … %. Dobar od 64% do 76%: … .

... ... ... * 10 = ... Zadatak 3 Potrebno je ispisati prvih N neparnih brojeva. Ispis neka bude oblika: Upisi zeljeni broj neparnih brojeva: Prvih ... neparnih brojeva su: ... ... ... .... Zadatak 4 Potrebno je sabrati prvih 100 prirodnih brojeva. Ispis neka bude oblika: Zbir prvih 100 prirodnih brojeva je ... Zadatak 5 Treba prebrojiti koliko brojeva unutar raspona od M do N ima cifru jedinice vrijednosti 9. Ispis neka bude oblika: Raspon pocinje od broja: Raspon zavrsava brojem: U rasponu od ... do... ima ... brojeva sa cifrom jedinice vrijednosti 9. Zadatak 6 Treba provjeriti djeljivost brojeva iz odabranog raspona od M do N sa zadanim brojem B. Ispis neka bude oblika: Pocetna vrijednost raspona: Zavrsna vrijednost raspona: Provjerava se djeljivost s brojem: Brojevi djeljivi sa ... iz raspona od ... do ... su: ... ... ... ... ... Zadatak 7 Potrebno je sabrati sve prirodne trocifrene brojeve. Ispis neka bude oblika: Zbir svih prirodnih trocifrenih brojeva je .... Zadatak 8 Potrebno je sabrati N odabranih cijelih brojeva. Ispis neka bude oblika: Upisi koliko brojeva zelis sabirati: Upisi broj: Upisi broj: ....... ....... Zbir unesenih brojeva je ... Zadatak 9 Potrebno je sabrati N članova niza : (1 + 1/2 + 1/3 + 1/4 + 1/5 +....+ 1/N). Ispis neka bude oblika: Upisi zeljeni broj clanova niza: Zbir ... clanova ovog niza iznosi ... . Zadatak 10 Potrebno je ispisati i sabrati sve prirodne brojeve djeljive s 3 iz raspona od 1 do N. Ispis neka bude oblika: Upisi zavrsnu vrijednost raspona: U intervalu od 1 do ... brojevi djeljivi sa 3 su: .... ... ... Zbir brojeva djeljivih s 3 iz intervala od 1 do... je ... Zadatak 11

117

C++ programiranje za srednje škole prof.Smajo Mekić

Potrebno je prebrojiti i sabrati sve parne prirodne brojeve iz raspona od 1 do N . Ispis neka bude oblika: Upisi gornju granicu raspona: U intervalu od 1 do ... ima ... brojeva djeljivih sa 2. Njihov zbir je ... . Zadatak 12 Potrebno je provjeriti da li je odabrani prirodni broj prost (prost broj je djeljiv samo sa 1 i sa samim sobom). Ispis neka bude oblika: Upisi prirodni broj: ... je/nije prost. Zadatak 13 Potrebno je provjeriti da li je odabrani prirodni broj savršen (broj je savršen ako je jednak zbiru svih svojih djelitelja, osim njega samog). Ispis neka bude oblika: Upisi prirodni broj: Broj ... je/nije savrsen. Zadatak 14 Potrebno je ispisati sve savršene prirodne brojeve iz raspona od 1 do 3000. Ispis neka bude oblika: Savrseni brojevi iz zadanog raspona su ... ... .... ... Zadatak 15 Potrebno je ispisati sve četverocifrene brojeve čiji je proizvod cifara 100. Ispis neka bude oblika: Brojevi ciji je proizvod cifara 100 su:... ... ... ... Zadatak 16 Potrebno je ispisati sve trocifrenee brojeve koji su djeljivi sa 7, a zadnja im je cifra 7. Ispis neka bude oblika: Brojevi koji zadovoljavaju uslov su: ... ... ... ... Zadatak 17 Potrebno je ispisati dekadske ASCII vrijednosti (od 32 do 255) i njihove odgovarajuće znakove.Da bi ispis bio u pravilnim stupcima, koristi manipulator setw.

Zadatak 18 Potrebno je ispisati tekst "***" u obliku slova V, kao na slici (koristiti manipulator setw(int): Zadatak 19 Treba unijeti N realnih brojeva pa izračunati njihovu srednju vrijednost. Unos brojeva traje sve dok korisnik ne upiše 0. Primjer riješiti do-while petljom. Ispis neka bude oblika: Nakon posljednjeg broja unesi nulu. Unesi broj: Unesi broj: ... Uneseno je ... brojeva. Srednja vrijednost je .... Zadatak 20 Potrebno je unesenom prirodnom broju ispisati vrijednosti pojedinih cifara počevši od cifre najmanje teţinske vrijednosti, jednu ispod druge. Ispis neka bude oblika: Upisi prirodni broj: Njegove cifre su: ...

118

C++ programiranje za srednje škole prof.Smajo Mekić

... ... Zadatak 21 Potrebno je unesenom prirodnom broju sabrati vrijednosti njegovih cifara. Ispis neka bude oblika: Upisi prirodni broj: Zbir cifara broja ... je ... . Zadatak 22 Korisnik unosi prirodne brojeve. Nakon posljednjeg broja unosi 0. Program ispisuje najveći uneseni broj. Ispis neka bude oblika: Upisi prirodni broj: Upisi prirodni broj: ... Najveci broj je ... Zadatak 23 Program računa ukupni otpor N otpora spojenih u paralelu. Nakon posljednje vrijednosti otpora unosi se 0. Ispis neka bude oblika: Upisi vrijednost otpora u omima: Upisi vrijednost otpora u omima: ... Ukupni otpor ... otpora spojenih u paralelu je ... oma. Zadatak 24 Program računa srednju ocjenu uspjeha učenika. Nakon posljednje ocjene treba unijeti 0. U slučaju da je bilo koja od ocjena 1, ispisuje se poruka: Negativan uspjeh. Ako se unese vrijednost koja nije iz raspona od 1-5, ispisat će se poruka: Pogrešan unos. Ispis neka bude oblika: Srednja ocjena uspjeha je ...

Zadatak 25 Potrebno je ispisati N članova Fibonaccijevog niza. Fibonaccijev niz je niz u kome su prva dva člana jednaka jedan, a svaki sljedeći član je zbir prethodna dva člana niza (1, 1, 2, 3, 5, 8, 13, 21, 34, ......). Ispis neka bude oblika: Upisi koliko clanova niza zelis: Članovi niza: 1, 1, ..., ..., ..., ..... Zadatak 26 Potrebno je izračunati najveću zajedničku mjeru dva prirodna broja. Najveća zajednička mjera dva broja je najveći prirodni broj kojim su djeljiva oba broja. Ispis neka bude oblika: Unesi prvi broj: Unesi drugi broj: Najveca mjera brojeva ... i ... je ... Zadatak 27 Potrebno je unijeti odabrani broj cifara počevši od cifre najveće teţinske vrijednosti, pa od njih sastaviti i ispisati prirodni broj. Unos cifara se prekida kada se unese broj manji od 0 ili veći od 9. Ispis neka bude oblika: Upisi cifru: Upisi cifru:

119

C++ programiranje za srednje škole prof.Smajo Mekić

. cin>>a>>b>>c>>d.. int main() 120 C++ programiranje za srednje škole prof.Upisi cifru: . cout<<endl<<a<<". Broj sastavljen od zadanih cifara je . } Pravolinijska struktura – Rješenje 2 #include<iostream> using namespace std.. cout<<endl<<"Srednja vrijednost brojeva:".Smajo Mekić .c.b. cout<<"Unesi cetiri realna broja"<<endl. srvr=(a+b+c+d)/4. int main() { float a.Rješenja Pravolinijska struktura – Rješenje1 #include<iostream> using namespace std. system("PAUSE"). 14. "<<b<<".d.srvr. "<<c<<" i "<<d<<" je "<<srvr<<endl..return 0.

cin>>A. cin>>b.return 0. int main() { int a. 121 C++ programiranje za srednje škole prof. cout<<"Sadrzaj varijable A se uvecava za 5. cout<<"unesi drugi broj:".Sada A iznosi: "<<(A*=3)<<endl.kolicnik.Rješenje5 #include<iostream> using namespace std.Rješenje4 #include<iostream> using namespace std. Sada A iznosi: "<<(A-=8)<<endl. on postaje "<<-a<<endl. int main() { int a. cout<<endl<<"Kada se broju "<<a<<" promijeni predznak. Sada A iznosi: "<<(A+=5)<<endl. } Pravolinijska struktura . cout<<"Trenutni sadrzaj varijable A se mnozi sa 3. cout<<"Unesi broj:".} Pravolinijska struktura . cout<<"Upisi zeljeni broj:".Smajo Mekić . return 0. cin>>a. system("PAUSE"). return 0. cin>>a. float kolicnik. cout<<"Unesi prvi broj:". cout<<"kolicnik iznosi:"<<kolicnik<<endl. cout<<"Od trenutnog sadrzaja varijable A se oduzima 8. kolicnik=a/b. } Pravolinijska struktura . int main() { float A. float b. system("PAUSE").Rješenje3 #include<iostream> using namespace std. system("PAUSE").{ int a.b.

cout<<"Vrijednost izraza a/b= "<<a/b<<endl.otpor. int main() { float precnik.0175. cout<<"unesi drugi broj:". otpor=ro*l/s. const double PI=3.return 0. system("PAUSE")."<<endl.14. return 0. cout<<endl<<"Bakrena zica duzine "<<l<<" m i presjeka " <<s<<" mm2 ima otpor". cout<<"Upisi godinu svog rodjenja: ".Rješenje6 #include<iostream> using namespace std.return 0. cin>>l. int main() { int god. cin>>god1.god2. god=god2-god1. system("PAUSE").r. cin>>precnik. system("PAUSE"). s=r*r*PI. } Pravolinijska struktura . cin>>a. kolicnik=a/b.Smajo Mekić . const double ro=0.Rješenje7 #include<iostream> using namespace std.cout<<"Unesi prvi broj:". cout<<endl<<"Sada imas "<<god<<" godina. cout<<otpor<<" oma. } 122 C++ programiranje za srednje škole prof.s. } Pravolinijska struktura . cin>>god2.l. r=precnik/2. cout<<endl<<"Upisi duzinu zice (u m):". cin>>b.god1. cout<<"Koja je godina sada? ". cout<<"Sadrzaj varijable kolicnik iznosi:"<<kolicnik<<endl. cout<<"Upisi precnik zice (u mm):"."<<endl.

return 0. cin>>t."<<endl. } 123 C++ programiranje za srednje škole prof. cout<<"Upisi masu tijela (u kg):".v1.F.v2. int main() { int s. min. cout<<"Upisi konacnu brzinu (u m/s):". min=ostatak/60. cin>>v1. cin>>m.t. ostatak.a. sek. cin>>s. F=m*a. cout<<"Upisi vrijeme u sekundama:".Pravolinijska struktura . int main() { float m. cin>>v2. } Pravolinijska struktura . cout<<"Upisi pocetnu brzinu (u m/s):". system("PAUSE"). "<<min<<" minuta i "<<sek<<" sekundi. cout<<s<<" sekundi je "<<sat<<" sati. cout<<"Upisi vrijeme (u s):".Rješenje8 #include<iostream> using namespace std. ostatak=s%3600.return 0. sat.Smajo Mekić . a=(v2-v1)/t. system("PAUSE"). cout<<endl<<"Na tijelo je djelovala sila od "<<F<<" N. sat=s/3600."<<endl.Rješenje9 #include<iostream> using namespace std. sek=ostatak%60.

cin>>R2."<<endl. cout<<endl<<"R1 (om)= "."<<endl. cout<<endl<<"Jakost struje I iznosi "<<I<<" A. cin>>R1. return 0. cin>>R3.R.I.Pravolinijska struktura .81.R3.Ep. cout<<" J potencijalne energije. I=U/R."<<endl. cout<<"Pad napona U2 je "<<I*R2<<"V. return 0. R=R1+R2+R3. float m. } Pravolinijska struktura . Ep=m*g*h.Rješenje13 124 C++ programiranje za srednje škole prof. Euk=Ep+Ek.Smajo Mekić .Zadatak10 #include<iostream> using namespace std. cout<<"Upisi brzinu (u m/s):".h. cout<<endl<<"Ukupni otpor R iznosi "<<R<<" oma. cout<<endl<<"R3 (om)= ". cout<<"Upisi masu tijela (u kg):"."<<endl.R1."<<endl. cin>>h. cin>>v. cin>>U. int main() { const double g=9.Euk. cout<<"Upisi visinu (u m):".v.Ek. cout<<"Pad napona U3 je "<<I*R3<<"V.R2. Ek=m*v*v/2. } Pravolinijska struktura .sto daje ukupnu energiju od "<<Euk <<" J.Rješenje12 #include<iostream> using namespace std."<<endl. cout<<endl<<"R2 (om)= ". cout<<"U (V)= ". int main() { float U. cin>>m. cout<<endl<<"Pad napona U1 je "<<I*R1<<" V. cout<<endl<<"Tijelo ima "<<Ek<<" J kineticke energije i "<<Ep.

s1.} Pravolinijska struktura . cout<<"Upisi masu stolice u kg:". Gs=Ms*g.Ms.Gs. system("PAUSE"). put2. cin>>v2. //pritisak u paskalima cout<<"Pritisak kojim covjek mase "<<Mc<<" kg. vrijeme.p. //ukupna povrsina na koju djeluje sila S=4*s1. koji sjedi na stolici mase "<<Ms. cout<<" km (vrijedi za prvi voz. cin>>Ms. put2=udaljenost-put1. cout<<"Upisi udaljenost izmedju dva mjesta (u km):". S=S/10000. //pretvaranje cm2 u m2 p=F/S.Gc. //ukupna sila koja djeluje na pod F=Gs+Gc. cout<<" kg. cout<<"Vozovi ce se susresti nakon "<<vrijeme<<" sati."<<endl. cin>>udaljenost. cout<<" km."<<endl.S.X. cin>>X.Smajo Mekić . cin>>v1. vrijeme=put1/v1. v2. Gc=Mc*g. //put1/brzina1=put2/brzina2 //udaljenost=put1+put2 put1=udaljenost*v1/(v1+v2). const double g=9. djeluje na pod je "<<p<<"paskala". za drugi su iznosi obrnuti). system("PAUSE"). cout<<"Upisi brzinu drugog voza (u km/h):".F.#include<iostream> using namespace std. cout<<"Unesi iznos stranice kvadrata u cm:". Preostali dio puta je "<<put2. int main() { float Mc. cin>>Mc.Rješenje14 #include<iostream> using namespace std. cout<<"Susret ce se dogoditi nakon "<<put1. cout<<"Upisi brzinu prvog voza (u km/h):". cout<<"Upisi masu covjeka u kg:".return 0. //povrsina presjeka jedne noge stolice s1=X*X. udaljenost.81. int main() { float v1. } 125 C++ programiranje za srednje škole prof. float put1.return 0.

//t=s/v. //Zbir poluprecnika zemlje i visine Ruk=R+h.vrijeme. //Racunanje puta (obim kruga) O=2*Ruk*PI. int main() { float h.14.Pravolinijska struktura . cout<<"Upisi visinu na kojoj leti avion (u km):".O. } 126 C++ programiranje za srednje škole prof.v. const double R=6370. cin>>v. //konstanta je izrazena u km const double PI=3.Rješenje15 #include<iostream> using namespace std. cin>>h. Ruk.return 0. system("PAUSE"). cout<<" km obletjet ce Zemlju za"<<vrijeme<<" sati. cout<<"Avion koji leti brzinom "<<v<<"km/h.Smajo Mekić . cout<<"Upisi brzinu kojom leti avion(u km/h):". jednoliko gibanje vrijeme=O/v."<<endl. na visini od "<<h.

const double c=4186.m. cout<<"Upisi vrijeme (u sek):".DT.Pravolinijska struktura . system("PAUSE"). cin>>temp1. //vrijeme treba pretvoriti u sekunde ts=tmin*60."<<endl. cin>>temp2. return 0. tz=s/v. int main() { float tmin. } 127 C++ programiranje za srednje škole prof. DT=temp2-temp1.Q. system("PAUSE"). const double c=3e+8. cin>>tmin.temp2.s. cout<<"Upisi konacnu temperaturu (u °C):". cout<<"Upisi masu vode (u gr):". cin>>t. cout<<"Upisi pocetnu temperaturu (u °C):". //racuna se snaga P=Q/ts. //konstanta je izrazena u J/(kg*K) cout<<"Upisi vrijeme (u min):". //racuna se toplotna energija Q=M*c*DT. cout<<"Elektricno kuhalo koje za "<<tmin<<" min moze "<<m. } Struktura grananja ."<<endl.ts.P.M. cout<<" grama vode zagrijati sa "<<temp1<<"stepeni C na "<<temp2.return 0. cout<<" s.Rješenje1 .Rješenje17 #include<iostream> using namespace std. cout<<"Svjetlost prevali razmak izmedju dva mjesta za "<<t.tz. const double v=340. int main() { float t. cout<<"stepeni C ima snagu od "<<P<<" vata. cin>>m.temp1.Rješenje16 #include<iostream> using namespace std. //racunanje puta s=c*t.Smajo Mekić Pravolinijska struktura . //masu treba pretvoriti u kg M=m/1000. a zvuk je sporiji pa mu za isti razmak treba "<<tz<<" sekundi.

". cout<<"Upisi djelitelj:". int main () { int i. ". return 0.rez. } system("PAUSE"). } else { cout<<"Broj "<<i<<" je neparan. cout<<"Broj "<<i<<" je paran. cin>>i.Smajo Mekić . int main() { float a. cout<<endl<<a<<"/"<<b<<"="<<rez<<" cijelih i " <<ost<<" ostatka. rez=floor(rez).#include <iostream> #include <cmath> using namespace std. } if (i%2==0) { rez=pow(i.rez. cout<<"Unesi broj:". } system("PAUSE"). cin>>a. ost=fmod(a.b).b. 128 C++ programiranje za srednje škole prof. cin>>b. else { rez=a/b. a njegova treca potencija iznosi"<<rez<<endl. cout<<endl<<"Provjera: "<<rez<<"*"<<b<<"+"<<ost <<"="<<rez*b+ost<<endl."<<endl. } Struktura grananja .Rješenje2 #include<iostream> #include<cmath > using namespace std.3). cout<<"Upisi djeljenik:".ost. if (i<0) { i=abs(i). if (b==0) cout<<"Ne moze se dijeliti sa 0.

} else { xR=-b/(2*a). cin>>a.xR. cout<<"Upisi koeficijent b:".x1. cout<<"Rjesenja su realni brojevi x1= "<<x1<<" i x2="<<x2<<endl. } Struktura grananja .jednadzba nije kvadratna"<<endl. cin>>c.pom1.xi. z2= "<<xR<<""<<xi<<"i"<<endl. if (pom1>=0) { x1=(-b+sqrt(pom1))/(2*a). cin>>b.x2. cout<<"Upisi koeficijent a:". } Struktura grananja . return 0. } } else { cout<<"Ako je koeficijent a=0. cout<<endl<<"z1="<<xR<<"+"<<xi<<"i. cout<<"Upisi koeficijent c:". x2=(-b-sqrt(pom1))/(2*a).b. xi=sqrt(-pom1)/(2*a). if (a!=0) { pom1=b*b-4*a*c.return 0.Rješenje4 #include<iostream> 129 C++ programiranje za srednje škole prof.c.Smajo Mekić .Rjeešenje3 #include<iostream> #include<cmath> using namespace std. } system("PAUSE"). cout<<"Rjesenja su kompleksni brojevi:". int main() { float a.

c. cout<<"Unesi brzinu rijeke u m/s: ". system("PAUSE").#include<cmath> using namespace std.v.14159265. } Struktura grananja . const float PI=3."<<endl. cin>>vr. cin>>a. cout<<" cm. ugao=ugao*180/PI. const double PI=3. cout<<"Unesi brzinu camca u m/s: ". cout<<endl<<"Ako je brzina rijeke "<<vr<<" m/s. cin>>vc. a vrijednost katete a="<<a. int main() { float vc.2)). C++ programiranje za srednje škole prof.ugao.2)+pow(vr. cout<<"Unesi vrijednost katete a: ".Rješenje5 #include<iostream> #include<cmath> using namespace std.Smajo Mekić 130 .ugaoalfa1.14. c=a/sin(ugaoalfa1).vr. cout<<endl<<"Ako je vrijednost ugla alfa " <<ugaoalfa. ugaoalfa1=ugaoalfa*PI/180. ugao=atan(vr/vc). cout<<"Unesi vrijednost ugla alfa u stepenima: ". cin>>ugaoalfa. int main() { float ugaoalfa. cout<<" stepeni. hipotenuza ima vrijednost c="<<c<<" cm.a. cout<<" m/s camac se u odnosu na obalu giba brzinom "<<v<<" m/s."<<endl. v=sqrt(pow(vc. a brzina camca "<<vc.return 0.

system("PAUSE"). cin>>a. return 0. int main() { 131 .min. min=a. } Struktura grananja .Smajo Mekić min=c. system("PAUSE"). " <<b<<" i "<<c<<" najmanji od njih je "<<min. int main() { float a. cin>>b. Struktura grananja Rješenje 7 #include<iostream> using namespace std. } C++ programiranje za srednje škole prof."<<endl.cout<<endl<<"Camac je skrenuo sa svoje putanje za "<<ugao<<" Stepeni. cout<<"Upisi treci broj:". if (b<min) { min=b.Rješenje6 #include<iostream> using namespace std.b. cout<<"Upisi drugi broj:". cout<<"Upisi prvi broj:".c. } if (c<min) { } cout<<"Ako se upisu brojevi: "<<a<<". return 0. cin>>c.

if (b>max) { max=b. } mid=a. } max=a.max. "<<max<<endl.c. } if (c<min) { min=c. cout<<"Upisi drugi broj:".min. } cout<<"Brojevi: "<<a<<". "<<b<<" i "<<c<<" poredani od najmanjeg ka najvecem:". if ((b!=max)&&(b!=min)) { mid=b. cout<<"Upisi treci broj:". cout<<"Upisi prvi broj:". cin>>a.Smajo Mekić 132 .float a. cout<<endl<<min<<". min=a. } if (c>max) { max=c.mid. C++ programiranje za srednje škole prof.b. if (b<min) { min=b. } if ((c!=max)&&(c!=min)) { mid=c. "<<mid<<". cin>>c. cin>>b.

"<<endl. U=I*R.R. I=U/R. cout<<"R (om)=". cin>>R. int main () { cout<<"Omov zakon"<<endl. break. cin>>R. cout<<I<<" A. float U. cout<<"Ako je jacina struje "<<I<<" A. switch (i) { case 1: cout<<"U (V)=". a za otpor 3: "."<<endl. cin>>i. case 3: C++ programiranje za srednje škole prof. a otpor "<<R<<" oma. cin>>U. a otpor "<<R<<" oma. int i. cin>>I. } Struktura grananja . za racunanje napona upisi 2. napon iznosi ".return 0. cout<<U<<" V. cout<<"Ako je napon "<<U<<" V. cout<<"Za racunanje jacine struje upisi 1.system("PAUSE").Rješenje8 #include <iostream> using namespace std.Smajo Mekić 133 . case 2: cout<<"I (A)=". jacina struje iznosi ". cout<<"R (om)=".I. break.

"<<endl. a jacina struje iznosi ". } system("PAUSE"). break. cout<<I<<" A.cout<<"U (V)=". cout<<"Upisi redni broj mjeseca: ". cout<<" Program na osnovu unesenog rednog broja mjeseca ispisuje".Rješenje9 #include<iostream> using namespace std. R=U/I. mjesec ima 30 dana. cout<<" koliko taj mjesec ima dana"<<endl. case 1: case 3: case 5: case 7: C++ programiranje za srednje škole prof. default: cout<<"Pogresan unos. 134 . } Struktura grananja ."<<endl. cin>>U. otpor iznosi "<<R<<" oma.Smajo Mekić cin>>i. int main() { int i.return 0. cout<<"I (A)=". break. 2 ili 3. cin>>I.". cout<<"Ako je napon "<<U<<" V. switch (i) { case 4: case 6: case 9: case 11: cout<<i<<". Treba upisati 1.

cout<<"b = ". a za povrsinu 2:". cout<<"a = ". cout<<"Za racunanje obima upisi 1. ovisno o zelji korisnika"<<endl. case 2: cout<<i<<". float a. cin>>i.pov.b.Smajo Mekić cout<<"Program na osnovu unesenih vrijednosti stranica trougla racuna ".". default: cout<<"Pogresan unos.Rješenje10 #include<iostream> #include<cmath> using namespace std. cout<<" Redni broj mjeseca moze biti iz raspona od 1 do 12. cin>>a. mjesec ima 28 dana (ili 29 ako je godina prestupna). } system("PAUSE"). cout<<"c = ".p1.o.". int i. mjesec ima 31 dan.p. return 0.". break.c.case 8: case 10: case 12: cout<<i<<". int main() { C++ programiranje za srednje škole prof. cin>>b."<<endl. cout<<" obim ili povrsinu. } Struktura grananja . if((a<=0)||(b<=0)||(c<=0)) 135 . break. cin>>c.

cout<<" Povrsina trougla je P= "<<pov<<endl. break. } switch(i) { case 1: o=a+b+c.Smajo Mekić default: 136 . pov=sqrt(p1)." <<endl. p1=p*((p-a)*(p-b)*(p-c)). kraj:return 0. } if((a+b<=c)||(b+c<=a)||(c+a<=b)) { cout<<" Unesene vrijednosti nisu stranice trougla. case 2: cout<<"Povrsina se racuna po Heronovoj formuli".{ cout<<"Vrijednost stranice trougla ne moze biti <=0 " <<endl. goto kraj. p=(a+b+c)/2. break. cout<<"Obim trougla je O= "<<o<<endl. } system("PAUSE"). } Struktura grananja .Rješenje11 #include<iostream> #include<iomanip> #include<cmath> using namespace std. cout<<" Pogresan unos. int main() C++ programiranje za srednje škole prof. goto kraj. Valja unijeti 1 ili 2! " <<endl.

cout<<setw(35)<<"Dobar od 64% do 76%: "."<<endl. cout<<setw(35)<<"Dovoljan od 51% do 63%: ". 137 ."<<endl.". cout<<"Program na osnovu osvojenog broja bodova na testu. cout<<" odgovarajucu ocjenu."<<floor(63*p)<<" bodova. ispisuje ". upis:cout<<"Upisi maksimalni broj bodova na testu: ". ocjena nedovoljan. if (po>=0 && po<=50) cout<<b<<" bodova je "<<po<<" %. cout<<floor(51*p)<<" ."<<endl.i."<<endl."<<i<<" bodova. po." <<endl. cout<<floor(64*p) <<" . ocjena C++ programiranje za srednje škole prof. cin>>i. if (i<=0) goto upis.b. cout<<floor(77*p)<<" . p=i/100."<<floor(88*p)<<" bodova. cout<<floor(89*p)<<" . cout<<setw(35)<<"Vrlo dobar od 77% do 88%: ".Smajo Mekić cout<<"Neispravan unos. cin>>b.{ float p. upis2:cout<<endl<<endl<<"Upisi osvojeni broj bodova na testu: ". else if (po<=63) cout<<b<<" bodova je "<<po<<" %."<<floor(76*p)<<" bodova. cout<<floor(50*p)<<" i manje bodova. ponovi. cout<<setw(35)<<"Nedovoljan za manje od 50%: "."<<endl. cout<<endl<<setw(35)<<"Odlican od 89% do 100%: "."<<endl. if (b<0 || b>i) { goto upis2. } po=b/p.

} Struktura grananja . ocjena dobar. int main() { int br. else if (po<=76) cout<<b<<" bodova je "<<po<<" %. cout<<"Rastavljanje broja na proste faktore". ocjena vrlo dobar. unos:cout<<"Upisi broj veci od 0:". ocjena odlican. cout<<br<<" = 1"." <<endl.dovoljan.Rješenje12 #include<iostream> #include <iostream> using namespace std. return 0. " <<endl. prbr. goto unos. dj2:if(br==1) C++ programiranje za srednje škole prof. else cout<<b<<" bodova je "<<po<<" %." <<endl.Smajo Mekić 138 . system("PAUSE"). else if (po<=88) cout<<b<<" bodova je "<<po<<" %. if(br<=0) { cout<<"Treba unijeti broj veci od 0" <<endl. } else { prbr=2. " <<endl. cin>>br.

{ goto kraj; } else { dj1:if(br%prbr==0) { cout<<" * "<<prbr; br=br/prbr; goto dj2; } else { prbr=prbr+1; goto dj1; } } } kraj:cout<<endl; system("PAUSE"); return 0; }

#include<iostream> using namespace std; int main() { int brojac,m,n; cout<<"ispis pocinje od broja:"; cin>>m; cout<<"ispis zavrsava brojem:";

139

C++ programiranje za srednje škole prof.Smajo Mekić

Struktura petlje - Rješenje1

cin>>n; for (brojac=m;brojac<=n;brojac++) { cout<<brojac<<" "; } cout<<endl; system("PAUSE"); return 0; } Struktura petlje - Rješenje2 #include<iostream> using namespace std; int main() { int b, brojac; cout<<"Upisi broj sa kojim zelis mnoziti:"; cin>>b; for (brojac=1;brojac<=10;brojac++) cout<<b<<" * "<<brojac<<" = "<<b*brojac<<endl; } Struktura petlje - Rješenje3 #include<iostream> #include<cmath> using namespace std; int main() { float a,b,c,x1,x2,pom1,xR,xi; cout<<"Upisi koeficijent a:"; cin>>a; cout<<"Upisi koeficijent b:"; cin>>b; cout<<"Upisi koeficijent c:"; cin>>c; if (a!=0) { pom1=b*b-4*a*c; if (pom1>=0) { x1=(-b+sqrt(pom1))/(2*a); system("PAUSE"); return 0;

140

C++ programiranje za srednje škole prof.Smajo Mekić

x2=(-b-sqrt(pom1))/(2*a); cout<<"Rjesenja su realni brojevi x1= "<<x1<<" i x2="<<x2<<endl; } else { xR=-b/(2*a); xi=sqrt(-pom1)/(2*a); cout<<"Rjesenja su kompleksni brojevi:"; cout<<endl<<"z1="<<xR<<"+"<<xi<<"i, z2= "<<xR<<"-"<<xi<<"i"<<endl; } } else { cout<<"Ako je koeficijent a=0,jednadzba nije kvadratna"<<endl; } system("PAUSE"); return 0;} Struktura petlje - Rješenje4 #include<iostream> using namespace std; int main() { int brojac,zbrir; zbir=0; cout<<"Zbir prvih 100 prirodnih brojeva je:";
C++ programiranje za srednje škole prof.Smajo Mekić

for (brojac=1;brojac<=100;brojac++) { zbir=zbir+brojac; } cout<<zbir<<endl; system(“Pause“); return 0; }

141

cout<<" do "<<n<<" su:"<<endl. int main() { float vc. cout<<"Unesi brzinu rijeke u m/s: ". 142 C++ programiranje za srednje škole prof. cin>>n. v=sqrt(pow(vc. cin>>b. a brzina camca "<<vc.m.brojac++) { if(brojac%b==0) cout<<brojac<<" ".2)+pow(vr. cout<<"Zavrsna vrijednost rapona:"."<<endl.2)). ugao=atan(vr/vc). cout<<" m/s camac se u odnosu na obalu kreće brzinom "<<v<<" m/s. system("PAUSE").b. const double PI=3. int main() { int brojac. cin>>vr. return 0.Struktura petlje . cin>>vc. system("PAUSE")."<<endl. cout<<"Unesi brzinu camca u m/s: ". for (brojac=m.Rješenje6 #include<iostream> using namespace std. cout<<"Pocetna vrijednost raspona:". cin>>m.14159265. cout<<endl<<"Ako je brzina rijeke "<<vr<<" m/s.Smajo Mekić . cout<<"Provjerava se djeljivost sa brojem:". } Struktura petlje .n.brojac<=n.vr. ugao=ugao*180/PI.ugao. cout<<"Brojevi djeljivi sa "<<b<<" iz raspona od "<<m.Rješenje5 #include<iostream> #include<cmath> using namespace std.v. } cout<<endl. cout<<endl<<"Camac je skrenuo sa svoje putanje za "<<ugao<<" stepeni.

N. return 0. cout<<"Program sabira sve prirodne trocifrene brojeve. cin>>broj. system("PAUSE"). } cout<<"Zbir unesenih brojeva je "<<zbir<<endl.Rješenje7 #include<iostream> using namespace std.brojac++) { cout<<"Upisi broj: ". cin>>N.brojac<=999. 143 C++ programiranje za srednje škole prof. } Struktura petlje . int main() { float zbir. system("PAUSE").return 0. } Struktura petlje ."<<endl.Rješenje8 #include<iostream> using namespace std.Rješenje9 #include <iostream> using namespace std.zbir. int main() { int brojac. zbir=0. } Struktura petlje .N.brojac. zbir=0.zbir.brojac++) { zbir=zbir+brojac.brojac<=N. for (brojac=1. int main() { int broj. return 0. for(brojac=100.brojac.Smajo Mekić . } cout<<"Zbir svih prirodnih trocifreni brojeva je "<<zbir<<endl. cout<<"Upisi koliko brojeva zelis sabirati: ". zbir=zbir+broj.

cin>>N. cout<<"Upisi gornju granicu raspona: ".brojac.brojac++) { zbir=zbir+1/brojac. cout<<brojac<<" ". } Struktura petlje .Rješenje10 #include<iostream> using namespace std.brojac. cout<<"U intervalu od 1 do "<<N<<" brojevi djeljivi sa 3 su: " <<endl.zbir. cout<<"Upisi zavrsnu vrijednost raspona:". 144 C++ programiranje za srednje škole prof. int main() { int N. for(brojac=1. for(brojac=1.cout<<endl<<"Upisi zeljeni broj clanova niza: ".brojac++) { if(brojac%2==0) broj=broj+1. return 0.brojac++) { if(brojac%3==0) { zbir=zbir+brojac. system("PAUSE").Rješenje11 #include<iostream> using namespace std.N.brojac<=N. cin>>N. broj=0. zbir=0. return 0. cin>>N. zbir=0. } cout<<"Zbir "<<N<<" clanova ovog niza iznosi " <<zbir <<endl.brojac<=N. } Struktura petlje . for(brojac=1. int main() { int broj.Smajo Mekić . system("PAUSE"). } } cout<<"Zbir brojeva djeljivih sa 3 iz \ intervala od 1 do "<<N<<" je"<<zbir.brojac<=N.

cout<<"Upisi prirodni broj: ". } Struktura petlje . kraj:return 0.Smajo Mekić . } } cout<<"Broj "<<N<<" je prost."<<endl.brojac<=(N-1). system("PAUSE"). for (brojac=2.brojac<=(N-1).Rješenje12 #include<iostream> using namespace std. for (brojac=1.return 0. system("PAUSE"). } } if(zbir==N) cout<<"Broj "<<N<<" je savrsen.N. goto kraj.Rješenje13 #include<iostream> using namespace std.brojac++) { if(N%brojac==0) { cout<<"Broj "<<N<<" nije prost.brojac++) { if(N%brojac==0) { zbir=zbir+brojac.} cout<<"U intervalu od 1 do "<<N<<" ima "<<broj<<" parnih brojeva "<<endl. else cout<<"Broj "<<N<<" nije savrsen."<<endl. int main() { int brojac. return 0.zbir. 145 C++ programiranje za srednje škole prof. zbir=0. cout<<"Upisi prirodni broj: ". cin>>N."<<endl.N. cin>>N. int main() { int brojac."<<endl. } Struktura petlje .

brojac++) { if(br%brojac==0) zbir=zbir+brojac.i++) { pom=i.Rješenje16 #include<iostream> 146 C++ programiranje za srednje škole prof. cout<<"Savrseni brojevi su: ".t.d.zbir. } system("PAUSE"). return 0.pom. t=(pom/1000)%10. for(i=1000. int main() { int br. return 0.Zadatak15 #include<iostream> using namespace std. if(j*d*s*t==100) cout<<endl<<i.Rješenje14 #include<iostream> using namespace std.i<=9999. for(br=1. } . cout<<"Brojevi ciji je proizvod cifara 100 su: ". } system("PAUSE").br++) { zbir=0.s.} Struktura petlje . int main() { int i. } Struktura petlje . } if(zbir==br) cout<<br<<" ".j. s=(pom/100)%10.brojac<=(br-1).Smajo Mekić Struktura petlje . for (brojac=1. j=pom%10.br<=3000.brojac. d=(pom/10)%10.

cout<<"Brojevi koji zadovoljavaju uslov su: ".red<=45. return 0. int main() { int i.stupac<=5. } system("PAUSE"). int main() { int znak. znak=znak+1.red++) { for(stupac=1.red.s.i<=999. } } system("PAUSE").Rješenje17 #include<iostream> #include<iomanip> using namespace std. int main() { int i. } Struktura petlje . znak=32.stupac.i<=10.p.stupac++) { cout<<setw(10)<<znak<<" = "<<char(znak). return 0.Smajo Mekić Struktura petlje .i++) { if((i%10==7)&&(i%7==0)) { cout<<endl<<i. for(i=1. } .using namespace std. } cout<<endl.Rješenje18 #include<iostream> #include<iomanip> using namespace std. for(red=1.i++) { 147 C++ programiranje za srednje škole prof. p=40. for(i=100. s=10.

cout<<endl<<i. } Struktura petlje .cout<<setw(s)<<"***"<<setw(p)<<"***"<<endl. system("PAUSE"). cout<<"Upisi prirodni broj: ". cin>>b.i. } 148 C++ programiranje za srednje škole prof. } Struktura petlje . } while(b>0). b=b/10. upis:cout<<"Upisi prirodni broj: ". br=br+1.b. return 0. while(b>0) { i=b%10. return 0.Smajo Mekić . cin>>b. } system("PAUSE"). cout<<"Broj cifara: "<<br<<endl. int main() { int br. system("PAUSE"). br=0.Rješenje19 #include<iostream> using namespace std. if (b<=0) goto upis. p=p-4. do { b=b/10. return 0. int main() { int b.Rješenje20 #include<iostream> using namespace std. s=s+2. } cout<<endl.

Rješenje22 #include<iostream> using namespace std. b=b/10. if (b<=0) goto upis. } Struktura petlje . s=0.Rješenje21 #include<iostream> using namespace std. upis:cin>>b. } cout<<"Upisi prirodni broj: ". } cout<<"Zbir cifara broja "<<br<<" je "<<s<<endl.i. max=b.max.Smajo Mekić . system("PAUSE"). while(b>0) { i=b%10. int main() { int b. 149 C++ programiranje za srednje škole prof. s=s+i. while(b>0) { if(b>max) { max=b.br.Struktura petlje . upis:cout<<endl<<"Upisi prirodni broj: ". goto upis. cout<<"Upisi prirodni broj: ". return 0. if(b<0) { cout<<"Upisi prirodni broj"<<endl.s. } br=b. int main() { int b. cin>>b.

if(R<0) { cout<<"Vrijednost otpora mora biti >0. goto upis.br. Ruk1=0. int main() { cout<<"Program racuna srednju ocjenu uspjeha ucenika.suma. system("PAUSE").Rješenje23 #include<iostream> using namespace std.Rješenje24 #include<iostream> using namespace std."<<endl."<<endl.Smajo Mekić . cout<<"Nakon posljednje ocjene unosi se 0.Ruk. cin>>R. suma=0. int main() { float R. br=0. } while(R>0) { br=br+1. cin>>R. } Ruk=1/Ruk1. 150 C++ programiranje za srednje škole prof.cin>>b.br. system("PAUSE"). } Struktura petlje . upis:cout<<"Upisi vrijednost otpora u omima: ". cout<<"Nakon posljednje vrijednosti otpora unijeti 0" <<endl.Ruk1. } Struktura petlje . } cout<<endl<<"Najveci broj je: "<<max<<endl. return 0.". float b. Ruk1=Ruk1+1/R. return 0. cout<<"Ukupni otpor "<<br<<" otpora spojenih u paralelu je "<<Ruk<<" oma."<<endl. cout<<"Upisi vrijednost otpora u omima: ".

} } while(b>0)."<<endl. } else if(b<0) { cout<<"Pogresan unos. cin>>N.brojac.N. } cout<<prvi<<" "<<drugi.Smajo Mekić . goto kraj. int main() { int prvi. } Struktura petlje . cout<<"Program ispisuje N clanova Fibonaccijevog niza. br=br-1. goto upis. for(brojac=3. cin>>b. } else { suma=suma+b.br=0. system("PAUSE"). prvi=1.Rješenje25 #include<iostream> using namespace std. do { cout<<"Unesi ocjenu: ". kraj:return 0.brojac++) { 151 C++ programiranje za srednje škole prof. if(b==1) { cout<<"Negativan uspjeh. if(N<2) { cout<<"Broj clanova niza mora biti veci ili jednak 2"<<endl. goto kraj.drugi. br=br+1."<<endl.brojac<=N. cout<<"Srednja ocjena uspjeha je " <<suma/br<<endl. upis:cout<<"Upisi koliko clanova niza zelis: "."<<endl. drugi=1.treci.

int main() { int A. unos:cout<<"Unesi prvi broj: ". return 0. for(br=2.treci=prvi+drugi. return 0.".br++) { if((A%br==0)&&(B%br==0)) mjera=br. cin>>B. } mjera=1.Rješenje27 #include<iostream> using namespace std. system("PAUSE"). drugi=treci.manji. if((A<=0)||(B<=0)) { cout<<"Treba unijeti brojeve vece od 0"<<endl. int main() { cout<<"Program na osnovu unesenih cifara Sastavlja i ispisuje prirodni broj. } Struktura petlje . cout<<" "<<treci. system("PAUSE").br. } cout<<endl. cout<<"Unesi drugi broj:".br. } Struktura petlje . < int ci.B. } manji=B.br<=manji. } cout<<"Najveca mjera brojeva "<<A<<" i "<<B<<" je "<<mjera<<endl.Smajo Mekić . prvi=drugi. 152 C++ programiranje za srednje škole prof.Rješenje26 #include<iostream> using namespace std.mjera. if(A<B) { manji=A. goto unos. cin>>A.

2000. Stroustrup. cout<<"Upisi cifru: ". Zagreb. 2001. Addison-Wesley. B. The C++ Programming Language. cin>>ci. 2005. cin>>ci. system("PAUSE"). Hekmat. Element. C++ Programming. Osnove programiranja u C++ -Aleksandar Karač. cout<<endl<<"Upisi cifru: ". Ltd. and Šribar.Smajo Mekić . Pragmatix Software Pty. 153 C++ programiranje za srednje škole prof. 2. izdanje edition. 3. C++ za apsolutene početnike Motik.br=0. Demistificirani C++. while((ci>=0)&&(ci<=9)) { br=br*10+ci.izdanje edition. B. } LITERATURA Efikasno programiranje na jeziku C++/Praktični primjeri/-Andrew Koenig. } cout<<"Broj sastavljen od zadanih cifara je " <<br<<endl.Senad Rahimić.Barbara E. J. return 0. Predavanja sa FIT-a Mostar/Uvod u programiranje/Programiranje 1 i 2.Moo. Uvod u programiranje dr. S..

You're Reading a Free Preview

Download
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->