88
Računalstvo i programiranje §1 ALGORITAM I DIJAGRAM TIJEKA Algoritam ja naputak kako riješiti neki zadatak ili obaviti neki posao. Npr. postavimo li osobi koja nikada nije kuhala čaj za četiri osobe taj zadatak, pomoći ćemo mu algoritmom koji može glasiti ovako: U posudu za kuhanje uliti približno litru vode. Zagrijavati vodu dok ne zavri. U vodu staviti četiri vrećice čaja. Prestati zagrijavati. Pričekati deset minuta. Uliti čaj u četiri šalice i poslužiti. Ako je riječ o računalima, algoritam je uputa računalu kako može riješiti postavljeni zadatak. Načinjen je na temelju specifikacije, a napisan je na način na koji se može pretvoriti u naredbe računalnog jezika. To je redovito niz relativno jednostavnih operacija čijim se slijednim izvršavanjem može na temelju ulaznih podataka doći do rezultata. Algoritam je, dakle, postupak rješavanja određenog problema, koji tekstualno zapisujemo pseudokodom (˝lažnim jezikom˝). Primjer algoritma zapisanog u pseudokodu: Početak Pogledaj kolika je vanjska temperatura Ako je temperatura niža od 25 stupnjeva Obuci majicu dugih rukava Inače Obuci majicu kratkih rukava kraj Postoje tri osnovna algoritamska postupka: 1. slijed - naredbe slijede jedna iza druge Npr. ULIJ litru vode u posudu ZAGRIJAVAJ do potrebne temperature ISKLJUČI dovod topline UBACI četiri vrećice čaja ULIJ u šalice i posluži 2. grananje – programska struktura koja omogućuje različiti tijek programa, ovisno o rezultatu postavljenog uvjeta. Uvjet koji se postavlja 1

PROGRAMIRANJE C++ osnovno

Embed Size (px)

DESCRIPTION

Ukratko o osnovama programiranja u C++ razvojnom programu.Objasnjenja sintaksi petlji,deklaracije varijabli,tipovi podataka itd.

Citation preview

Page 1: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

§1 ALGORITAM I DIJAGRAM TIJEKA

Algoritam ja naputak kako riješiti neki zadatak ili obaviti neki posao. Npr. postavimo li osobi koja nikada

nije kuhala čaj za četiri osobe taj zadatak, pomoći ćemo mu algoritmom koji može glasiti ovako:

U posudu za kuhanje uliti približno litru vode. Zagrijavati vodu dok ne zavri. U vodu staviti četiri vrećice

čaja. Prestati zagrijavati. Pričekati deset minuta. Uliti čaj u četiri šalice i poslužiti.

Ako je riječ o računalima, algoritam je uputa računalu kako može riješiti postavljeni zadatak. Načinjen

je na temelju specifikacije, a napisan je na način na koji se može pretvoriti u naredbe računalnog jezika. To je

redovito niz relativno jednostavnih operacija čijim se slijednim izvršavanjem može na temelju ulaznih

podataka doći do rezultata.

Algoritam je, dakle, postupak rješavanja određenog problema, koji tekstualno zapisujemo pseudokodom

(˝lažnim jezikom˝).

Primjer algoritma zapisanog u pseudokodu:

Početak

Pogledaj kolika je vanjska temperatura

Ako je temperatura niža od 25 stupnjeva

Obuci majicu dugih rukava

Inače

Obuci majicu kratkih rukava

kraj

Postoje tri osnovna algoritamska postupka:

1. slijed - naredbe slijede jedna iza druge

Npr. ULIJ litru vode u posudu

ZAGRIJAVAJ do potrebne temperature

ISKLJUČI dovod topline

UBACI četiri vrećice čaja

ULIJ u šalice i posluži

2. grananje – programska struktura koja omogućuje različiti tijek programa, ovisno o rezultatu

postavljenog uvjeta. Uvjet koji se postavlja je takav da se na njega može odgovoriti s da ili ne. Takve uvjete

nazivamo logički uvjeti.

Npr. Ako je na semaforu zeleno svjetlo, produži vožnju.

Ako je na semaforu žuto svjetlo, procijeni ima li dovoljno

vremena za zaustavljanje automobila.

Ako ima dovoljno vremena, zaustavi automobil.

Ako nema dovoljno vremena za zaustavljanje, ubrzaj i prođi kroz

raskrižje.

Ako je na semaforu crveno svjetlo, zaustavi automobil i čekaj

zeleno svjetlo.

1

Page 2: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

3. ponavljanje – je struktura koju koristimo u slučaju da treba ponoviti jednu ili više naredbi. Pri tome

razlikujemo dvije situacije:

a) prije početka ponavljanja unaprijed točno znamo koliko puta postupak treba ponoviti

b) broj ponavljanja ovisi o izvršavanju niza koje se ponavljaju

Niz naredbi koje ponavljamo zajedno s naredbama koje određuju ponavljanje nazivamo petlja.

Npr. Treba u računalo upisati 100 cijelih brojeva i za svaki broj ispisati korisniku zahtjev da upiše jedan cijeli

broj. Bez petlje algoritam bi izgledao ovako:

Ispisati " Upiši cijeli broj ".

Upis broja.

Ispisati " Upiši cijeli broj ".

Upis broja.

Ispisati " Upiši cijeli broj ".

Upis broja.

(… stotinu puta ponoviti ova dva retka.) , ili pomoću petlje:

Ponoviti 100 puta petlju.

Ispisati " Upiši cijeli broj ".

Upis broja.

Kraj petlje.

Algoritme za rješavanje problema najčešće grafički prikazujemo pomoću blok dijagrama (dijagrama

tijeka).Tako prikazan algoritam vrlo je pregledan i potpuno određen. Posebno je pogodan ukoliko program

treba analizirati, izmijeniti ili tražiti slično rješenje.

Pri izradi blok dijagrama služimo se posebnim znakovima:

početak i kraj programa

ulaz podataka

izlaz podataka

naredba

odluka (ili uvjet)

2

Page 3: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

1.1. SLIJED

je algoritamski postupak u kojemu se programske procedure izvršavaju slijedno – redom kojim su napisane.

Primjer 1.1.1. Napiši algoritam i nacrtaj dijagram tijeka za izračunavanje zbroja dvaju brojeva i ispisivanje

dobivenog zbroja.

Opišimo prvo što treba učiniti:

1. Zapamtiti dva broja koja zadaje korisnik (npr. s tipkovnice), označiti ih proizvoljnim oznakama,

npr. A i B.

2. Zbrojiti brojeve A i B i spremiti ih u nepoznanicu C.

3. Ispisati rezultat C.

Algoritam će izgledati ovako:

početak

upiši A i B

C = A + B

ispiši C

kraj

Dijagram tijeka će izgledati ovako:

Primjer 1.1.2. Napiši algoritam i nacrtaj dijagram tijeka za izračunavanje opsega raznostraničnog trokuta,

kojemu su zadane duljine stranica a, b i c uz pretpostavku da zadane stranice čine trokut.

Opis postupka:

1. Zapamtiti duljine stranica a, b i c.

2. Izračunati opseg trokuta po formuli a+b+c i rezultat spremiti u varijablu opseg.

3. Ispisati varijablu opseg.

3

START

A, B

C=A+B

C

KRAJ

Page 4: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

Algoritam:

početak

upiši a, b i c

opseg = a + b + c

ispiši opseg

kraj

Dijagram tijeka:

Zadaci za vježbu:

1. Napiši algoritam i dijagram tijeka za računanje razlike, umnoška i količnika dvaju brojeva.

2. Napiši algoritam i dijagram tijeka za računanje opsega i površine kvadrata ako je zadana duljina

stranice kvadrata.

3. Napiši algoritam i dijagram tijeka za računanje prosjeka četiri zadana broja.

4. Napiši algoritam i dijagram tijeka za pretvaranje centimetara u metre. (Zadan je broj u centimetrima,

treba odrediti koliko je to metara.)

1.2. GRANANJE

4

a, b, c

opseg=a+b+c

opseg

KRAJ

START

Page 5: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

Često puta tijek algoritma ovisi o nekim uvjetima. Tada računalo mora donijeti odluku i ovisno o njoj

nastaviti s izvršavanjem algoritma. Odluke moraju biti u obliku uvjeta (pitanja) na koji se mora moći

odgovoriti s da ili ne, tj. laž ili istina.

Primjer 1.2.1. 3 < 5 istinit uvjet, 17 < 5 lažan uvjet

Primjer 1.2.2. Izrazi 3 + 4 ili abc nisu uvjeti

Primjer 1.2.3. Napiši algoritam i dijagram tijeka koji za upisana dva različita broja ispisuje veći.

Opis:

1. Zadati brojeve A i B.

2. Treba provjeriti da li je A > B, te ovisno o tome učiniti jednu od ove dvije radnje:

a) ako je A > B ispisati A

b) ako je A < B ispisati B

Algoritam:

početak

upiši A, B

ako je A > B

onda ispiši ˝A je veći od B˝

inače ispiši ˝B je veći od A˝

kraj

DA

NE

NE

Primjer 1.2.4. Napiši algoritam i dijagram tijeka koji će izračunati opseg raznostraničnog trokuta kojemu su

upisane duljine stranica a, b i c. Potrebno je provjeriti da li duljine upisanih stranica mogu činiti trokut.

Da bi brojevi a, b i c mogli biti duljine stranica raznostraničnog trokuta moraju zadovoljavati uvjet

nejednakosti trokuta, tj. moraju biti zadovoljene tri nejednakosti: a < b + c, b < a + c i c < a + b.

Opis:

1. Zadati tri broja a, b i c.

2. Provjeriti uvjete : a < b + c, b < a + c, c < a + b, i ovisno o tome:

a) ako su svi uvjeti zadovoljeni izračunati opseg i ispisati ga

b) ako barem jedan od uvjeta nije zadovoljen ispisati poruku da zadani brojevi ne čine stranice

trokuta.

5

A, B

B

KRAJ

START

A>B A

KRAJ

Page 6: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

Algoritam:

početak

upiši a, b i c

ako je a < b + c i b < a + c i c < a + b

onda opseg = a + b + c

ispiši opseg

inače ispiši "Zadani brojevi nisu duljine stranica"

kraj

Dijagram tijeka:

DA

NE

NE

Zadaci za vježbu:

1. Napiši algoritam i dijagram tijeka koji zadani broj A uvećava 105 puta ako je A<100, a inače A

umanji za 100. Ispišite dobiveni rezultat.

2. Napiši algoritam i dijagram tijeka za računanje opsega i površine kvadrata ako je zadana duljina

stranice a. Prije računanja treba provjeriti da li je a>0, pa ako nije ispisati poruku " Stranica kvadrata mora

biti pozitivan broj!".

3. Napiši algoritam i dijagram tijeka za računanje apsolutne vrijednosti cijelog broja.

6

a, b, c

Zadani brojevi nisu duljine stranica

trokuta

KRAJ

START

a<b+c,b<a+c,c<a+b

opseg

KRAJ

opseg=a+b+c

Page 7: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

1.3. PETLJA

je programska struktura koja ponavlja jednu ili više naredbi. Petlju ostvarujemo koristeći posebnu varijablu i

koja nam služi kao brojač, te naredbe oblika i=i+1. Znak jednakosti u programima ima ulogu operatora

pridruživanja, pa napisana jednakost ima smisla.

Primjer 1.3.1. Napiši algoritam i dijagram tijeka za ispis prvih 20 prirodnih brojeva.

Opis:

1. Odaberemo jednu varijablu koja će pamtiti koji broj trenutno ispisujemo. Nazovimo je i.

2. Postavimo vrijednost od i na 1.

3. Ispišimo vrijednost od i.

4. Povećajmo vrijednost od i za 1.

5. Ako je i 20 vraćamo se na ispisivanje i (korak 3.), a inače završimo program (jer smo ispisali

sve brojeve i 20).

Algoritam:

početak

i = 1

ispiši i

i = i+ 1

ako je i 20 idi na naredbu ispiši i

kraj

Dijagram tijeka:

DA

NE

Zadaci za vježbu:

1. Napiši algoritam koji će učitati 30 realnih brojeva i izračunati njihov produkt.

2. Napiši algoritam koji će učitavati znakove s tipkovnice do učitanog znaka ˝*˝. Algoritam treba

ispisati broj samoglasnika.

7

i

KRAJ

i 20

START

i = 1

i = i + 1

Page 8: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

1.4. UOBIČAJENE PROGRAMSKE STRUKTURE

Programska struktura je ustrojstvo programa, tj. načini i redoslijed rješavanja pojedinih zadataka koji vode

do konačnog rješenja problema. Nekoliko je struktura koje se pojavljuju u računalnim programima:

a) Upis i ispis podataka

- upis je postupak u kojem računalu predajemo određene podatke, obično preko tipkovnice

- ključna riječ pseudokoda za upis podataka je učitaj

Primjeri: učitaj a

učitaj radijus_kružnice

- ispis podataka je postupak u kojem računalo rezultate prenosi okolini i to preko monitora,

printera, zvučnika, itd.

- ključna riječ je ispiši

Primjeri: ispiši površina_kruga

ispiši min

b) pridruživanje

-pri rješavanju problema često koristimo veličine koje u tijeku rješavanja mijenjaju svoju vrijednost.

Takve veličine nazivamo varijable. Oznaka pridruživanja vrijednosti varijablama je znak jednakosti: =

Primjeri: a=2

x=y+3, itd.

c) grananje

-je programska struktura koja omogućuje različiti tijek programa u ovisnosti o rezultatu

postavljenog uvjeta. Ključne riječi :

ako je (uvjet) onda __________

inače _________

Primjer1: ako je x<0

onda ispiši ˝negativan˝

Primjer 2: ako je b<>0 onda

kvocijent=a/b

ispiši kvocijent

inače ispiši ˝dijeljenje s nulom˝

d) petlja

- je programska struktura koja omogućuje ponavljanje jedne ili više naredbi. Razlikujemo tri vrste petlji:

d1) ponavljanje naredbi unaprijed zadani broj puta, ključne riječi:

za brojač = pv do kv

radi naredbe

pv- početna vrijednost, kv- krajnja vrijednost

8

Page 9: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

Primjer: produkt učitanih 10 brojeva:

produkt = 1;

za i = 1 do 10 radi

učitaj x;

produkt = produkt *x;

i=i+1;

ispiši produkt;

d2) ponavljanje s ispitivanjem uvjeta na početku , ključne riječi:

dok je (uvjet) radi _____________

Primjer: ispis višekratnika broja 5 manjih od učitanog broja a te prebrojavanje koliko takvih brojeva ima.

Početak

upiši a;

broj =5;

i=0;

dok je (broj < a) radi

ispiši broj;

broj=broj + 5;

i=i+1;

ispiši ˝Broj višekratnika broja 5 manjih od˝ a ˝je˝ i;

kraj

d3) ponavljanje s ispitivanjem uvjeta na kraju, ključne riječi:

ponavljati

naredbe

do (uvjet)

Primjer: ispis ostatka pri uzastopnom dijeljenju učitanog prirodnog broja sa dva ( npr. pri određivanju

binarnog zapisa prirodnog broja)

početak

učitaj a;

ponavljati

ispiši ˝ostatak je˝, a mod 2;

a=a div 2 ;

do a=0;

kraj

mod – ostatak pri cjelobrojnom dijeljenju

div- cjelobrojno dijeljenje

9

Page 10: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

Zadaci za vježbu:

1. Kolika je vrijednost varijable a nakon algoritma:

a = 7;

b = 8;

a = a - b;

b = b + a;

a = b - a;

2. Koju vrijednost će ispisati slijedeći pseudokod za a=1, b=3 ?

početak

učitaj a,b;

dok je 3*a < = b radi

a= b – 2;

b =b + a;

ispiši b

kraj

3. Napiši algoritam koji učitava troznamenkasti broj i provjerava da li je savršen. (Broj je savršen ako

je suma njegovih znamenaka jednaka njihovu umnošku, npr. za broj 123: 1+2+3=123.)

početak

ispiši:˝Unesi troznamenkasti broj˝;

učitaj x;

c=x mod 10; x1 =x div 10;

b=x1 mod 10; x2=x1 div 10;

a=x2 div 10;

ako je (a+b+c)=(a*b*c) ispiši˝Zbroj znamenaka jednak je

umnošku. Broj˝, x, ˝je savršen.˝;

inače ispiši:˝Broj nije savršen.˝;

kraj

10

Page 11: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

§2 PROGRAMSKI JEZIK C++

2.1. RAČUNALNI PROGRAMI

Svrha programiranja jest korisniku dati rješenje određenog problema u obliku

nekog programa koji bi nekim postupkom dao ispravnu informaciju. Programi su uglavnom

namijenjeni za rješavanje problema određenog tipa, poput programa "windows calculator" koji se

bavi samo matematičkim proračunima, Photoshopa koji je namijenjen za rad sa slikama i grafikom,

Notepadom koji je namijenjen za osnovne operacije s tekstom i sl.

Svaki se računalni program sastoji od naredbi. U svakodnevnom životu, naredba je

stanovit postupak izražen razumljivim i dogovorenim načinom, u kojem naredbodavac upućuje

izvršitelja na obavljanje radnje. Sa računalom je slično. Programer (naredbodavac) naređuje

računalu (izvršitelju) obavljanje željene radnje. Program je skup naredbi nanizanih strogo

određenim redoslijedom, čijim izvršenjem se obavlja željeni posao.

Komunikacija između čovjeka i računala ostvaruje se specifičnim, umjetno

kreiranim jezicima koji se nazivaju programski jezici. Program je, dakle, zapis naredaba u

određenom programskom jeziku.

Programski jezici razvijali su se usporedo s razvojem računala. Programi za prva

računala bili su pisani u strojnom jeziku (binarnom prikazu programa). To je najniža moguća

razina prikaza programa za neko računalo, tijesno je vezan za građu računala, odnosno ovisan o

središnjoj jedinici za obradu podataka (mikroprocesoru). Svaki mikroprocesor ima sebi svojstven

strojni jezik, stoga je pisanje programa na ovaj način vrlo složeno i zahtijeva dobro poznavanje

građe računala. Strojni se jezik naziva još jezikom I. generacije.

Strojni jezici ustupili su mjesto simboličkim (asemblerskim) jezicima kod kojih

su naredbe označene kraticama koje podsjećaju na svoju namjenu (ADD-Addition, zbrajanje,

LDA-Load Accumulator, itd.). Ovi se programski jezici nazivaju još i nižim programskim

jezicima, a pripadaju jezicima II. generacije.

Daljnji razvoj doveo je do stvaranja tzv. viših programskih jezika, jezika III.

generacije. To su svi programi koji nisu izravni prikaz binarnog oblika naredbi. Razlog uvođenja

viših programskih jezika je dvojak. Najprije, potreba da se čovjeku teško prihvatljiv strojni jezik

nadomjesti prikladnijim, lakšim i razumljivijim programskim jezikom. Pritom se veći ili manji

skup naredbi strojnog jezika zamjenjuje jednom naredbom višeg programskog jezika, čime se

programeru bitno olakšava posao. Programer najčešće ne mora ništa znati o građi samog računala,

čime je pisanje programa omogućeno stručnjacima raznih područja. Sami programi postaju

razumljivi i čitljivi.

Programski jezici III. generacije pripadaju tzv. proceduralnim programskim

jezicima u kojima se pisanje programa temelji na primjeni procedura, tj. postupaka u kojima su

bitna stroga pravila.

11

Page 12: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

Neki od viših poznatijih programskih jezika su: BASIC( Beginners Allpurpose

Symbolic Instruction Code- jezik opće namjene za početnike), COBOL (Common Bussines

Oriented Language- jezik za poslovne aplikacije i rad s podacima), FORTRAN(Formula

Translation- specijaliziran za rješavanje numeričkih problema); ALGOL ( Algorithmic Oriented

Language- internacionalni jezik za tehničku i znanstvenu primjenu), PASCAL (za učenje

programiranja i rješavanja znanstvenih problema), C, C++,Java( jezici opće namjene, prvenstveno

za sistemske programe), PROLOG( za sisteme umjetne inteligencije).

Prirodniji način čovjekova razmišljanja jest izražavanje u mnogo slobodnijem

obliku nego što propisuju strogo tipizirana pravila. Zbog toga se u novije vrijeme razvijaju tzv.

neproceduralni programski jezici- jezici IV. generacije. Osim nužnih procedura, oni uključuju

konstrukcije vrlo bliske čovjekovu načinu komuniciranja, tj. prilagođeni krajnjem korisniku. Jezici

IV generacije su budućnost, ograničeni su na usko područje primjene (npr. za rad s bazama

podataka: SQL, Quick Query), pa se još uvijek u najvećoj mjeri primjenjuju jezici III. generacije.

Programski jezik C razvio je 1972. godine u tvrtki Bell Telephone Laboratories

Dennis M. Ritchie. Njegova je želja bila stvoriti programski jezik koji će imati značajke niskih

programskih jezika ( potrebnih za kreiranje operacijskih sustava) ali i značajke viših programskih

jezika ( tako da se njime mogu koristiti i ono manje vični programiranju). Široj javnosti postaje

poznat 1978. objavljivanjem knjige The C Programming Language, a današnji temelj jezika C

nastao je standardizacijom tadašnjih inačica 1983. godine. C je jezik opće namjene, što znači da se

u njemu može napraviti gotovo sve: od rješavanja zadataka s natjecanja, do pisanja drivera,

operacijskih sustava, tekst procesora ili igara. Kao proširenje jezika C 1986. godine nastaje jedan

od najrasprostranjenijih objektno orijentiranih jezika opće namjene C++. Razvio ga je Bjarne

Stroustrup za vrijeme rada u AT&T Bell Laboratories.

12

Page 13: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

2.2. PROGRAMIRANJE

Programiranje je pisanje niza naredbi koji tvore program. Taj je korak

tijesno vezan uz programski jezik u kojem programer piše program, a često i uz

sklopovsku opremu na kojoj se program izvodi.

Sastavni dio programa su naredbe. Način korištenja naredbi u programu i

njihovo slaganje strogo je propisano pravilima programskog jezika i naziva se sintaksa.

Ako sintaksa nije zadovoljena, program je neispravan i neće se moći prevesti u strojni jezik ( npr.

ako u Pascalu umjesto WRITE napišemo VRITE, program ne radi.) Sintaktičku ispravnost

programa provjerava program prevoditelj pomoću kojeg se izvorni oblik programa prevodi u

izvedbeni, tj. strojni oblik.

Logičku ispravnost programa, tj. ispravnost u smislu da li program obavlja željenu

radnju, mora osigurati sam programer.

Dijagram tijeka cjelokupnog postupka izrade programa:

NE

DA

13

START

ANALIZA ZADATKA I IZRADA SPECIFIKACIJE

IZRADA ALGORITMA

IZRADA DIJAGRAMA TIJEKA

IZRADA PROGRAMA

IZRADA DOKUMENTACIJE

PROVJERA PROGRAMA

PROGRAM ISPRAVAN?

KRAJ

Page 14: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

2.3. NASTANAK PROGRAMA C++

Nastanak programa C++ možemo podijeliti u nekoliko cjelina:

pisanje izvornog kôda

prevođenje izvornog kôda

povezivanje u izvršni kôd

provjera programa

Izvorni kôd

Izvorni kôd programa nastaje kombinacijom naredbi programskog jezika (engl.

source code ). Izvorni kod je moguće pisati u bilo kojem tekst editoru ali obično se koristi onaj

ugrađen u program. Programi za pisanje izvornog koda danas se uglavnom objedinjuju u cjelinu s

prevoditeljima i povezivačima pa tako nastaje integrirana razvojna okolina ( IDE- integrated

development environment ).

U izvornom kodu programa naredbe i instrukcije pišu se jedna ispod druge i

odvajaju se znakom ";".

Izvorni kôd programa sprema se u datoteku izvornog kôda pod smislenim imenom

i nastavkom *.cpp.

Prevođenje izvornog kôda u izvršni

Program se na računalu može izvršiti samo ako je u strojnom obliku. Takav se

oblik programa naziva izvršni oblik (executable). Izvorni se kôd pretvara u izvršni pomoću dva

programa: prevoditelja (compiler) i povezivača (linker). Program prevoditelj prevodi izvorni

kôd u strojni oblik te provjerava sintaksu napisanog kôda. Ako pronađe greške, ispisuje poruke i

upozorenja ( compile time error) . Otkrivene greške treba ispraviti i ponovno pokrenuti compiler.

Prevođenjem nastaje datoteka objektnog koda ( međukod do izvršnog).

Povezivanje u izvršni kôd

Program koji povezuje objektnu datoteku s drugim potrebnim datotekama naziva

se povezivač (linker). Rezultat uspješnog povezivanja je izvršna datoteka (*.exe). Ako se pri

povezivanju pojavi pogreška , bit će ispisana poruka o tome ( link time error). Pogreške treba

ispraviti pa ponovno pokrenuti prevođenje i povezivanje.

Pogreške i provjera

Tijekom izrade programa mogu se potkrasti pogreške. Pogreške se mogu svrstati u

tri skupine:

Sintaktičke (otkriva ih program prevoditelj) su pogreške nastale zbog nepoštivanja pravila

programskog jezika, npr. pogrešno napisane naredbe i sl.

14

Page 15: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

Pogreške povezivanja (otkriva ih program povezivač) su pogreške koje se javljaju ako nije

moguće povezati izvorni kôd s raspoloživim datotekama

Logičke pogreške (mora ih naći sam korisnik) su pogreške koje nastaju zbog pogrešnog

algoritma na kojem se temelji program.

Najteže je pronaći i ispraviti logičke pogreške jer računalo ne zna koji problem je korisnik želio

riješiti.

2.3. PISANJE PROGRAMA U PROGRAMSKOM JEZIKU C++

Programski jezik C++ je proceduralni programski jezik, što znači da se njegov program sastoji od

niza međusobno povezanih naredbi i funkcija. Početak svakog programa određen je pozivom

funkcije main(), koja je ujedno i jedina obvezna funkcija i može se u programu pozvati samo

jednom. Njezin je zadatak inicijalizacija sistemskih varijabli, definiranje standardnog ulaza i izlaza

i označavanje početka programa.

Primjer 2.3.1. Primjer jednostavnog programa:

#include<iostream.h>

int main()

{

cout<<"Moj prvi C++ program"<<endl;

system ("PAUSE");

return 0; }

2.4. OSNOVNE PREDPROCESORSKE NAREDBE

U programskom jeziku C++ postoje predprocesorske naredbe čija je svrha skraćivanje vremena

pisanja i povećanje preglednosti izvornog koda. Popis svih predprocesorskih naredbi:

#ifdef #define

#ifndef #elif

#include #else

#line #endif

#pragma #error

#undef #if

Osnovne predprocesorske naredbe su : #include i #define.

Opći oblik predprocesorskih naredbi je #naredba parametri, one nadomještaju dio kôda programa

i jedine su funkcije u programu koje se ne odvajaju graničnikom ;.

Naredba #include

15

Page 16: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

Dva su načina pisanja parametara kod naredbe #include:

#include "ime datoteke"

#include <ime datoteke>

Naredbom #include prije prevođenja u izvorni se kôd programa uključuje izvorni kôd

navedene datoteke ("ime datoteke").

Prvi oblik naredbe omogućuje uključivanje izvornog kôda datoteke zadanog poddirektorija, a

drugim se oblikom uključuju samo one datoteke koje se nalaze u prethodno definiranim

poddirektorijima pojedine implementacije C++ -a.

Naredba #define

Oblik pisanja naredbe #define je:

#define identifikator niz_znakova

Kada god u programu prevoditelj naiđe na izraz identifikator, on ih zamjenjuje nizom_znakova.

Korištenjem te naredbe moguće je definirati: deklariranje cjelobrojnih, realnih i znakovnih

konstanti, znakovnih nizova, funkcija i procedura te makro naredbi.

Naredbom #define definiraju se i simboličke konstante. Konstante su veličine

čije se vrijednosti ne mijenjaju tijekom izvođenja programa. Definiraju se radi preglednosti

programa i to ovako:

#define PI=3.14159

Prevoditelj će u programu svako pojavljivanje konstante PI zamijeniti vrijednošću 3.14159.

2.5. KOMENTARI

Komentari unutar koda programa služe da programeru daju informacije o samome kôdu, njegovim

dijelovima i pojedinostima unutar njega. Mogu se pisati na dva načina:

a) Kratke komentare koji stanu u jednu liniju pišemo:

// Ovo je komentar u samo jednoj liniji

b) Dulji komentari mogu se postaviti u više linija:

/*Ovo je komentar koji se nalazi u nekoliko linija programa. Ove se

linije pri prevođenju neće evidentirati, tj. prevoditelj će ih

zanemariti. Ako unutar ovih znakova napišemo neku od naredbi, ona

će također biti zanemarena. */

Komentari ne moraju počinjati na početku linije, već se mogu nalaziti bilo gdje u programu.

2.6. OSNOVNI TIPOVI PODATAKA

16

Page 17: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

Programski jezik C++ definira pet osnovnih tipova podataka: znakovni (character), cjelobrojni

(integer), realni (float), realni dvostruke vrijednosti (double) i tip podataka koji ne sadrži

vrijednost (void).

Ključne riječi koje definiraju osnovne tipove podataka su: char, int, float, double i void. Svaki tip

podatka deklaracijom zauzme određenu količinu memorije, kako je navedeno u tablici. Postoje

modifikatori koji mogu promijeniti pretpostavljenu količinu memorije i opseg osnovnih tipova.

Modifikatori su: signed, unsigned, short, long. Modifikatori se uvijek pišu ispred određenog tipa

podataka.

Tip podatka Broj bitova (bajtova) Opseg

Char

unsigned char

signed char

int

unsigned int

signed int

short int

long int

unsigned long int

float

double

long double

8

8

8

16

16

16

16

32

32

32

64

64

(1)

(1)

(1)

(2)

(2)

(2)

(2)

(4)

(4)

(4)

(8)

(8)

0 do 255

0 do 255

-128 do 127

-32768 do 32767

0 do 65535

-32768 do 32767

-32768 do 32767

-2147483648 do 2147483647

0 do 4294967295

3.4E-38 do 3.4E+38

1.7E-308 do 1.7E+308

1.7E-308 do 1.7E+308

Osim ovih osnovnih postoji i nekoliko složenijih tipova podataka kao što su polja, unije, strukture,

polja struktura i klase.

2.7. KLJUČNE RIJEČI

17

Page 18: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

Ključne riječi su identifikatori koji imaju tono određeno značenje. One se ne mogu predefinirati niti

se mogu upotrijebiti kao identifikatori varijabli, konstanti, oznaka ili ostalih korisnički definiranih

objekata u memoriji.

Ključne riječi u C++ -u su:

auto

break

case

char

const

continue

default

do

doube

else

enum

extern

float

for

goto

if

int

long

register

return

short

signed

static

struct

switch

typedef

union

unsigned

void

volatile

while

2.8. IDENTIFIKATORI

Identifikatori (simbolička imena) su imena koja se dodjeljuju varijablama,

funkcijama, oznakama i ostalim korisnički definiranim objektima. Identifikatori se sastoje od niza

alfanumeričkih znakova. Programski jezik C++ razlikuje velika i mala slova, pa je dopušteno

služiti se istim imenom varijable, samo pisano malim, odnosno velikim slovima za dvije razlučite

varijable, ne nužno čak ni istog tipa.

Identifikator određuje korisnik poštujući pravila:

Smiju se rabiti slova engleske abecede, brojevi i znak potcrtavanja (_).

Ime mora započeti slovom ili znakom potcrtavanja (_).

Broj znakova u identifikatoru (dužina) nije ograničen.

Ne smiju se rabiti naši dijakritički znakovi (š,đ,č,ć,ž).

Ne smiju se rabiti ključne riječi ili oznake operatora programskog jezika.

Primjer 2.7.1. Ispravna simbolička imena su: Polumjer, tratmx, int_tim,

ime_sastavljeno_iz_više_rijeci, x.

Primjer 2.7.2. Neispravno napisani identifikatori:

18

Page 19: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

1programc++ (identifikator ne smije početi brojem)

x[1] (identifikator ne smije sadržavati zagrade)

Datum Upisa (identifikator ne smije sadržavati razmak)

Cout (identifikator ne smije biti ključna riječ)

BežiJankec (identifikator ne smije sadržavati č,š,đ,ć,ž)

2.9. DEKLARACIJA VARIJABLI

Za varijable možemo reći da su to objekti koji mogu mijenjati svoju vrijednost tijekom izvođenja

programa. Sadržaj varijable je podatak. Deklarirati varijablu znači najaviti njezino korištenje, tj.

navesti njezino ime i tip.

Općenito, varijable se deklariraju na slijedeći način:

tip_podatka ime_varijable;

tip_podatka je osnovni ili korisnički definirani tip, a ime_varijable je ime koje korisnik

odabere kao ime objekta s kojim program radi.

Osnovni tipovi podataka su: znakovni (char), cjelobrojni (int), realni

(float), realni dvostruke preciznosti (double) i tip podataka bez vrijednosti (void).

Primjer 2.6.1. Napiši nekoliko deklaracija varijabli:

int i;

double k;

void bez_vrijednosti;

Jednom se deklaracijom može deklarirati neograničen broj varijabli istog tipa uz pomoć znaka

razdvajanja (zareza):

tip_podatka ime1,ime2,ime3,…,imeN;

Primjer 2.6.2. Deklaracija varijabli t,cijeli, Cijeli i moj_broj cjelobrojnog tipa:

Int t,cijeli,Cijeli,moj_broj;

Inicijalizirati varijablu znači kod deklaracije joj navesti i njezinu početnu vrijednost.

Primjer 2.6.3. Inicijalizacija varijable broj_učenika s početnom vrijednošću 29:

int broj_ucenika=29;

Varijable se mogu deklarirati i inicijalizirati:

izvan svih funkcija

na početku funkcije

kao argument funkcije

na početku bloka naredbi

Ovisno o mjestu deklaracije, određeno je i područje djelovanja:

Mjesto deklaracije Područje djelovanja Tip varijable

19

Page 20: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

izvan svih funkcija

početak funkcije

argument funkcije

početak bloka

cijeli program

u pozvanoj funkciji

u pozvanoj funkciji

u bloku naredbi

globalna

lokalna

lokalna

lokalna

Osnovne karakteristike lokalnih varijabli su:

Neinicijalizirane lokalne varijable sadrže neodređene vrijednosti

Izlaskom iz funkcije ili bloka naredbi u kojem su deklarirane, lokalne varijable više ne

postoje

Lokalne varijable dostupne su samo funkcijama ili blokovima naredbi u kojima su

deklarirane

Globalne varijable inicijaliziraju se deklaracijom.

Zadatak: Deklariraj slijedeće varijable: a – cijeli broj iz intervala [0,50000], b - realan

broj, c,d – znakovne varijable, e – varijabla bez vrijednosti.

2.10. KONSTANTE

U programima se često koristimo vrijednostima koje se tijekom izvršenja programa ne smiju

mijenjati. Takve se vrijednosti nazivaju konstante. Konstante se u memoriji spremaju na

rezervirana mjesta, a od mogućih neželjenih promjena ih štiti ključna riječ const koja se dodaje

ispred oznake tipa varijable. Npr. const float pi = 3.14;

Prema tipu podataka razlikujemo cjelobrojne, realne i znakovne konstante.

Cjelobrojne su konstante cijeli brojevi iz dopuštenog opsega, odnosno iz segmenta

[-32768,32767], zapisani u standardnom obliku.

Ukoliko je riječ o cjelobrojnoj konstanti tipa long int, na kraj konstante treba napisati oznaku l ili L.

Analogno se na kraj konstante tipa unsigned piše U ili u.

Primjer 2. 10.1.

Cjelobrojna konstanta tipa int 345;

-57;

cjelobrojna konstanta tipa long int 3263456l

548234581L

cjelobrojna konstanta tipa usigned int 40000u

50000U

cjelobrojna konstanta tipa unsigned long int 222222222ul

20

Page 21: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

3455433245UL

Realne konstante sadrže realne brojeve sa ili bez predznaka zapisane u standardnom obliku pri

čemu decimalna točka odvaja cjelobrojni od decimalnog dijela. Realne kostante mogu biti zapisane

i u eksponencijalnom zapisu, tada se zapis dijeli na tri dijela: prvi sadrži realan broj ( sa illi bez

predznaka ), drugi slovo e (ili E) i iza cijeli broj ( sa ili bez predznaka) koji predočava eksponent

baze 10. Na taj se način npr. broj 0.0003 zapisuje kao 3.E-4.

Znakovne se konstante pišu unutar jednostrukih navodnika – literala, u pravilu se sastoje samo od

jednog znaka. Iznimno, znakovna se konstanta može sastojati od dva znaka, no tada je prvi od njih

obavezno znak \. Takve konstante služe za nadzor ispisa.

Konstanta Značenje

\b pomak za jedno mjesto u lijevo

\r povratak na početak reda

\n novi red

\0 nul znak

\v vertikalni tabulator

\t horizontalni tabulator

\ " znak navodnika

\' znak literala

\o oktalna konstanta

\h heksadecimalna konstanta

U programskom jeziku C++ postoji još i konstanta niza znakova, tada se konstanta piše unutar

dvostrukih navodnika, sastoji se od nula ili više znakova, u memoriji se zapisuje kao

jednodimenzionalno polje znakova koje završava nul znakom, odnosno \0.

Primjer 2.10.2

Znakovna konstanta 'Z';

'5';

'\n';

konstanta niza znakova "programski jezik c++";

2.11 ULAZNO - IZLAZNI TOKOVI

21

Page 22: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

Da bi program bio upotrebljiv, mora omogućiti komunikaciju s ulazno-izlaznim uređajima

(tipkovnicom, monitorom, diskom i sl.). Funkcije za rukovanje ulazno-izlaznim tokovima

definirane su u biblioteci funkcija iostream jezika C++. Biblioteka iostream uključuje se u

program predprocesorskom naredbom #include ovako:

#include <iostream>

Posebnim naredbama se podaci usmjeravaju na ulazne ili izlazne tokove.

cout

je funkcija koja usmjerava podatke s izlaznog toka na zaslon monitora. Smještena je u biblioteci

iostream. Ispis podataka ostvaruje se pomoću operatora ispisa <<. Operator ispisa << naziva se

još i operator umetanja.

Primjer 2.11.1. Naredba cout<<13; će ispisati broj 13 na zaslon monitora. S desne strane

operatora ispisa može stajati bilo koji tip podataka, npr. cout<<"Moguć je i ispis niza

znakova";

Moguće je i ulančavanje operatora ispisa koje se izvodi slijeva nadesno, npr.

cout<<34<<a<<"Moguć je i ispis znakova";

Ispis: 34 56.78 Moguć je i ispis znakova

endl

je konstanta definirana u biblioteci iostream a koristi se ako korisnik želi ispisati svaki od podataka

u zasebnom retku.

Primjer 2.11.2.

float a=56.78;

cout<<34<<endl;

cout<<a<<endl;

cout<<"Zelimo li ispisati znakove…"<<endl;

Ispis: 34

56.78

Zelimo li ispisati znakove…

cin

Funkcija cin usmjerava podatke s tipkovnice na ulazni tok. Nalazi se u biblioteci iostream. Podaci

se u ulazni tok umeću pomoću ulaznog operatora >>, npr. izvršenjem naredbe cin>>x; program

očekuje unos podatka s tipkovnice koji će biti pohranjen u prethodno deklariranu varijablu x. S

22

Page 23: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

desne strane ulaznog operatora može se naći bilo koji tip podataka. Moguće je ulančavanje ulaznih

operatora koji se izvode slijeva nadesno, npr. cin>>a>>b;

namespace

Ako se u programu dogodi da korisnik u svom programu koristi više biblioteka različitih autora,

može se dogoditi da se koriste istim imenima za različite stvari. Da bi se izbjegla zabuna oko

korištenja standardnih funkcija jezika C++, pozivamo ih na početku programa naredbom using

namespace std; nakon čega neće biti zabune i program će "znati" koje funkcije treba rabiti.

23

Page 24: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

§ 3. OPERATORI

Operatori su simboli koji predstavljaju (zamjenjuju) određene funkcije. U C++ je definirano

nekoliko skupina operatora:

aritmetički operatori

logički operatori

relacijski operatori

ostali operatori.

ARITMETIČKI OPERATORI

Aritmetički operatori mogu biti:

binarni (djeluju na dvije varijable)

unarni (djeluju na jednu varijablu).

Binarni aritmetički operatori

Binarni aritmetički operatori djeluju na dvije varijable.

Operator Funkcija

+ zbrajanje

- oduzimanje

* množenje

/ dijeljenje

%modulo

rezultat je ostatak pri dijeljenju dvaju cijelih brojeva

Primjer 3.1.1. Napiši program koji će izračunati zbroj, razliku, umnožak i kvocijent dvaju realnih

brojeva. Ispis neka bude oblika:

Unesi prvi broj:

Unesi drugi broj:

….+….=…

….-….=….

….*….=….

…./….=….

24

Page 25: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

Rješenje:

#include <iostream>

using namespace std;

int main()

{

float a,b;

cout<<"unesi prvi broj: " ;

cin>>a;

cout<<"unesi drugi broj: ";

cin>>b;

cout<<a<<"+"<<b<<"="<<a+b<<endl;

cout<<a<<"-"<<b<<"="<<a-b<<endl;

cout<<a<<"*"<<b<<"="<<a*b<<endl;

cout<<a<<"/"<<b<<"="<<a/b<<endl;

system("PAUSE");

return 0;

}

Primjer izvršenja programa uz unos brojeva 43 i 12:

Unesi prvi broj:

43

unesi drugi broj:

12

43+12=55

43-12=31

43*12=516

43/12=3.58333

Unarni aritmetički operatori

Unarni aritmetički operatori djeluju samo na jednu varijablu. Pri uporabi unarnih operatora važno

je paziti na položaj operatora (nalazi li se ispred ili iza varijable) jer se njegovo djelovanje

razlikuje.

Postoje ovi unarni operatori:

za promjenu predznaka

za uvećavanje (inkrementiranje)

za umanjivanje (dekrementiranje).

25

Page 26: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

-a Unarni minus Mijenja predznak broja

a++ Operator uvećavanjaUvećava broj za 1 (inkrement)

(nakon što se varijabla dobavi iz memorije)

a-- Operator umanjivanjaUmanjuje broj za 1 (dekrement)

(nakon što se varijabla dobavi iz memorije)

++a Operator uvećavanjaUvećava broj za 1 (inkrement)

(prije nego što se varijabla dobavi iz memorije)

--a Operator umanjivanjaUmanjuje broj za 1 (dekrement)

(prije nego što se varijabla dobavi iz memorije)

Operatori inkrement i dekrement primjenjuju se samo na cjelobrojne varijable i nije svejedno

stavljaju se ispred ili iza varijable.

Primjer 3.1.2. Koju vrijednost poprima b nakon naredbe:

a) a=1;

b= ++a +3; (b=5)

b) a=1;

b=a++ +3; (b=4)

Primjer 3.1.3. Koji izraz nije ispravan i zašto?

a) a++

b) b=++a +4;

c) a (b+c)++

d) a=b-- +3 (c,e)

e) a=2,6++

Primjer 3.1.4. Koju će vrijednost poprimiti varijabla x ako je :

a) x = 10*3 +6/2;

b) x = (4-(3*2)-2)/2;

c) x = 15 % 2;

Pitanje koje se nameće vezano uz aritmetičke operatore jest kakvog će tipa biti rezultat binarne

operacije na dva broja. Za ugrađene tipove točno su određena pravila uobičajene aritmetičke

pretvorbe. Ako su oba operanda istog tipa, tada je i rezultat tog tipa, a ako su operandi različitih

26

Page 27: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

tipova, tada se oni prije operacije svode na zajednički tip ( obično složeniji) prema slijedećim

pravilima:

1. Ako je jedan od operanada tipa long double, tada se is vi drugi operandi

pretvaraju u long double,

2. inače, ako je jedan od operanada tipa double, svi se ostali pretvaraju u tip

double

3. inače, ako je jedan od operanada tipa float, tada će is vi drugi biti float

4. inače, svi su int pa je i rezultat tipa int,

5. Zatim, ako je jedan od operanada unsigned long, i drugi će biti unsigned long

6. inače, ako je jedan od operanada tipa long, tada se i drugi pretvara u long,

7. inače, ako je jedan unsigned, tada će i drugi glumiti u istom filmu ( biti

unsigned).

Primjer 3.1.5. Odredi rezultat bloka naredbi:

int i = 3;

float a = 0.5;

cout<<(a*i)<<endl; ( 1.5 )

Primjer 3.1.6. Odredi rezultat bloka:

int Brojnik = 3;

int Nazivnik = 4;

float kvocijent = Brojnik / Nazivnik;

cout<<"rezultat dijeljenja je: "<<kvocijent<<endl; (0)

Brojeve 3 i 4 prevoditelj poznaje kao cijele, stoga provodi i dijeljenje kao dijeljenje bez ostatka, tj.

zanemaruje decimalna mjesta. Tek nakon dijeljenja rezultat se sprema u realnu varijablu kvocijent.

Primjer 3.1.7. Slična je situacija kod dijeljenja cjelobrojnih konstanti:

float DiskutabilniKvocijent = 3 / 2;

Rezultat ovog dijeljenja bit će 1. Za izbjegavanje ovakvih nedoumica dobro je uz jedan od

operanada ( ostali će se pretvoriti ) pisati s decimalnom točkom .

Primjer 3.1.8. Što će ispisati slijedeće naredbe:

int a = 10;

float b = 10.;

cout << a / 3 <<endl;

cout<< b / 3 <<endl; (3 ,3.3333333)

27

Page 28: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

RELACIJSKI OPERATORI

Dva se broja mogu uspoređivati, a rezultat će biti tipa bool. Ako je izraz istinit, rezultat usporedbe

će biti 1 (true), a ako nije, rezultat će biti 0 (false). Uspoređivanje se provodi uporabom operatora

usporedbe, a najčešće se koriste u naredbama za grananje tijeka programa.

Relacijski operatori spadaju u skupinu binarnih operatora (djeluju na dvije varijable) , a operandi

mogu biti bilo kojeg tipa od osnovnih tipova podataka. Tip je rezultata relacijskih operatora uvijek

cjelobrojni.

Relacijski operatori imaju niži prioritet od aritmetičkih.

Operator Operacija

< manje

<= Manje ili jednako

> veće

>= Veće ili jednako

= = jednako

!= različito

LOGIČKI OPERATORI

Logički podaci su podaci koji mogu poprimiti samo jednu od dvije moguće vrijednosti. To su npr.

true/false, da/ne, istina/laž, 0/1. Varijabla koja je pogodna za pohranu logičkog podatka je tipa

bool. Takav tip podataka može poprimiti vrijednosti true (1) ili false(0).

Logičke funkcije se izvode uporabom logičkih operatora. Logički operatori također mogu biti

unarni i binarni.

! Negacija(unarni operator koji 0 pretvara u 1 i obrnuto)

&& Logički I(binarni operator)

Logički ILI (binarni operator)

28

Page 29: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

Logički operator I

Djelovanje logičkog operatora I prikazano je tablicom stanja.

A B (A&&B)

0 0 0

1 0 0

0 1 0

1 1 1

Logički operator ILI

Djelovanje logičkog operatora ILI prikazano je tablicom stanja.

A B (A||B)

0 0 0

1 0 1

0 1 1

1 1 1

Primjer 3.3.1. Djelovanje logičkih operatora:

#include <iostream>

using namespace std;

int main()

{

int a,b;

a=true;

b=false;

cout<<"!a="<<!a<<endl ;

cout<<"!b="<<!b<<endl ;

cout<<"a||b="<<( a||b)<<endl ;

system(„PAUSE“);

return 0; }

Dopušteno je miješanje logičkih, relacijskih i aritmetičkih operatora, pri čemu tablica prioriteta

izgleda ovako:

29

Page 30: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

Najviši prioritet: !

> , >=, <, <=

= =, ! =

&&, *, /, %

Najniži ||, + , -

Primjer 3.3.2 Izračunaj:

a) 5 * 8 >= 46

b) 3 != 5 = = 0

c) (3 && 2) + 2 * 6

OPERATOR PRIDRUŽIVANJA VRIJEDNOSTI I IZRAZI

Izrazi

Nastaju kombinacijom varijabli, konstanti i operatora. Mogu se podijeliti prema tipu operatora i

prema tipu rezultata.

Prema tipu operatora razlikujemo: aritmetičke, relacijske i logičke izraze.

Prema tipu rezultata izrazi mogu biti aritmetički i logički.. Logički izrazi najčešće se koriste za

grananja programa i prekide programskih petlji.

Operator pridruživanja vrijednosti

Opći oblik naredbe za pridruživanje vrijednosti je:

varijabla = izraz; aritmetički ili logički izraz

operator pridruživanja

vrijednosti

Rezultati aritmetičkih ili logičkih izraza pridružuju se varijabli na lijevoj strani.

Operatori obnavljajućeg pridruživanja

30

Page 31: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

Operatori obnavljajućeg pridruživanja omogućuju kraći zapis aritmetičkih izraza. Sastoje se od

znaka jednakosti i odgovarajućeg aritmetičkog operatora, npr. izraz a=a+8 može se zapisati kao

a+=8.

+= -= *= /= %=

a=a+… a=a-… a=a*… a=a/… a=a%…

Zadaci:

1. Zapiši u programskom jeziku C++ slijedeće izraze:

a)

b)

c)

d)

e)

f)

2. Zapiši matematički:

a) b ++

b) a + = 7 + c

c) a - = 4

d) a - = --c / 2 * d

e) b = a / c / d

f) a = ++ b * c – -

g) a + = ++b / 3 / c

3. Kolika je vrijednost varijabli a, b, c nakon bloka:

int a, b=2, c=3;

b=(a=a+b)-b;

a=a-b;

4. Koju vrijednost poprima varijabla a nakon izvršenog bloka naredbi?

float a;

31

Page 32: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

int b=4, c=7;

a=c/2*c - b*5%b;

5. Koju vrijednost poprimaju varijable a, b i c nakon bloka naredbi:

a) int a=3;, b=2, c=1;

a*=(++b*b + c*c++);

b) float a;

int b=13; c=5;

a=--b/c*c++;

c) int a,b,c,d,x,y,z,w;

x=10; y=20; z=30; w=40;

a = x<y || z>w;

b = x<y && z>y;

c =((a==b)>0)*17;

6. Napiši program za izračunavanje zbroja dvaju brojeva i ispisivanje dobivenog zbroja.

Rješenje:

#include<iostream>

using namespace std;

int main(){

float a,b,zbroj;

cout<<"Upisi dva broja"<<endl;

cin>>a>>b;

zbroj=a+b;

cout<<"Zbroj brojeva "<<a<<" i "<<b<<" je : "<<zbroj;

system("PAUSE");

return 0;

}

7. Napiši program za izračunavanje opsega raznostraničnog trokuta, kojemu su zadane duljine stranica a, b i c. Pretpostavimo da zadane stranice čine trokut.

32

Page 33: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

Rješenje:

#include<iostream>

using namespace std;

int main(){

float a,b,c,O;

cout<<"Upisi duljinu stranice a:";

cin>>a;

cout<<"Upisi duljinu stranice b:";

cin>>b;

cout<<"Upisi duljinu stranice c:";

cin>>c;

O=a+b+c;

cout<<"Opseg trokuta kojemu su duljine stranica: "<<a<<",

"<<b<<" i "<<c<< " je: "<<O;

system("PAUSE");

return 0;

}

8. Napiši program za računanje razlike, umnoška i količnika dvaju brojeva.

Rješenje:

#include<iostream>

using namespace std;

int main(){

float a,b;

cout<<"Upisi dva broja: ";

cin>>a>>b;

cout<<"Razlika brojeva "<<a<<" i "

<<b<<" je: "<<(a-b)<<endl;

cout<<"Umnozak brojeva "<<a<<" i "

<<b<<" je: "<<(a*b)<<endl;

cout<<"Kolicnik brojeva "<<a<<" i "

<<b<<" je: "<<(a/b)<<endl;

system("PAUSE");

return 0;}

9. Napiši program za računanje opsega i površine kvadrata, ako je zadana duljina stranice kvadrata.

33

Page 34: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

Rješenje:

#include<iostream>

using namespace std;

int main(){

float a;

cout<<"Upisi duljinu stranice kvadrata: ";

cin>>a;

cout<<"Opseg kvadrata stranice "<<a

<< " iznosi: "<<(4*a)<<endl;

cout<<"Povrsina kvadrata stranice "<<a

<<" iznosi: "<<(a*a)<<endl;

system("PAUSE");

return 0;

}

10. Napiši program za računanje prosjeka četiri zadana broja.

Rješenje:

#include<iostream>

using namespace std;

int main(){

float a,b,c,d,P;

cout<<"Unesi prvi broj: ";

cin>>a;

cout<<"Unesi drugi broj: ";

cin>>b;

cout<<"Unesi treci broj: ";

cin>>c;

cout<<"Unesi cetvrti broj: ";

cin>>d;

P = (a+b+c+d)/4;

cout<<"Prosjek brojeva "<<a<<","<<b<<","

<<c<<" i "<<d<<" iznosi: "<< P<<endl;

system("PAUSE");

return 0;}

11. Napiši program za pretvaranje centimetara u metre. Zadaje se mjerni broj u centimetrima, a program treba vratiti koliko je to metara.

34

Page 35: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

Rješenje:

#include<iostream>

using namespace std;

int main(){

float cm;

cout<<"Unesi broj centimetara: ";

cin>>cm;

cout<<cm<<" centimetara iznosi "

<<cm/100<<" metara."<<endl;

system("PAUSE");

return 0;

}

§4. GRANANJE

35

Page 36: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

Tijek programa katkad ovisi o ulaznim podacima ili međurezultatima pa o njima ovisi i redoslijed

izvršavanja naredbi. Takva se struktura naziva grananje jer se ovisno o stanju podataka zbiva jedan

od mogućih dijelova (grana) programa.

Dijelovi programa koji se uvjetno izvode, grupiraju se u skupine ili blokove naredbi. Svaki se blok

naredbi omeđuje parom otvorena-zatvorena vitičasta zagrada (osim u slučaju jedne naredbe).

Blokovi se obično pišu uvučeno.

4.1 Grananje naredbom if

Naredba if omogućava uvjetno grananje programa ovisno o ispunjenju uvjeta. Uvjet (logički izraz)

se upisuje unutar para okruglih zagrada.

Dijagram tijeka naredbe if:

NE

DA

Dva su oblika pisanja naredbe if:

if(uvjet) if(uvjet)

naredba; {

blok naredbi;

}

Tok izvršavanja naredbe if je: ako je zadani uvjet ispunjen naredba ili blok naredbi se izvršava, u

suprotnom se preskaču.

Ako je zadani uvjet logički izraz, naredba ili blok se izvršava ako je vrijednost logičkog izraza

istina.

Ako je uvjet izraz, naredba ili blok naredbi se izvršava ako je vrijednost aritmetičkog izraza

različita od nule.

Primjer 4.1.1. Napiši program koji će unijeti cijeli broj pa provjeriti da li je pozitivan ili negativan.

U oba slučaja treba ispisati apsolutnu vrijednost broja. Ispis neka bude oblika:

Upisi broj:

Broj ___ je ________.

Njegova apsolutna vrijednost je___.

Rješenje:

#include <iostream>

36

uvjet

blok naredbi

Page 37: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

using namespace std;

int main()

{

int a;

cout<<"Upisi broj: ";

cin>>a;

if(a<0)

{

cout<<"Broj "<<a<<" je negativan."<<endl

<<"Njegova apsolutna vrijednost je "<<-a<<endl;

}

if(a>0)

{

cout<<"Broj "<<a<<" je pozitivan."<<endl

<<"Njegova apsolutna vrijednost je "<<a<<endl;

}

system("PAUSE");

return 0;

}

Ako se unese broj –432, rezultat je:

Upisi broj:-432

Broj –432 je negativan.

Njegova apsolutna vrijednost je 432

Grananje naredbom if-else

Grananje naredbom if može se napisati i u obliku s dvije neovisne grane.

Dijagram tijeka u tom slučaju izgleda ovako

NE DA

Oblik pisanja naredbe if-else:if (uvjet){

37

uvjet

2. blok naredbi 1. blok naredbi

naredbe iza bloka

Page 38: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

prvi blok naredbi;}else{ drugi blok naredbi;}naredbe iza bloka

Tok izvršavanja if-else naredbe: ako je ispunjen uvjet, izvršava se prvi blok naredbi, a ako nije,izvršava se drugi blok naredbi.

Primjer 4.2.1. Napiši program koji će unijeti cijeli broj pa provjeriti da li je pozitivan ili

negativan. U oba slučaja treba ispisati apsolutnu vrijednost broja. Ispis neka bude oblika:

Upisi broj:

Broj ___ je ________.

Njegova apsolutna vrijednost je___.

Rješenje:

#include <iostream>

using namespace std;

int main()

{

int a;

cout<<"Upisi broj: ";

cin>>a;

if(a<0)

{

cout<<"Broj "<<a<<" je negativan."<<endl

<<"Njegova apsolutna vrijednost je "<<-a<<endl;

}

else

{

cout<<"Broj "<<a<<" je pozitivan."<<endl

<<"Njegova apsolutna vrijednost je "<<a<<endl;

}

system("PAUSE");

return 0;

}

Ako se unese broj -656, rezultat je:

Upisi broj:-656

38

Page 39: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

Broj –656 je negativan.

Njegova apsolutna vrijednost je 656.

Blokovi naredbe if-else mogu se i ulančiti. Osnovni oblik ulančane if-else naredbe je:

if (uvjet 1){ prvi blok naredbi}else if (uvjet 2){ drugi blok naredbi}else if (uvjet 3){ treći blok naredbi}……..else{ posljednji blok naredbi}naredba iza posljednjeg bloka

Dijagram tijeka ulančane if-else naredbe:

NE DA

DA NE

Primjer 4.2.2. Napiši program koji će upisati cijeli broj različit od 0, a zatim provjeriti je li uneseni broj veći, manji ili jednak 100, te je li paran ili neparan. Ispis neka bude:Upiši broj različit od 0:

39

uvjet 1

2. blok naredbi

1. blok naredbi

naredbe iza posljednjeg (2) bloka

uvjet 2

Page 40: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

Uneseni broj je …. od 100 i …..

Rješenje:#include <iostream>using namespace std;int main(){ int a; cout<<"Upisi broj razlicit od 0: "; cin>>a; if(a==100) { cout<<"Uneseni broj je 100 i paran je."<<endl; } if (a<100) { cout<<"Uneseni broj je manji od 100 i "; if (a%2==0) cout<<" paran je."<<endl; else cout<<" neparan je."<<endl; } else { cout<<"Uneseni broj je veci od 100 i "; if (a%2==0) cout<<" paran je."<<endl; else cout<<" neparan je."<<endl; } system("PAUSE"); return 0;}

Unesemo li broj 875, rezultat je:Upiši broj različit od 0:875Uneseni broj je veci od 100 i neparan je.

Ako su uvjet (logički izraz) i naredbe bloka kratki umjesto naredbi if-else može se rabiti skraćeni oblik naredbe grananja:

(uvjet) ? (naredbe 1) : (naredbe 2)

4.3. Grananje naredbom switch-case

40

Page 41: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

Naredba switch-case koristi se za ispitivanje vrijednosti jedne varijable ili izraza i, ovisno o toj vrijednosti, za izvršavanje jednog od niza različitih blokova naredbi.Opći oblik naredbe switch – case je:switch ( izraz){ case konstanta1: blok naredbi 1; break; case konstanta2; blok naredbi 2; break; ….. default: blok naredbi n; break;}Dijagram tijeka naredbe switch-case:

konstanta1 konstanta2 niti jedna od ponuđenih konstanti

Tok izvršavanja naredbe switch – case:1. izračunavanje vrijednosti izraza2. uspoređivanje vrijednosti izraza sa nizom zadanih konstanti3. ako je vrijednost izraza jednaka bilo kojoj od konstanti izvršava se blok naredbi pridružen toj kostanti4. nakon izvršenog bloka naredbi naredba break označava izlazak iz switch-case naredbe5. ako vrijednost izraza nije jednaka niti jednoj od zadanih konstanti, izvršava se blok naredbi pridružen default grani.Cjelokupni blok switch – case zapisuje se unutar para otvorena-zatvorena vitičasta zagrada.

Primjer 4.3.1. Napiši program koji će učitati brojčanu vrijednost ocjene učenika i vratiti opisnu ocjenu. Ispis treba biti oblika:Upisite brojcanu ocjenu (1-5):Upisana je ocjena:

Rješenje:#include <iostream>

41

izraz

blok naredbi 1 blok naredbi 2 blok naredbi n

Page 42: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

using namespace std;int main(){ int ocjena; cout<<"Upisite brojcanu ocjenu (1-5):"; cin>>ocjena; cout<<"Upisana je ocjena :"; switch (ocjena){ case 1 : cout<<"nedovoljan"; break; case 2 : cout<<"dovoljan"; break; case 3: cout<<"dobar"; break; case 4: cout<<"vrlo dobar"; break; case 5: cout<<"odlican"; break;} system("PAUSE"); return 0;} Rezultat kod upisa brojke 4 je:Upisite brojcanu ocjenu (1-5): 4Upisana je ocjena: vrlo dobar

Zadaci za vježbu:

1. Napiši program koji od dva upisana broja ispisuje veći.

Rješenje:#include<iostream>

using namespace std;

int main(){

float a,b;

cout<<"Unesi prvi broj : ";

cin>>a;

cout<<"Unesi drugi broj : ";

cin>>b;

if (a>b) cout<<"Od brojeva "<<a<<" i "

<<b<<" veci je "<<a<<endl;

if (a<b) cout<<"Od brojeva "<<a<<" i "

<<b<<" veci je "<<b<<endl;

system("PAUSE");

return 0;}

42

Page 43: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

2. Napiši program za izračunavanje opsega raznostraničnog trokuta kojemu su zadane duljine

stranica a, b i c. Potrebno je provjeriti da li unešeni brojevi mogu biti stranice trokuta.

Rješenje:

#include <iostream>

using namespace std;

int main(){

float a,b,c,O;

cout<<"Upisi duljinu stranice a:";

cin>>a;

cout<<"Upisi duljinu stranice b:";

cin>>b;

cout<<"Upisi duljinu stranice c:";

cin>>c;

if((a+b>c)&&(a+c>b)&&(b+c>a)){

O=a+b+c;

cout<<"Opseg trokuta kojemu su duljine stranica: "

<<a<<", "<<b<<" i "<<c<< " je: "<<O;

}

else cout<<"Zadani brojevi nisu stranice trokuta"<<endl;

system("PAUSE");

return 0;

}

3. Napiši program koji zadani broj A uvećava 100 puta ako je A<100, a inače A umanjuje za 100. Ispisati dobiveni rezultat.

Rješenje:

#include <iostream>

using namespace std;

int main(){

float a,b;

cout<<"Upisi broj A:";

cin>>a;

if(a<100){

b=a*100;

43

Page 44: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

cout<<"Broj "<<a<<" je manji od 100. Trazeni rezultat

je "<<b<<endl;

}

else {

b=a-100;

cout<<"Broj "<<a<<" je veci od 100. Trazeni rezultat je

"<<b<<endl;

}

system("PAUSE");

return 0;

}

4. Napiši program za računanje opsega i površine kvadrata ako je zadana duljina njegove stranice a. Prije računanja provjerite je li a<0, ako je ispišite poruku: ˝Stranica kvadrata mora biti pozitivan broj˝.

Rješenje:#include <iostream>

using namespace std;

int main(){

float a,O,P;

cout<<"Upisi duljinu stranice kvadrata:";

cin>>a;

if(a<0)

cout<<"Stranica kvadrata mora biti pozitivan broj"<<endl;

else {

O=4*a;

P=a*a;

cout<<"Opseg kvadrata stranice "<<a<<" iznosi "<< O<<endl;

cout<<"Povrsina kvadrata stranice "<<a<<" iznosi "<<P<<endl;

}

system("PAUSE");

return 0;

}

44

Page 45: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

5.. Napiši program za izračunavanje apsolutne vrijednosti cijelog broja.

Rješenje:

#include <iostream>

using namespace std;

int main(){

int a;

cout<<"Unesi broj ciju apsolutnu vrijednost trazim: ";

cin>>a;

if(a<0)

cout<<"Apsulutna vrijednost broja "<<a<<" je "

<<(-a)<<endl;

else

cout<<"Apsolutna vrijednost broja "<<a<<" je "

<< a<<endl;

system("PAUSE");

return 0;

}

6. Napiši program koji će učitati cjelobrojnu vrijednost i ispitati da li je djeljiva s 3.

Rješenje:#include <iostream>

using namespace std;

int main(){

int a;

cout<<"Unesi broj za koji ispitujem djeljivost s 3: ";

cin>>a;

if((a%3)==0)

cout<<"Broj "<<a<<" je djeljiv s 3."<<endl;

else

cout<<"Broj "<<a<<" nije djeljiv s 3. "<<endl;

system("PAUSE");

return 0; }

45

Page 46: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

7. Napiši program koji učitava realni broj r. Ako je r0 onda treba ispisati poruku o tome, a ako nije naći površinu kruga radijusa r.

#include <iostream>

using namespace std;

int main(){

float r,P;

cout<<"Upisi polumjer kruznice: ";

cin>>r;

while (r<=0){

cout<<"Polumjer ne moze biti negativan broj.

Pokusaj ponovo: ";

cin>>r;

cout<<endl;

}

P=r*r*3.14159;

cout<<"Povrsina kruga polumjera "

<<r<<" je: "<<P<<endl;

system("PAUSE");

return 0;

}8. Napiši program koji će za učitane vrijednosti a, b izračunati vrijednost funkcije f(a) po formuli:

f(a)=a+b, ako je a neparan f(a)=a·b, ako je a paran

9. Napiši program koji će ispisati sve savršene brojeve od 2 do 1000. Broj je savršen ako je jednak sumi svojih djelitelja. Npr. 28=1+2+4+7+14.

10. Napiši program koji će varijabli max dodijeliti veću od vrijednosti varijabli x i y.

11. Napiši program koji će varijabli max dodijeliti veću od vrijednosti varijabli a, b i c.

12. Napiši program kojim se rješava jednadžba a · x +b =0.

13. Napiši program kojim se učitavaju vrijednosti varijabli a, b i c te udvostručuju ako je abc, u protivnom zamjenjuju apsolutnim vrijednostima.

46

Page 47: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

§ 5. PROGRAMSKE PETLJE

Katkad se dijelovi programa trebaju ponoviti više puta. Takva se programska struktura naziva programska petlja. Ponavljati se može unaprijed zadani broj puta ili dok se ne ispuni određeni uvjet.Postoje dvije grupe programskih petlji:1. programske petlje s ispitivanjem uvjeta ponavljanja na početku bloka naredbi (for, while)2. programske petlje s ispitivanjem uvjeta ponavljanja na kraju bloka naredbi (do-while)

PROGRAMSKA PETLJA FOR

Programska petlja for najčešće se rabi ako se dijelovi programa ponavljaju unaprijed poznati broj puta. Osnovni oblik petlje for je: for (početno stanje; uvjet; prirast) { blok naredbi; }Najprije je potrebno zadati vrijednost početnog stanja (najčešće se deklarira kontrolna varijabla koja služi brojenju izvršavanja petlje). Zatim se računa vrijednost uvjeta. Rezultat mora biti tipa bool. Blok naredbi koji se nalazi u petlji se izvršava ako je vrijednost uvjeta jednaka logičkoj istini true (1). Zatim se računa prirast (najčešće je to iznos za koji se mijenja vrijednost kontrolne varijable). Kad vrijednost uvjeta postane false(0), petlja se prekida.Dijagram tijeka programske petlje for:

NE

DA

Primjer 5.1.1. Napiši program koji će ispisati brojeve od 1 do 20. Ispis neka bude oblika:Ispis brojeva od 1 do 20:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20Ovo je najjednostavniji primjer uporabe petlje for. Treba zadati početnu vrijednost kontrolne varijable (brojac =1), postaviti uvjet nastavka (brojac<=20) i zadati prirast (brojac++). Naredba koja se izvodi je ispis trenutne vrijednosti varijable brojac.

47

Kontrolna_varijabla=početno_stanje

uvjet?

blok naredbi

promjena vrijednosti kontrolne varijable

Page 48: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

Rješenje:#include <iostream>

using namespace std;

int main()

{

int brojac;

cout<<" Ispis brojeva od 1 do 20"<<endl;

for(brojac =1;brojac<=20; brojac++)

cout<<brojac<< " ";

system("PAUSE");

return 0;

}

Rezultat je:(zbog preglednosti ispisujemo jedno prazno mjesto)

Ispis brojeva od 1 do 20:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

19 20

Petlje for mogu biti ugnježđene jedna unutar druge.

Primjer 5.1.2. Ispisati tablicu množenja od 1 do 10. Ispis neka bude oblika:

1 2 3 4 5 6 7 8 9 10

2 4 6 8 10 12 14

3 6 9 12

4 8 12

5

6

7

8

9

10

48

Page 49: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

Rješenje:#include <iostream>

using namespace std;

int main()

{

int stup,red;

for(red =1;red<=10; red++){

for (stup=1;stup<=10;stup++)

cout<<red*stup<<"\t";

cout<<endl;

}

system("PAUSE");

return 0;

}

Može se dogoditi da je uvjet unutar petlje uvijek zadovoljen.Petlja se tada izvodi neograničen broj puta. Zato treba vrlo oprezan pri zadavanju uvjeta. Primjer beskonačne petlje: for(b=3;b<10) cout<<beskonačna petlja;Vrijednost od b je uvijek manja od 10 pa će se ispis ponavljati beskonačno mnogo puta.Da bi se izbjegla beskonačna petlja, treba: Zadati uvjet koji jamči konačni broj pobnavljanja petlje Navesti sva tri izraza unutar petlje for Izbjegavati promjenu vrijednosti kontrolne varijable unutar bloka naredbi petlje for.

49

Page 50: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

PETLJA WHILE

Petlja while se najčešće rabi ako broj ponavljanja petlje nije unaprijed poznat. Osnovni oblik petlje while je: while (uvjet){blok naredbi}naredbe iza blokaNajprije se računa vrijednost uvjeta (uvjet) čiji rezultat mora biti tipa bool. Ako je rezultat logička istina true (1), izvodi se blok naredbi petlje. Nakon toga program se vraća na naredbu while i ponovo računa uvjet. Ako je rezultat logička neistina false (0), preskače se blok naredbi i program se nastavlja od prve naredbe izvan bloka. Kod petlje while prije petlje je potrebno zadati početnu vrijednost kontrolne varijable. Unutar petlje po potrebi navodimo prirast.

Dijagram tijeka naredbe while:

NE

DA

Primjer 5.2.1. Napisati program koji će ispisati brojeve od 1 do 20. Ispis neka bude oblika:Ispis brojeva od 1 do 20:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20Rješenje:

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

int brojac =1;cout<< "ispis brojeva od 1 do 20: "<<endl;while(brojac <=20)

{ cout<<brojac<<" "; brojac =brojac +1; } cout<<endl;

system("PAUSE");return 0;

}

50

Uvjet?

blok naredbi

Page 51: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

5.3.PETLJA DO-WHILE

Petlja do-while uvjet ispituje nakon izvođenja naredbi bloka petlje. Osnovni oblik petlje do-while je:do{blok naredbi}while (uvjet);

Glavno obilježje petlje do-while je izvođenje bloka naredbi bar jedanput. U tome je i osnovna razlika u odnosu na petlje for i while kod kojih se može dogoditi da se blok naredbi ne izvede niti jednom.

Blok dijagram naredbe do-while:

NE

DA

Primjer 5.3.1. Napiši program koji će unijeti n realnih brojeva pa izračunati i prikazati njihovu srednju vrijednost. Rješenje: Kada koristimo petlju do-while, nije potrebno unijeti prvi broj prije početka petlje jer se uvjet ispituje tek nakon izvođenja naredbi bloka.

Budući da se prilikom unosa na ovaj način biti prebrojena i nula kao oznaka za posljednji član niza brojeva, nakon izlaska iz petlje brojač treba umanjiti za 1.

Srednju vrijednost niza brojeva računamo tako da zbrojimo vrijednost svih članova i zbroj podijelimo sa brojem koliko ih ima.

51

blok naredbi

Uvjet?

Page 52: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

#include <iostream>

using namespace std;

int main()

{

// unosimo n brojeva, a zatim računamo njihovu srednju

vrijednost

float x, broj, zbroj;

broj=0;

zbroj=0;

cout<<"Nakon posljednjeg broja unesi nulu"<<endl;

do

{

cout<<"Unesi broj: "<<endl;

cin>>x;

zbroj+=x;

broj++;

}

while (x!=0);

broj--;

cout<<"Unesena su "<<broj<<" broja. Srednja vrijednost je"

<<zbroj/broj<<endl;

system("PAUSE");

return 0;

}

Ako unesemo vrijednosti 45, 16 i 6, rezultat je:

Nakon posljednjeg broja unesi nuluUnesi broj:45Unesi broj:17Unesi broj:6Unesi broj:0Unesena su tri broja. Srednja vrijednost je 22.6667

52

Page 53: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

NAREDBA BREAK

Naredba break koristi se u dva slučaja:a) sastavni je dio switch – case naredbeb) koristi se za prijevremeni završetak petlje

Kao sastavni dio switch –case naredbe, break označava prekid izvršavanja bloka naredbi koji je pridružen određenoj case konstanti i program se grana na prvu naredbu iza switch – case naredbe.

Kada se break nađe unutar jednostruke petlje, ona uzrokuje prekid izvršavanja bloka naredbi i program se grana na prvu naredbu iza petlje.

NAREDBA CONTINUE

Katkad je potrebno preskočiti dio bloka naredbi do kraja programske petlje pa nakon toga opet nastaviti. U tu se svrhu rabi naredba continue. Preporuča se umjesto naredbe continue rabiti naredbe grananja jer nepažljiva uporaba naredbe continue može izazvati beskonačnu petlju.

Zadatak:Treba ispisati brojeve od 10 do 1. Trojka se preskače, a nakon toga se nastavlja ispis.

Rješenje:#include <iostream>

using namespace std;

int main()

{

int n;

cout<<" Ispis brojeva: ";

for (n=10; n>0; n--)

{

if (n==3)continue;

cout <<n<<", ";

}

system("PAUSE");

return 0;

}

Rezultat je: Ispis brojeva: 10, 9, 8, 7, 6, 5, 4, 2, 1

53

Page 54: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

NAREDBA GOTO

Naredba goto je naredba bezuvjetnog skoka (omogućava nastavak programa od odabranog programskog retka). Opći oblik je:…………..goto ime_oznake;…………ime_oznake: naredba;…………ime_oznake je simbolički naziva programskog retka.

Ova naredba najčešće smanjuje razumljivost i preglednost koda pa ju nije preporučljivo rabiti.

Zadaci za vježbu:

1. Napiši program koji će zbrojiti sve cijele brojeve od 1 do 100 koji su djeljivi s 3.

Rješenje:#include <iostream>

using namespace std;

int main(){

int i, suma=0;

for (i=1; i<=100; i++)

if((i%3)==0) suma= suma + i;

cout<<"Suma brojeva manjih od 100 i djeljivih s 3 je: "

<<suma<<endl;

system("PAUSE");

return 0;

}

2. Napiši program koji će ispisati sve dvoznamenkaste proste brojeve.

Rješenje:#include <iostream>

using namespace std;

int main(){

int i,j,a;

for (i=11; i<100; i=i+2){

a=0; // a broji proste faktore

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

if((i%j)==0) a=a+1;

if(a<3) cout<<"Broj "<<i<<" je prost. "<<endl;}

system("PAUSE");

54

Page 55: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

return 0;

}

3. Napiši program koji će ispisati sumu svih parnih brojeva manjih od 100.

Rješenje:#include <iostream>

using namespace std;

int main(){

int i=1,suma=0;

while (i<=100)

{

if((i%2)==0) suma=suma+i;

i++;

}

cout<<"Suma svih parnih brojeva manjih od 100 iznosi: "

<<suma<<endl;

system("PAUSE");

return 0;}

4. Napiši program koji izračunava faktorijel unešene cjelobrojne vrijednosti.

Rješenje:#include <iostream>

using namespace std;

int main(){

long int i,fakt=1;

cout<<" Unesi zeljeni cijeli broj: ";

cin>>i;

cout<<"Faktorijel je: "<<i<<"!= ";

while (i>1)

{

fakt=fakt*i;

i--;

}

cout<<fakt<<endl;

system("PAUSE");

return 0;}

55

Page 56: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

5. Napiši program koji učitava prirodan broj n i ispisuje broj i zbroj njegovih djelitelja.

Rješenje:#include <iostream>

using namespace std;

int main(){

int i,n,s,k;

cout<<" Upisi jedan prirodan broj: ";

cin>>n;

s=0; k=0;

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

if ((n%i)==0){

s=s+i;// u s zbrajamo djelitelje

k=k+1;// k broji koliko ih ima

}

cout<<"Broj "<<n<<" ima "<<k<<" djelitelja."<<endl;

cout<<"Suma djelitelja broja "<<n<<" je: "<<s<<endl;

system("PAUSE");

return 0;

}

6. Napiši program koji će izračunati duljinu dijagonale pravokutnika ako su zadane stranice.

Rješenje:#include <iostream>

using namespace std;

int main(){

float a=-1,b=-1,d;

while (a<0){

cout<<" Upisi duljinu stranice a: ";

cin>>a;

}

while (b<0){

cout<<" Upisi duljinu stranice b: ";

cin>>b;

}

d=sqrt((a*a)+(b*b));

cout<<"Duljina dijagonale pravokutnika sa stranicama "

<<a<<" i "<<b<<" je: "<<d<<endl;

56

Page 57: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

system("PAUSE");

return 0;}

7. Napiši program za izračunavanje površine trokuta ako su zadane sve tri stranice.

Rješenje:#include <iostream>

using namespace std;

int main(){

float a,b,c,s,P;

do {

cout<<" Upisi duljinu stranice a: ";

cin>>a;

}while (a<0);

do {

cout<<" Upisi duljinu stranice b: ";

cin>>b;

}while (b<0);

do {

cout<<" Upisi duljinu stranice c: ";

cin>>c;

}while (c<0);

s=(a+b+c)/2;

P=sqrt(s*(s-a)*(s-b)*(s-c));

cout<<"Povrsina trokuta sa stranicama "<<a<<", "<<b<<" i

"<<c<<" je: "<<P<<endl;

system("PAUSE");

return 0;}

8. Napiši program za učitavanje, zbrajanje i ispisivanje sume 10 realnih brojeva.

9. Napiši program za ispisivanje zbroja kvadrata svih prirodnih brojeva od 15 do 25.

10. Napiši program koji će od učitanih 15 brojeva pomnožiti samo one koji su djeljivi s 3.

#include <iostream>

using namespace std;

int main(){

57

Page 58: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

int a, i,p=1;

for(i=1;i<=15; i++) {

cout<<"Upisi broj: ";

cin>>a;

if ((a%3)==0)

p=p*a;

}

cout<<endl;

cout<<"Rezultat je: "<<p<<endl;

system("PAUSE");

return 0;}

11. Napiši program za sumu kvadrata parnih i kubova neparnih prirodnih brojeva od n do m.

12. Napiši program koji će ispisati produkt svih prirodnih brojeva djeljivih sa 7 do nekog zadanog broja n (n>10).

58

Page 59: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

§ 6. POLJA

Polje je konačni niz podataka istog tipa koji predstavljaju jednu cjelinu. Sastoji se od članova polja. Položaj svakog od članova unutar polja određen je cjelobrojnim brojčanim indeksima koji se zapisuju unutar uglatih zagrada.Polja mogu biti jedno ili višedimenzionalna. Najjednostavnija su jednodimenzionalna polja.

6.1. JEDNODIMENZIONALNA POLJA

Jednodimenzionalno polje ili vektor je programska struktura zapisana u kontinuiranom nizu memorijskih lokacija, a indeks svakog člana odgovara njegovoj udaljenosti od prvog člana.

x[0] x[1] x[2] … … x[n-1]

Svaki se od članova niza označava cjelobrojnim indeksom i to tako da prvi član niza ima indeks 0, a posljednji član za jedan manji od duljine polja. U gornjem je primjeru duljina polja jednaka n. Za x[6], indeksi su: x[0], x[2], x[3], x[4], x[5]

Kod izdvajanja članova niza, indeks može biti zadan kao: cjelobrojna konstanta x[3] cjelobrojna varijabla x[a] cjelobrojni izraz x[a*3 –1]

Da bi prevoditelj osigurao potreban prostor za podatke u memoriji treba deklarirati kojeg će tipa biti podaci u polju ( svi članovi moraju biti istog tipa). Opći oblik deklaracije polja jest: tip_polja ime_polja[dimenzija];Tip_ polja je jedan od definiranih tipova podataka, ime_polja je identifikator polja, a dimenzija je broj članova polja .

Primjer 6.1.1 Primjeri deklaracije polja: int a[100] deklaracija niza a od 100 cijelih brojeva float x[20] deklaracija niza x od 20 realnih brojeva char tekst[50] deklaracija niza tekst od najviše 50 znakova

Članovima deklariranog polja treba pridružiti vrijednosti. Vrijednosti se mogu pridružiti prilikom inicijalizacije ili tijekom programa, gdje se najčešće učitavaju uz pomoć programskih petlji.Ako ih inicijaliziramo na početku programa, vrijednosti se navode unutar vitičastih zagrada, odvojene zarezom: Int x[6] = {2, 34, 1, 67, 99 , 7 };Polje x ima 6 članova i svi su po tipu cijeli brojevi.

Zadatak 6.1.1.:Napiši program koji će unijeti članove jednodimenzionalnog polja int A[6] ={ 2, 34, 1, 67, 99, 7} , pa ih ispisati. Ispis treba izgledati ovako:A[0]=2 A[1]=34 A[2]=1 A[3]=67 A[4]=99 A[5]=7

59

Page 60: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

Rješenje:#include <iostream>using namespace std;int main(){ int i; int A[6]={2,34,1,67,99,7}; for (i=0; i<6; i++) { cout <<"A["<<i<<"]= "<<A[i]<<" "; } cout<<endl; system("PAUSE"); return 0;}

Zadatak 6.1.2. Napisati program koji će unijeti n članova jednodimenzionalnog polja, pa ih ispisati i zbrojiti. n mora biti manji ili jednak 10. Ispis neka bude:Upisi broj clanova polja:Upisi X[…] clan polja:…….…….Zbroj … clanova polja iznosi …..

Kako unaprijed nije poznat broj članova polja treba ga unijeti i provjeriti da li je n<=10. Provjera se izvodi petljom do-while. Prva for petlja poslužit će za upis članova polja, a a druga za zbrajanje i ispis.

Rješenje:

#include<iostream>using namespace std;int main()// Program ispisuje i zbraja n clanova polja X. n mora biti<=10{

int n,i,zbroj=0;int X[10];do{ cout<<"Upisi broj clanova polja: ";

cin>>n; } while ((n<0)||(n>10));

for(i = 0; i < n; i++){cout<<endl<< "Upisi X[" << i << "]: ";cin>>X[i];

}for(i = 0; i <n; i++)

{ cout<<X[i]<<endl; zbroj=zbroj+X[i];}cout<<endl << "n="<<n<<". Zbroj "<<n<<" clanova polja

iznosi " <<zbroj<<endl;

60

Page 61: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

system("PAUSE");}Rezultat je: Upisi broj clanova polja:5 Upisi X[0]:1Upisi X[0]: 2Upisi X[0]: 3Upisi X[0]: 4Upisi X[0]: 5

12345n=5. Zbroj 5 clanova polja iznosi 15

Zadatak 6.1.3 sortiranje nizova

6.2. VIŠEDIMENZIONALNO POLJE

Katkad je pogodno podatke pohraniti u višedimenzionalno polje. Najčešće su korištena dvodimenzionalna polja, analogno se definiraju višedimenzionalna.Dvodimenzionalna se polja deklariraju pomoću s dva para uglatih zagrada[][].Opći oblik deklaracije višedimenzionalnog polja je: tip_polja ime_polja[d1][d2]…[dn]tip_polja je jedan od definiranih tipova podataka, ime_polja je identifikator, a d1,d2,…dn su dimenzije, odnosno brojevi članova prve, druge,…n-te dimenzije.

Primjer 6.2.1. Primjer deklaracije dvodimenzionalnog polja: int X[2][3]; X je dvodimenzionalno polje koje se može prikazati kao tablica s dva retka i tri stupca u kojima su pohranjeni podaci po tipu cijeli brojevi.

Primjer 6.2.2. Članovima polja mogu se pridružiti vrijednosti i prilikom deklaracije, npr. int X[2][3]={{1,2,3},{4,5,6}};

Tablični prikaz tako određenog polja je:1. stupac 2. stupac 3. stupac

1. redak 1 2 32. redak 4 5 6

       X[1][2] = 6

61

Page 62: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

Zadatak: Napiši program koji će ispisati članove gore matrice (dvodimenzionalnog polja) iz gornjeg primjera.

Rješenje:#include<iostream.h>

using namespace std;

int main(){

int i, j, X[2][3]={{1,2,3},{4,5,6}};

for(i=0; i<2; i++){

for(j=0; j<3; j++)

cout<< X[i][j] << "\t";

cout<< endl;

}

system("PAUSE");

return 0;

}

Za učitavanje i ispis vrijednosti elemenata niza koriste se dvije ugniježđene programske petlje u kombinaciji s naredbama učitavanja i ispisa.

Primjer 6.2.3: O dsječak programa za upis vrijednosti matrice 4×3:for(i=0;i<4;i++)

for(j=0;j<3;j++)

{

cout<<"unesi element";

cin>>a[i][j];}

Za pretraživanje niza koriste se dvije programske petlje u kombinaciji s naredbama grananja.

Matrice s istim brojem redova i stupaca nazivaju se kvadratne. Kvadratna matrica ima glavnu i

sporednu dijagonalu.

Na glavnoj dijagonali kvadratne matrice nalaze se elementi za koje vrijedi i = j.

Na sporednoj dijagonali kvadratne matrice nalaze se elementi za koje vrijedi i+j=n-1

elementi sporedne dijagonale

a00 a01 a02 a03

a10 a11 a12 a13

a20 a21 a22 a23

a30 a31 a32 a33 elementi glavne dijagonale

62

Page 63: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

Zadatak1: Napiši program koji će učitati elemente kvadratne matrice 3×3. Program treba ispisati matricu, sumu svakog pojedinog retka i sumu svakog pojedinog stupca matrice.

#include <iostream>

using namespace std;

int main(int argc, char *argv[])

{int i,j,mat[3][3];

int sr[3]={0},ss[3]={0};

//unos elemenata matrice:

for(i=0;i<3;i++)

for(j=0;j<3;j++)

{

cout<<"matrica["<<i<<"]["<<j<<"]=";

cin>>mat[i][j];

sr[i]+=mat[i][j];//suma pojedinog retka

ss[j]+=mat[i][j];}//suma pojedinog stupca

cout<<endl;

//ispis matrice:

for(i=0;i<3;i++){

for(j=0;j<3;j++)

cout<<mat[i][j]<<"\t";

cout<<endl;}

//ispis sume redaka:

for(i=0;i<3;i++)

cout<<"Suma "<<(i+1)<<". retka:"<<sr[i]<<endl;

//ispis sume stupaca:

for(j=0;j<3;j++)

cout<<"Suma "<<(j+1)<<". stupca:"<<ss[j]<<endl;

system("PAUSE");

return 0;

}

Zadatak: Napiši program koji će učitati elemente kvadratne matrice 10×10. Program treba ispisati matricu, najmanji element glavne i sporedne dijagonale matrice.

63

Page 64: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

Rješenje: #include <iostream>

#define MAX_RED 10

#define MAX_STUP 10

using namespace std;

int main(int argc, char *argv[])

{int i,j,br_stup, br_red;

float mat[MAX_RED][MAX_STUP],min_gl,min_sp;

cout<<"unesi broj redaka";

cin>>br_red;

cout<<"unesi broj stupaca";

cin>>br_stup;

//unos elemenata matrice:

for(i=0;i<br_red;i++)

for(j=0;j<br_stup;j++)

{

cout<<"matrica["<<i<<"]["<<j<<"]=";

cin>>mat[i][j];

if(i==0 && j==0) min_gl=mat[i][j];

if(i==0 && j== br_stup-1) min_sp=mat[i][j];

if(i==j) if (mat[i][j]<min_gl) min_gl =mat[i][j];

if(i==br_stup-1-j) if (mat[i][j]<min_sp) min_sp =mat[i][j];}

//ispis matrice:

for(i=0;i<3;i++){

for(j=0;j<3;j++)

cout<<mat[i][j]<<"\t";

cout<<endl;}

cout<<"Najmanje element glavne dijagonale je :"<<min_gl<<endl;

cout<<"Najmanje element sporedne dijagonale je :"<<min_sp<<endl;

system("PAUSE");

return 0;

}

64

Page 65: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

6.3. NIZ ZNAKOVA

Ako je podatak znak, njegova oznaka tipa je char.Podatak tipa char je predstavljen jednim znakom unutar jednostrukih navodnika ili ASCII vrijednošću tog znaka (dekadska protuvrijednost). Npr.: char slovoA= 'A'; ili char slovoA=65;

Ako je podatak tekst (niz znakova) rabe se znakovni nizovi (engl. character strings). Znakovni niz je jednodimenzionalno poje čiji su članovi znakovi (char). Sadržaj se u znakovni niz unosi između para dvostrukih navodnika.Primjer1: inicijalizacija znakovnog niza:: char X[]="Ovo je znakovni niz"a u memoriju se pohranjuje:

'O' 'v' 'o' '' 'j' 'e' '' 'z' 'n' 'a' 'k' 'o' 'v' 'n' 'i' '' 'n' 'i' 'z' '\0'

Svaki znakovni niz završava zaključnim znakom '\0'. Taj znak ne treba posebno navoditi, ali treba znati da on zauzima jedno mjesto u memoriji.Primjer2: znakovni niz moguće je inicijalizirati i kao jednodimenzionalni niz:Char dan[]={'p','o','n','e','d','j','e','l','j','a','k','\0'};

Za učitavanje i ispis znakovnih nizova mogu se upotrebljavati standardni načini učitavanja i ispisivanja elemenata jednodimenzionalnog polja, ili naredbe gets, za unos i puts za ispis niza znakova.

FUNKCIJE ZA RAD S NIZOVIMA ZNAKOVA

string.h1. strlen(s) – daje duljinu niza znakova2. strcat(s1,s2) – dodaje s2 na kraj od s13. strncat(s1,s2,n) – dodaje prvih n znakova iz s2 na kraj od s14. strcmp(s1,s2) – uspoređuje nizove s1 i s2 – vraća 0 ako su isti5. stricmp(s1,s2) – uspoređuje nizove s1 i s2 ignorirajući velika i mala slova6. srrncmp(s1,s2,n) – uspoređuje prvih n znakova iz s1 i s27. strcpy(s1,s2) – kopira s2 u s18. strncpy(s1,s2,n) – kopira prvih n znakova iz s2 u s19. strdup (s) – stvara duplikat niza s10. strlwr(s) – sva slova u nizu pretvara u mala11. strupr(s) – sva slova u nizu pretvara u velika12. strrev(s) – preokreće niz znakova

ivan navictype.h

1. isalpha(c) – provjerava da li je c znak ( A-Z,a-z)2. isdigit(c) - provjerava da li je c znamenka (0-9)3. islower(c) - provjerava da li je c malo slovo

65

Page 66: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

4. isupper(c) - provjerava da li je c veliko slovo5. isspace(c) - provjerava da li je c razmak6. tolower(c) – pretvara c u malo slovo7. toupper(c) - pretvara c u veliko slovo

Primjer 6.3.1:Napiši program koji će unijeti niz znakova i ispisati duljinu učitanog niza.

a) #include <iostream>

using namespace std;int main(){

char a[80]; int i=0;

cout<<"upisite niz znakova: "; gets(a);

while (a[i+1]!='\0')i++;

cout<<"upisali ste niz: ";puts(a);cout<<endl<<"Duljina mu je "<<i+1<<" znakova"<<endl;;

system("PAUSE"); return 0;}

b)#include <iostream>

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

char a[80];int n;cout<<"unesi string: ";gets(a); /*unošenje niza znakova*/n=strlen(a); /*pozivanje funkcije strlen*/cout<<n<<endl;

system("PAUSE"); return 0;}

Zadatak: Napiši program koji će učitati rečenicu i ispisati koliko slova o ima u recenici? Rješenje: #include<iostream>

using namespace std;int main(){// Broje se slova o

int i, brojo;

66

Page 67: PROGRAMIRANJE C++ osnovno

Računalstvo i programiranje

brojo=0;char X[80];cout<<"Unesi recenicu:";gets(X);

for(i=0; X[i]!='\0'; i++) if (X[i]=='o' || X[i]=='O') brojo++;

cout<<" U recenici ima "<<brojo<<" slova o."<<endl;

system("PAUSE");return 0;}

Zadatak: Napiši program koji će učitati rečenicu i ispisati koliko je riječi u rečenici.

#include <iostream>

using namespace std;char a[80];int n,i,br;int main(){

cout<<"upisite jednu recenicu: ";gets(a);n=strlen(a)-1;for(i=0;i<n;i++)

if (a[i]==' ' && a[i+1]!=' ') br++;cout<<br+1<<endl;

system("PAUSE"); return 0;}

Zadatak: Napiši program koji će učitati rečenicu i ispisati je naopako.

#include <iostream>

using namespace std;

int main(int argc, char *argv[]){char a[80];

int n,i;cout<<"Upisite recenicu: ";gets(a);n=strlen(a)-1;for(i=n;i>=0;i--) cout<<a[i];

system("PAUSE"); return EXIT_SUCCESS;

}Zadaci za vježbu:

1. Napiši program koji će učitati znakovni niz i ispisati koliko u nizu ima brojki a koliko slova (pomoć koristiti funkcije isdigit(a[i])- da li je i-ti znak u nizu brojka

isalpha(a[i])-slovo engl. Abecede)2. Napiši program koji će učitati rečenicu i ispisati svaku riječ u drugi red. 3. Napiši program koji će učitati rečenicu i ispisati je s proredom.

67