Download as pdf or txt
Download as pdf or txt
You are on page 1of 30

Programiranje

Programiranje
Programiranje je postupak osmiljavanja i izrade raunalnih programa. To je jedna od
najtemeljnijih informatikih disciplina. Programiranje je put od problema i ideje njegovog
rjeavanja do konane realizacije rjeenja u obliku raunalnog programa.

Algoritam
Detaljni opis niza konanog broja koraka koji vode rjeenju problema u odreenom
vremenskom intervalu tj. to je jasno definiran niz koraka koji vode do rezultata. Moemo
takoer redi da algoritam transformira ulazne podatke u izlazne tj. u konani rezultat.
Algoritam treba biti definiran prema sljededim pravilima:
treba imati 0 ili vie ulaza (Ulaz)
treba imati 1 izlaz (ili vie) (Izlaz)
svaka instrukcija algoritma treba biti nedvosmislena (Definitnost)
u algoritmu nakon izvrenja svake instrukcije treba biti nedvosmisleno jasno koja se
instrukcija sljededa izvodi (Determinantnost)
algoritam mora biti takav da raunalo ili ovjek nakon konanog broja koraka u
konanom vremenu doe do rezultata (Efektivnost)
Postoji nekoliko naina na koji se algoritam moe opisati:
prirodni jezik
pseudokod (formatirani opis u prirodnom jeziku)
kod u programskom jeziku (formalni jezik za opis algoritma na raunalu)
Izrada algoritma se zasniva na sljededem:
metoda izrade algoritma koja se najede koristi naziva se top-down metoda
izvan raunalstva ova se metoda naziva metoda konkretizacije
algoritam se opie u 3-7 opdenitih instrukcija i u svakom sljededem koraku se
usredotouje na svaku od opisanih instrukcija koja se potom konkretizira dok god je
to potrebno
za definiciju algoritma se koristi pseudokod koji se detaljizira sve dok se ne moe
izravno prevesti u kod nekog od programskih jezika
Problem
Problem je zadatak koji elimo rijeiti pomodu raunala. Prilikom zadavanja problema moraju
se potivati sljededa pravila:
problem mora biti zadan opdenito i pokrivati sve sluajeve koji se mogu dogoditi u
domeni problema koji se zadaje
problem mora biti zadan jasno i nedvosmisleno
Da bi problem bio dobro strukturiran njegov opis mora sadravati sljedede:
detaljan opis ulaznih podataka
opis rezultata i veze izmeu rezultata i ulaznih podataka
Opis ulaznih podataka:
ulazni se podaci zadaju opdenito, tako da obuhvadaju sve mogude sluajeve
- broj podataka
- tip podataka
- dodatna ogranienja nad podacima
Opis rezultata:
rezultati se zadaju jasnim opisom onoga u to se ele pretvoriti ulazni podaci
- tip podataka
- odnos rezultata prema ulaznim podacima
Za rezultat moemo redi da su to izlazni podaci koji se dobiju iz ulaznih podataka primjenom
algoritma.
Da bi se zadani problem rijeio pomodu raunala potrebno je definirati:
Podatke
Algoritam

Ideja
Ideja predstavlja rezultat procesa prouavanja problema, skiciranja pojedinih elemenata
problema i iznalaenja mogudnosti njegovog rjeenja. Ideja esto ne dolazi odjednom ved se
polako razvija, ponekad i kroz due razdoblje ukoliko se radi o velikim projektima i sloenim
problemima. S druge strane, u nekim sluajevima je ideja u potpunosti trivijalna jer je i sam
problem trivijalan.
Program
Raunalni program moemo definirati kao konaan niz instrukcija raunalu koje pretvaraju
ulazne podatke u eljeni rezultat. Raunalni program se realizira kodiranjem algoritma i
koritenjem pripadajudih podataka.

Podatak
Podatak je jednostavna i neobraena injenica koja ima neko znaenje (npr. broj, slovo, ...).
Podatke u programu dijelimo na:
ulazne podatke
meurezultate
izlazne podatke
Svakom podatku treba definirati tip podataka koji predstavlja domenu iz koje taj podatak
moe poprimiti vrijednost. Uobiajene domene podataka su:
cijeli brojevi
pozitivni cijeli brojevi (prirodni brojevi)
decimalni brojevi
slova
rijei
logike vrijednosti (da/ne, yes/no, true/false)
Povijest programskog jezika C++

1949.- Asembler (John Mauchy)


1957.- Fortran (IBM) i Flow Matic (Univac) koji su se razvili iz asemblera
1958.- Algol (Miting u Zurichu) koji se razvio iz Fortrana
1959.- COBOL (Short Term Comitee) koji se razvio iz Flow Matic-a
1964.- BASIC (Dortmauh Uni) koji se razvio iz Algola
1971.- Pascal (Niklaus Wirth) koji se razvio iz Algola
1972.- C (Dennis Ritchie- Bell) koji se razvio iz Algola
1977.- Modula 2 (Niklaus Wirth) koji se razvio iz Algola
1984.- C++ (Bjarne Stroustrup- Bell) koji se razvio iz C
1988.- Oberon (Niklaus Wirth) koji se razvio iz Module 2
1990.- Visual Basic (Microsoft) koji se razvio iz BASIC-a
1994.- Java (Sun) koji se razvio iz C++
1995.- Delphi (Anders Hejlsberg- Borland) koji se razvio iz Pascala
2002.- C# (Anders Hejlsberg- Microsoft) koji se razvio iz Delphija, Visual Basica-a, C++ i Jave
Klasifikacija programskih jezika
Klasifikacija programskih jezika

Logiko Prolog Datalog Flora


programiranje

Funkcijsko SQL ML Daplex


programiranje Lisp

Proceduralno C++
C BASIC
progamiranje
Pascal Fortran Oberon

Objektno
Strukturno
Orijentirano
programiranje
progamiranje

Svojstva jezika C
Niska razina Mogudnost pisanja efikasnih programa i time koritenje programskog
jezika C u sluajevima u kojima se prije njega moralo posezati za assemblerom,
Minimalnost Zbog efikasnosti u samoj jezgri programskog jezika se nalaze samo
najosnovnije naredbe, dok se ostale naredbe po potrebi ukljuuju u program iz
unaprijed pripremljenih biblioteka funkcija,
Portabilnost Programski kod napisan u programskom jeziku C moe se bez vedih
izmjena prevoditi i izvravati na razliitim raunalnim platformama.
Prvenstveno osmiljen za izradu sistemskog softvera, no sadri sve komponente potrebne
za opdu namjenu
Brz je
Strukturiran je
C++
C++ je prvi objektno orijentirani jezik koji je uao u iroku primjenu. C++ je postao de facto
standard za objektno orijentirane proceduralne programske jezike. Koncepti koji su dodani
programskom jeziku C jesu:
Klase sadravaju opis podataka, ali i metode (operacije) nad objektima klase
Objekti Instance pojedine klase, u kojima se konkretizira struktura podataka
opisana u klasi. Dakle, objekti sadre podatke opisane u klasi, ali ne i instance
metoda.

Klase imaju osnovna svojstva definirana objektnim pristupom:


Nasljeivanje Hijerarhijska organizacija klasa, kao i mogudnost prenoenja dijela
strukture podataka i metoda s nadreene klase na podreenu
Uahurivanje Definiranje metoda pomodu kojih se vre sve potrebne operacije
nad objektima klase
Privatnost Mogudnost definiranja internih podataka klase, koji se ne vide iz
okoline objekta, ved su dostupne iskljuivo samom objektu
Polimorfizam Mogudnost imenovanja razliitih funkcija (s razliitim brojem i
tipovima podataka) istim imenom.

Deklaracijski dio C++


U deklaracijskom dijelu se nalaze predprocesorske i deklarativne naredbe. Ovaj dio ukljuuje
definicije biblioteka koje se ukljuuju u program, konstante, tipove podataka i druge
elemente bitne za rad samog programa.

Izvedbeni dio C++


U izvedbenom dijelu se nalazi izvrni dio programa koji sadri realizaciju algoritma odnosno
samo programsko rjeenje. Njega ine funkcije s time da je jasno istaknuta glavna funkcija od
koje sve poinje, a to je funkcija 'main()'. Dakle svaki put kada se program pokrede,
pokrede se upravo funkcija ' main()' a tek nakon toga se izvrava ostatak koda odnosno
ostale funkcije koje moemo, a i ne moramo imati. Svaki C++ program, bez obzira kako velik
bio mora sadravati tono jednu 'main()' funkciju.
Predprocesorske naredbe
Zapoinju znakom #. U iostreamu se nalaze funkcije za rad sa standardnim ulazno-izlaznim
jedinicama kao to su tipkovnica i zaslon. Interpretiraju se prije samog prevoenja.

Return
Naredba kojom se zavrava rad funkcije i vrada rezultat programu ili funkciji koja ju je
pozvala. Glavna funkcija naeg programa pozvana je od strane operacijskog sustava, pa de se
operacijskom sustavu vratiti vrijednost 0. Pravilo dobrog programiranja je da se kod
uspjenog zavretka rada programa operacijskom sustavu uvijek vrada vrijednost 0.

Delimiter
Znak ;.

Vitiaste zagrade
Svaka funkcija odnosno blok naredbi se uvijek nalazi u vitiastim zagradama. Taj dio koda se
uvijek izvrava slijedno liniju po liniju i zbog toga se takav niz naredbi naziva slijed ili
sekvenca.

Varijabla
Varijabla nije nita drugo nego mjesto gdje moemo spremati nae podatke odnosno
brojeve, znakove i sl. Drugim rijeima varijabla je imenovani dio memorije. Dakle, varijabla
predstavlja dio memorije koji ima svoj naziv i unutar kojeg moemo spremiti neki podatak.
Svaka varijabla ima svoj identifikator (ime) i tip podataka. Vrijednost varijable se tijekom
rada programa moe mijenjati.
Pravila za imenovanje varijabli su sljededa:
Identifikatori varijabli mogu se sastojati od malih i velikih slova, brojki i specijalnog
znaka
Prvi znak u identifikatoru varijable ne smije biti brojka
cout <<
Tok podataka koji opisuje jedinicu na koju se podatak ispisuje, a s desne strane operatora
moramo upisati podatak koji elimo ispisati. U programskom jeziku C++ cout predstavlja
izlazni tok podataka vezan uz standardnu izlaznu jedinicu, tj. zaslon, dok je << operator u
izrazu koji predstavlja prosljeivanje podataka s desne strane izraza na izlaznu jedinicu.
Naime, programski jezik C++ s okolinom komunicira preko tokova podataka koji teku od
programa prema okolini i od okoline prema programu.

cin >>
Operator ovog izraza jest >>, operator koji oznaava itanje podataka s ulaznog toka
podataka. S cin se u programskom jeziku C++ oznaava standardna ulazna jedinica, tj.
tipkovnica. Kod izraza za uitavanje podataka kroz ulazni tok podatka s lijeve strane izraza
mora se nalaziti identifikator varijable u koju elimo upisati uitanu vrijednost.

Operator =
Ovaj operator predstavlja operator pridruivanja vrijednosti s desne strane varijabli koja se
nalazi na lijevoj strani izraza.

Endl
Konstanta endl je definirana u biblioteci iostream kao konstanta tipa char koja sadri
vrijednost '\n', odnosno 13, koja oznaava prijelaz u novi red. Dakle, konstanta endl de na
zaslonu uzrokovati prelazak kursora u novi red.

System
Funkcija system je funkcija preko koje s pozivaju komande operacijskog sustava. Naredba
pause je naredba DOS operacijskog sustava koja ispisuje poruku Press any key to
continue... te zaustavlja daljnje izvoenje programa sve dok korisnik ne pritisne neku
tipku na tipkovnici. Treba upozoriti da se funkcija system ne nalazi u jezgri programskog
jezika C++, ved u biblioteci cstdlib.
std::
Ispred svakog toka podataka, ali i ispred konstante endl u programu se nalazi std::. To
znai da je tok podataka koji koristimo definiran u klasi std, koja se naziva prostor imena.
Kako ne bismo ovo morali pisati svaki puta kada koristimo neto to je opisano u ovom
prostoru imena, u deklaracijskom dijelu programa moemo navesti da se sva imena nalaze u
prostoru imena pod nazivom std tako da napiemo using namespace std.

Tip podataka definira


Veliinu memorijskog prostora koji podatak zauzima
Domenu podatka, odnosno vrijednosti koje podatak moe poprimiti
Operacije koje se nad podatkom mogu izvravati
Svaki tip zauzima odreeni broj byte-ova u memoriji raunala. Tako, primjerice tip int
zauzima 4B. Osim toga, treba znati sadri li podatak i negativne brojeve (signed) ili ne
(unsigned).

Int
Tip podataka koji sprema pozitivne, ali i negativne brojeve te zauzima 4B. Svaki od tih 4 byte-
a ima po 8 bitova, dakle sveukupno je to 32 bita, meutim jedan se bit koristi za predznak
tako da je to 31 bit. Bududi da svaki bit moe imati dva stanja (0 i 1), a bitova sveukupno ima
31, bazu binarnog brojevnog sustava (2) potenciramo sa 31 i dobijemo raspon brojeva koji
moemo smjestiti u ovaj tip podataka.
Meutim, ako se pak radi o tipu podataka unsigned int koji sprema samo pozitivne brojeve
tada naravno na raspolaganju imamo sva 32 bita jer bit za predznak nije potreban i moe se
iskoristiti za pohranu brojeva. Stoga pomodu njega moemo prikazati dvostruko vie
pozitivnih brojeva.
Tipovi podataka

Iomanip
Biblioteka koja sadri funkcije za formatiranje ispisa.

Setprecision
Klauzula kojom se definira broj znamenaka u ispisu decimalnih brojeva. U njoj se u
zagradama navodi broj znamenaka koje se prikazuju. Definicija broja znamenaka u ispisu
decimalnih brojeva vrijedit de i u sljededim ispisima, sve dok se ne definira drugaije.
Funkcija iz biblioteke iomanip koja se koristi unutar cout naredbe i definira broj znamenaka
koji se prikazuje kod prikaza decimalnih brojeva.

Using namespace
Naredba za definiranje prostora funkcijskih imena koja se koriste u programu.
Selekcije
Selekcije se koriste kada se izvravanje izvjesnog programskog bloka vee uz istinitost ili
lanost nekog logikog izraza. Selekcija je toka u programu u kojoj se odluuje temeljem
uvjeta (logikog izraza) koji de se, od nekoliko mogudih programskih blokova, izvesti.
Selekcija je jedan od elementa neega to nazivamo programski konstrukti (kontrolne
strukture). Kako samo ime kae, programski konstrukti su elementi od kojih konstruiramo
(gradimo) raunalni program.
U programske konstrukte ubrajamo:
sekvencu (slijed)
selekciju (odabir)
iteraciju (ponavljanje, petlja)
skok (naredbe goto, break, return i continue)
Sekvenca je jednostavno slijed tj. niz linija programskog koda koje se izvravaju jedna za
drugom.

Ugnjedene selekcije
Selekcije jedna unutar druge.

Operand
Neto nad ime vrimo operaciju.

Operator
Definira operaciju koja se provodi nad operandima.

Iteracija
Iteracija je dio programskog koda koji se izvrava vie puta uzastopno.
Goto
Naredba skoka koja predstavlja pomak na bilo koji programski dio sa bilo kojeg drugog
programskog dijela. Ona se u pravilu vie ne koristi ili se koristi jako malo jer naruava
strukturiranost programa. Primjerice uporabom ove naredbe moemo skoiti van iz petlje
prije nego to ona zavri svojim prirodnim putem. Problem je takoer i u tome da se je u
programskom kodu koji esto koristi goto iznimno teko snadi.

Bool tip podataka


Operacije usporeivanja kao operande (izraze) uzimaju varijable nekog tipa podataka i
vradaju 1 (true) ako je izraz istinit ili 0 (false) ako izraz nije istinit. Rezultati logikih izraza su
short tipovi podataka gdje 0 oznaava la, a 1 (ili bilo koji drugi broj) istinu. Logiki tip
podataka koji moe pohraniti istinu (true) ili la (false) je bool tip podatka. Ovaj tip podataka
nije pravi tip podataka jer se moe zamijeniti s bilo kojim cjelobrojnim tipom podataka.

Switch
Programski konstrukt ija uporaba je slina uporabi if selekcije sa nekoliko if uvjeta. Selekcija
tipa switch testira vrijednost varijable i za svaku pojedinu vrijednost izvodi pripadajudi kod. U
zagradi se ne nalazi logiki ved aritmetiki, i to cjelobrojni izraz. Ovaj se izraz usporeuje po
jednakosti s vrijednostima navedenim u klauzulama i izvrava se onaj sluaj ija je vrijednost
jednaka izrazu u zagradama. Switch se ponaa kao niz goto skokova.
Ova se selekcija koristi kada se sluajevi mogu pobrojiti.

Break
Prekida rad bilo koje C++ kontrolne strukture osim if kontrolne strukture.

Continue
Naredba preskoka koja preskae ostatak dijela petlje do zavretka petlje i odmah zapoinje
novi korak petlje.
Default sluaj
Izvrava se u sluaju da se pojavi vrijednost za koju nije definiran case (sluaj). Nije ga
obavezno navoditi, no ako se navodi, mora biti jedan jedini i mora se nalaziti iza posljednjeg
case sluaja.

Pow
Funkcija iz biblioteke cmath za izraunavanje potencija. Barem jedan od argumenta funkcije
pow mora biti decimalni broj.

Aritmetiki operatori
Aritmetiki operatori su operatori koji vre aritmetike operacije nad jednim ili dva
operanda. Ukoliko se operacija izvodi nad jednim operandom govorimo o unarnim
operatorima, a ukoliko se operacija vri nad dva operanda govorimo o binarnim
operatorima.

Biblioteka cmath
Biblioteka koja sadri standardne matematike funkcije. Biblioteka cmath u sebi sadri itav
niz funkcija. Sve funkcije biblioteke cmath zahtijevaju da barem jedan njihov argument bude
decimalan broj.

Uvjetni operator (?)


Jedini ugraeni ternartni operator u programskom jeziku C++. Omoguduje da se izmeu
dvaju aritmetikih izraza izabere jedan, s obzirom na logiki uvjet. Drugim rijeima, ovaj
operator predstavlja if...else selekciju u aritmetikim izrazima. Njegova je sintaksa
logiki_izraz ? aritmetiki_izraz_1 : aritmetiki_izraz_2. Ako je logiki izraz ispunjen, onda de
se kao rjeenje ove operacije izraunavati prvi aritmetiki izraz, a u suprotnom de se
izraunavati drugi.

Iteracije
Programski konstrukti koji omogudavaju da se neki programski blok ponavlja vie puta.
For iteracija
Iteracija s eksplicitnim brojaem. Uz ovu se iteraciju vezuje jedna cjelobrojna varijabla koja se
u svakom koraku iteracije automatski mijenja. Ta se varijabla naziva broja petlje. Prva dolazi
inicijalna vrijednost koja se pridruuje brojau petlje. Drugi je uvjet zavretka tj. logiki izraz
koji treba biti ispunjen kako bi se tijelo petlje izvrilo. Trede je promjena tj. izraz prema
kojem se u svakom sljededem koraku mijenja broja petlje.

Rad iteracije for


Kada se prvi puta naie na glavu iteracije
Prema prvom izrazu se inicira broja petlje
Ako je drugi izraz zadovoljen izvri se tijelo petlje i vrada se na glavu petlje, a inae se
preskae tijelo petlje i ide se na prvu naredbu iza tijela petlje
Prilikom povratka na glavu petlje
Promijeni se vrijednost brojaa prema tredem izrazu u glavi petlje
Ako je drugi izraz zadovoljen izvri se tijelo petlje i vrada se na glavu petlje, a inae se
preskae tijelo petlje i ide se na prvu naredbu iza tijela petlje

While iteracija
Izvrava se sve dok je logiki uvjet koji je zadan u njenoj glavi istinit. Ova iteracija ima
sintaksu: while (logiki uvjet)
blok naredbi
Rad petlje:
Provjerava se logiki uvjet u glavi petlje
Ako je ispunjen izvrava se tijelo petlje i vrada na glavu petlje
Ako nije ispunjen, preskae se tijelo petlje i nastavlja se sa sljededom naredbom iza
tijela.
Dowhile iteracija
Njena je sintaksa: do
blok naredbi
while (logiki uvjet);
Do while je jedina iteracija iza ijeg kraja ide znak ;. Razlika izmeu ove i while iteracije je u
tome to se kod iteracije tipa do...while logiki uvjet provjerava tek nakon prvog prolaska
kroz tijelo petlje. Dakle, dok se kod iteracija tipa for i while moe dogoditi da se tijelo petlje
ne izvri ni jednom, kod iteracije tipa do...while tijelo se petlje mora izvriti najmanje
jedanput.

Programski konstrukti
Logiki operatori
Primaju kao operatore dvije logike vrijednosti i vradaju logiku vrijednost.
- !A - negacija
- A && B - konjunkcija (logiko i)
- A || B - disjunkcija (logiko ili)

Prioriteti logikih operatora


1. !
2. <, <=, >=, >
3. ==, !=
4. &&
5. ||

Konstante
Konstante se deklariraju isto kao i varijable, osim to se ispred imena tipa podataka stavlja
kljuna rije const. Konstanta se uvijek prilikom deklaracije mora i inicijalizirati. U
programiranju je vano tedjeti memorijski prostor. Konstanta, za razliku od varijable, u
izvrnom kodu nede alocirati memorijski prostor, ved de se prilikom prevoenja svaka njena
pojava jednostavno zamijeniti njenom vrijednodu. Stoga je vano da se vrijednosti koje se u
programu ne mijenjaju ne deklariraju kao varijable, ved kao konstante.

Define
Konstanta de se razrjeavati prije prevoenja, u postupku preprocesiranja, odnosno provjere
sintaksne konzistentnosti programa i ukljuivanja biblioteka.

Rand()
Funkcija rand() vrada sluajni cijeli broj izmeu 0 i RAND_MAX. Rand je dio cstdlib biblioteke.
RAND_MAX je najede jednak INT MAX, tj. 32767, no to moe biti i razliito, ovisno o C++
prevodiocu i raunalu. Ako elimo dobiti brojeve izmeu 0 i 100, najuniformniju razdiobu
dobit emo ako dijelimo cjelobrojno RAND_MAX s RAND_MAX / 99, no onda emo dobiti
brojeve od 0 do 99, pa dobivenom broju treba dodati 1.
Ova funkcija vrada pseudosluajne brojeve.
Pseudosluajni brojevi
Nisu brojevi koji se odabiru nasumce, ved se svaki sljededi izraunava iz prethodnoga tako da
brojevi izgledaju sluajni. Pseudosluajnom nizu se na neki nain odredi promjenjivi prvi
element, koji se naziva sjeme (seed) pseudosluajnog niza. Postoji procedura srand
(unsigned int) koja odreuje sjeme pseudosluajnog niza.

Funkcija time
Funkcija koja se koristi s argumentom 0. Dio je ctime biblioteke.

Razlika izmeu A++ i ++A


Prvi izraz nam govori da de se prvo izraunati cijeli izraz sa starom vrijednodu varijable i
onda povedati za 1, a drugi izraz nam govori da de se varijabla A prvo povedati za 1, a onda
izraunati izraz.

Polje
Polje je mehanizam agregacije kojim se od jednostavnih tipova podataka tvori sloeniji tip
podataka. Ako uemo malo dublje u samu strukturu, moemo redi da polje nije nita drugo
nego niz varijabli istog tipa koje su imenovane zajednikim identifikatorom i nalaze se na
uzastopnim memorijskim lokacijama. Svaka varijabla u polju naziva se element polja.
Dovoljno je pamtiti samo memorijsku lokaciju nultog elementa polja s obzirom da se
memorijske lokacije ostalih elemenata mogu izraunati na sljededi nain:
lokacija 0-tog elementa + veliina elementa index.
Zbog tog svojstva se svakom elementu polja moe pristupiti u fiksnom vremenu, bez obzira
na indeks elementa i veliinu polja.
Polje se deklarira: tip_podataka identifikator[broj_elemenata];

Indeks polja
Predstavlja memorijski pomak u odnosu na adresu poetka polja.

Strlen
Funkcija pomodu koje dobivamo duljinu stringa.
cin.get()
Uitava jedan znak sa tipkovnice (ako je uneseno vie slova uitava se prvi znak a ostali
znakovi ostaju u spremniku za sljedede unose, dio je iostream biblioteke)

cin.getline(varijabla, max_duljina)
Uitava znakove sve do kraja retka bez obzira na razmake kao jedan string (dio je iostream
biblioteke)

cin.ignore()
Brie sadraj spremnika kako se ne bi unio neeljeni sadraj koji je zaostao od prije (dio je
iostream biblioteke).

ASCII (American Standard Code for Information Interchange) je


Standardni 7-bitni kod predloen od strane ANSI (American National Standards Institute)
1963. a dovren 1968. ASCII tablica kodova je osmiljena s ciljem da se ostvari
kompatibilnost u nainu prikaza podataka, tako da bi razliita oprema za obradu podataka
mogla skladnije komunicirati. Standardni ASCII kod se sastoji od 128 cjelobrojnih vrijednosti,
u intervalu od 0 do 127, i svakoj vrijednosti je dodijeljen jedan znak. Uz standardne znakove
abecede tu se nalaze i ostali specijalni esto koriteni znakovi. Poto raunala znaju raditi
jedino s brojevima bilo je potrebno svakom znaku dati ekvivalenti broj. S obzirom na
evoluciju dananje tehnologije s vremenom se pojavila potreba za dodatnim znakovima pa je
tako nastala i proirena ASCII tablica kodova u kojoj se nalaze dodatni znakovi kojih nema u
standardnoj ASCII tablici.

Dvodimenzionalna polja
U jednodimenzionalnim poljima se lanovi polja dohvadaju preko jednog indeksa dok se kod
dvodimenzionalnih polja to radi s dva indeksa, pri emu je prvi indeks red matrice dok drugi
predstavlja stupac tj. prva dimenzija daje duljinu stringa, a druga broj stringova u polju.
Ako elimo inicijalizirati dvodimenzionalno polje pravila su ista kao i za jednodimenzionalno
meutim redovi se odvajaju zarezom, izostavimo li vitiaste zagrade, inicijalizacija poinje od
prvog reda pa sve do zadnjeg lana u tom redu i tek tada se preskae u drugi red.
Strcmp i Strcpy
Naredbe strcpy(u_string, iz_stringa) te strcmp(string1, string1), obje funkcije se nalaze u
cstring biblioteci. Strcmp slui za usporeivanje stringova, a strcpy za pridruivanje
vrijednosti jednog stringa drugome.
Strcmp radi:
- Ako je string1 < string2, vrada -1
- Ako je string1 == string2, vrada 0
- Ako je string1 > string2, vrada 1

Euklidov algoritam
Prvo je potrebno odrediti koji je od dvaju unesenih brojeva vedi i ulaz preurediti tako da
bude A > B. Nakon toga se rauna A%B, ako je to 0, onda je B najveda zajednika mjera, u
suprotnom se u varijablu A upisuje vrijednost varijable B, a u B vrijednost A%B i postupak se
ponavlja.

Eratostenovo sito
Svi brojevi od A do N se oznae kao prosti. Varijablu k mijenjamo od 2 do sqrt(N). Ako je k jo
uvijek prost broj, sve njegove viekratnike oznaimo kao sloene brojeve. Nakon to k
postane sqrt(N), oznaeni brojevi de biti prosti.

Pretraivanje polja
Postupak traenja neke vrijednosti u skupu svih vrijednosti tj. elemenata polja. Pretraivanje
polja je, uz sortiranje, jedan od najvanijih algoritama u raunalstvu uopde.

Slijedno pretraivanje
Elementi polja A se usporeuju redom jedan za drugim sa traenom vrijednodu K. Postupak
se nastavlja sve dok se ne pronae traena vrijednost ili dok se ne doe do kraja svih
elemenata polja bez da je traena vrijednost naena.

Sortiranje polja
Pretvorba niza elemenata polja iz poetnog oblika u oblik u kojem je niz poredan prema
eljenom kriteriju (uzlazno, silazno, abecedno, itd.).
Sortiranje izborom (Selection sort)
Algoritam sortiranja izborom je jedan od najjednostavnijih algoritama sortiranja. Algoritam
funkcionira tako da se u polju pronae element s najvedom vrijednosti i zatim se vrijednost
tog elementa zamjeni s vrijednosti posljednjeg elementa u polju. Nakon toga se postupak
ponavlja za sve elemente osim posljednjeg. Nakon toga se postupak ponavlja za sve
elemente osim posljednja dva, itd. sve dok se ne doe do samo jednog elementa. Tu se staje
jer naravno jedan element vie nema biti s ime usporeen pa nikakva zamjena niti ne dolazi
u obzir.
Vanjska for iteracija ide od kraja polja i smanjuje se za 1 u svakom koraku gdje de unutarnja
for iteracija u svakom koraku vanjske for iteracije pronadi najvedi element u polju i staviti ga
na kraj. Smanjenjem vrijednosti brojaa vanjske for petlje za 1 u svakom koraku, smanjujemo
broj elemenata polja koje de unutarnja for iteracija pretraivati u potrazi za najvedim
elementom, a ujedno demo pomicati prema naprijed poziciju na koju de biti smjeten najvedi
element polja nakon to je pronaen. Prilikom svake zamjene koristimo pomodnu varijablu
pom.

Sortiranje zamjenom (Exchange sort)


Sortiranje zamjenom je takoer kao i sortiranje izborom jednostavniji algoritam sortiranja. U
ovom algoritmu se vrijednost posljednjeg elementa usporeuje sa vrijednostima svih
prethodnih elemenata. Ukoliko se naie na element sa vedom vrijednosti od posljednjeg, vri
se njihova zamjena itd. to de rezultirati time da de na kraju prvog prolaza na kraju polja biti
element s najvedom vrijednosti. Cijeli postupak se zatim ponavlja za pretposljednji element i
tako dalje, sve dok ne preostane samo jedan element.
Vanjska for iteracija ide od kraja polja i smanjuje se za 1 u svakom koraku. Unutarnja for
iteracija je zaduena za provjeru svih elemenata polja do elementa s indeksom vrijednosti
brojaa vanjske for iteracije i zamjene vrijednosti elemenata ukoliko je bilo koji element polja
vedi od zadnjeg elementa tj. elementa s indeksom vrijednosti brojaa vanjske for iteracije.
Prilikom svake zamjene koristimo pomodnu varijablu pom.
Mjehuridasto sortiranje (Bubble sort)
Mjehuridasto sortiranje je neto efikasnija varijanta sortiranja zamjenom. Ovaj algoritam
sortiranja funkcionira tako da se svaki element polja usporeuje sa elementom koji slijedi i
ukoliko je sljedbenik tekudeg elementa vedi, vri se zamjena njihovih vrijednosti. Kao i kod
prethodnih sortiranja, nakon prvog prolaska element s najvedom vrijednosti de biti na kraju
polja tako da se u sljededem prolasku zadnji element polja vie ne mora gledati. Postupak
sortiranja zavrava kada preostane samo jedan element polja ili kada u cijelom prolasku kroz
polje nema potrebe za niti jednom zamjenom.

Sortiranje umetanjem (Insertion sort)


Ovo sortiranje je neto sloenije od prethodnih. Polje se kod ovog sortiranja dijeli na dva
dijela: sortirani i nesortirani dio. Na poetku se sortirani dio polja sastoji samo od prvog
elementa polja. U svakom sljededem koraku sortirani dio se smanjuje za jedan element, a
nesortirani povedava za jedan element prebacivanjem prvog elementa iz nesortiranog u
sortirani dio polja. Prebacivanje se vri tako da se promatrani element iz nesortiranog dijela
usporeuje s posljednjim elementom u sortiranom dijelu, te ako je promatrani element
manji, posljednji se element iz sortiranog dijela prebacuje za jedno mjesto dalje u polju.
Nakon toga se promatrani element usporeuje s pretposljednjim elementom u polju itd., sve
dok se ne naie na element u sortiranom dijelu polja koji je manji od promatranog elementa
ili dok se i prvi element sortiranog dijela polja ne pomakne za jedno mjesto dalje u polju. Na
taj se nain oslobodilo mjesto u polju na koje se umede novi element i povedava sortirani dio
polja za jedan element.
Slog (struktura)
Mehanizam agregacije u kojem se povezuje vie podataka koji mogu imati meusobno
razliite tipove, pri emu se svaki podatak unutar samoga sloga naziva komponenta sloga, a
komponentama sloga se pristupa preko identifikatora sloga odnosno imena sloga.
Sintaksa:
struct ime_strukture {
opis_komponenti
} deklaracije varijabli;
Komponente strukture se deklariraju po istim pravilima po kojima se deklariraju varijable. Iza
zatvorene vitiaste zagrade navode se identifikatori (imena) varijabli koje de kao tip
podataka imati sloeni tip definiran strukturom. Ime strukture koristi se kao ime tipa
podataka kojim de se kasnije u programu modi deklarirati varijable.

Definicija unije
U programskom jeziku C++ postoji mehanizam agregacije koji omoguduje da se alternativni
podaci uvaju u istom memorijskom prostoru. Taj se mehanizam naziva unija. Deklaracija
unije u potpunosti je jednaka po sintaksi i svojstvima kao i deklaracija strukture, osim u
kljunoj rijei union koja se koristi umjesto kljune rijei struct.
Sintaksa:
union ime unije {
alternativni podaci
} identifikatori varijabli;
Pokaziva
Pokaziva je varijabla koja sadri memorijsku adresu neke druge varijable. Pomodu
pokazivaa moemo pristupiti, preko operatora dereferencijacije (*), i do sadraja, ali i do
memorijske adrese gdje je taj sadraj spremljen. To je mehanizam koji omoguduje da se
tokom rada programa prema potrebi alocira memorijski prostor.
Sintaksa pokazivaa:
tip podataka *ime;
Tip podataka kod pokazivaa je potreban kako bi se znalo koliko je velika varijabla u
memorijskom prostoru na koji pokaziva pokazuje, tj.,koliko se memorije treba alocirati, ali i
zbog toga da bi se znalo na koji se nain interpretira podatak smjeten u toj memoriji, tj.
kojeg je taj podatak tipa podataka.

Operator adrese &


Vrada memorijsku lokaciju neke varijable, tj. gdje je varijabla smjetena u memoriji.

Vezana lista
Svaki element treba biti slog koji de, osim unesene vrijednosti sadravati i pokaziva na
sljededi uneseni element. Strukture koje se generiraju pomodu pokazivaa i alociranja
memorije koje oni omoguduju nazivaju se dinamike strukture.

Statika vs. dinamika alokacija


Sa statiki alociranim objektima se radi pomodu programskog stoga (stack), dinamiki
alocirani objekti se uvaju u internoj strukturi koja se naziva programska hrpa (heap).

Typedef
Definiramo novi tip podataka koji ima svoje ime i koji je pokaziva na strukturu odreenog
tipa.

Delete
Naredba dealokacije memorijskog prostora na koji pokazuje pokaziva.
Null
Nepostojeda se memorijska adresa definira pomodu konstante NULL. NULL je konstanta iz
biblioteke cstdlib koja predstavlja naziv za broj 0. Jasno je da de uvijek posljednji element u
vezanoj listi, odnosno onaj koji je prvi dodan sadravati NULL-pokaziva.

New
Naredba koja dinamiki alocira prostor. Ova alokacija se vri navodedi tip podataka za koji se
dani memorijski prostor alocira.

Operator dereferencijacije
Da bismo pristupili memorijskom prostoru na koji pokazuje neki pokaziva koristimo ovaj
operator ija je oznaka *.

Sortiranje prebrojavanjem
Nedostaci sortiranja prebrojavanjem su ti to ovo sortiranje nije efikasno ako elementi
glavnog polja poprimaju vrijednosti iz velikog intervala cijelih brojeva te nije primjenjivo na
decimalne brojeve.
Ako je interval iz kojeg elementi poprimaju vrijednosti relativno mali, onda se moe koristiti
jednostavan, ali efikasan algoritam sortiranja:
Generira se pomodno polje odreenog tipa koje ima onoliko elemenata koliko ima razliitih
vrijednosti koje elementi glavnog polja mogu poprimiti. Svi se elementi pomodnog polja
iniciraju na 0. Proe se jednom po glavnom polju i ako je vrijednost i-tog elementa glavnog
polja jednaka j, onda se j-ti element pomodnog polja poveda za 1. Na kraju de i-ti element
pomodnog polja sadravati broj pojava vrijednosti i u glavnom polju.

Hash tablica
Struktura koja omogudava lake pretraivanje podataka

Hash funkcija
Kriterij prema kojem se podaci dijele u odreeni broj pretinaca. Kada se podaci pretrauju,
onda se treba pretraivati samo pretinac u kojem se traeni podatak treba nalaziti s obzirom
na hash funkciju.
Funkcije
Funkcije su izdvojeni dijelovi programskog koda koji imaju svoje ime. Osnovna ideja funkcija
je da se neki dio koda napie na jednom mjestu, a zatim se, po potrebi poziva na vie mjesta.
Time se skraduje vrijeme pisanja cjelokupnog programa.

Elementi funkcije
Povratni tip podataka - definira tip podataka koji de funkcija vratiti nakon to se zavri njeno
izvoenje.
Ime funkcije naziv funkcije koji je proizvoljan, no mora zadovoljavati pravila ispravnog
imenovanja varijabli.
Argumenti ili parametri mogu se, a i ne moraju koristiti. Javljaju se u okruglim zagradama
nakon imena funkcije i moe ih biti jedan ili vie. Argumenti predstavljaju ulazne podatke
funkcije, a ponaaju se i deklariraju isto kao i varijable. Ulazni parametri su vidljivi unutar
funkcije, ali ne i izvan nje. Promjene vrijednosti parametara tijekom izvoenja funkcije nede
se reflektirati na vrijednosti varijable van funkcije.

Sintaksa funkcije
tip ime (parametri) {
tijelo funkcije
}
tip - Bilo koji elementarni tip podataka, pokaziva ili slog.
ime - Mora zadovoljavati pravila imenovanja varijabli.
parametri - Parametri se deklariraju isto kao i varijable u programu.
tip ime (parametri) Cijeli ovaj dio se naziva zaglavlje ili glava funkcije.
tijelo funkcije - Ispravan C++ kod koji u svakom sluaju treba zavriti naredbom
return (osim kada je funkcija tipa void) i vratiti podatak tipa koji je definiran
povratnim tipom funkcije.

Return
Zaustavlja rad funkcije i odmah vrada rezultat.
Void
Ne smije se koristiti kao tip za deklaraciju varijabli, ved samo kao povratni tip funkcije i kao
tip za deklaraciju pokazivaa. Tip void predstavlja izostanak povratnog tipa. Funkcija tipa void
u svom tijelu ne treba sadravati naredbu return.
Funkcija nita ne vrada.

Globalna varijabla
To su polja na globalnoj razini; varijable vidljive iz svih dijelova programa. Ukoliko unutar
funkcije deklariramo neku varijablu, ona je tada vidljiva samo unutar te funkcije. Ukoliko
elimo da varijabla bude dostupna globalno u svim dijelovima programa tada je moramo
deklarirati globalno u deklaracijskom dijelu programa, prije definiranja prve funkcije.

Preopteredenje funkcija (overloading)


Javlja se kada u programu postoje dvije funkcije koje se jednako zovu ali imaju razliit broj
argumenata. U programu moe postojati vie istoimenih funkcija (osim funkcije main), ali se
one moraju razlikovati po broju ili tipu argumenata.

Referenca
Mehanizam koji se koristi da bi se rijeio problem prosljeivanja varijabli funkcijama. Slui
kako bi se definirala lokalna varijabla koja se pri pozivu funkcije ne stavlja na programski
stog.

Referenca vs. pokaziva

Pokazivai Reference
Pokazivai omoguduju dinamiku
Reference samo pokazuju na statiki
alokaciju
alociranu varijablu
memorijskog prostora
Vrijednost pokazivaa se moe
Vrijednost reference je fiksna
mijenjati
Reference nisu varijable same po sebi i
Pokazivai u C++ su "nesigurni" preko njih se ne moe pristupati
nealociranom memorijskom prostoru
Rekurzija
Mehanizam koji omoguduje da funkcija poziva samu sebe s promijenjenim parametrima. Kao
takva, rekurzija predstavlja jo jedan mehanizam koji omoguduje iteracije (petlje) u
programima, ali je mnogo modnija od bilo koje petlje koja se moe nadi u bilo kojem
programskom jeziku. Moe se redi da je rekurzija mehanizam matematike indukcije u
programskim jezicima.
Koraci generiranja:
1. Generirati nerekurzivni sluaj (bazu indukcije) koji se rjeava izravno. Nerekurzivni
se sluaj naziva jo i rubni uvjet rekurzije.
2. Generirati rekurzivni sluaj (korak indukcije) koji se rjeava pozivom iste funkcije s
manjim ulazom.

Parametri s predvienom vrijednodu


Moraju biti na kraju liste parametara funkcije. Kod poziva funkcije oni se mogu izostaviti i bit
de popunjeni predvienom vrijednodu.

Podijeli pa vladaj
Ova se metoda temelji na tri koraka. Prvi korak se temelji na tome da se originalni problem
podjeli na dva ili vie istih problema manjih dimenzija. Nakon toga se krede u rjeavanje
novostvorenih problema manjih dimenzija, a nakon toga se rjeenja potproblema spajaju u
rjeenja prvotnog problema.
Binarno pretraivanje
Koristi se kada je polje sortirano. Funkcionira na nain da se prvo usporedi element u sredini
polja s traenom vrijednosti i, s obzirom na to da li je on manji ili vedi od traene vrijednosti,
poduzimamo sljedede korake:
Ako je manji, onda traeni element (ako se nalazi u polju), mora biti u drugoj
polovici polja
Ako je jednak, onda smo ga pronali i zavravamo
Ako je vedi, onda se traeni element (ako postoji u polju), mora biti u prvoj polovici
polja
Kao to se moe i zakljuiti kod binarnog pretraivanja se traena vrijednost ne usporeuje
sa svakim elementom polja. U prvom se koraku pretraivanja eliminira pola elemenata, u
drugom jo pola od te polovice itd.

Sortiranje spajanjem (Merge sort)


Ako je polje vede od jednog elementa:
I. Podijeli polje na dvije polovice
II. Sortiraj svaku polovicu
III. Spoji sortirane polovice u sortirano polje
Spajanje:
1. Sve dok u oba polja ima jo neobraenih elemenata
I. Uzmi manji od prvih neobraenih elemenata u ulaznim poljima i stavi ga na
kraj izlaznog polja
II. Promatraj sljededi neobraeni element u polju iz kojeg je uzeti element
2. Prepii sve preostale neobraene elemente uz polja u kojem ih jo ima
Quick sort
Za razliku od Merge sorta, nije mu potrebno dodatno polje za spajanje. Kod QuickSort
algoritma polje se ne dijeli onakvo kakvo je, ved se prije podjele polja na dva dijela elementi
prerasporeuju. Odreuje se neka vrijednost, koja se naziva kruni element ili sidro (pivot), a
preostali se elementi rasporeuju s obzirom na njega. Elementi koji su manji od njega
premjetaju se u polje ispred njega, a oni koji su vedi od njega, premjetaju se iza njega.
Nakon to se izvede ova transformacija potrebno je samo jo sortirati dijelove polja koji se
nalaze ispred i iza krunog elementa, dok njihovo spajanje nije potrebno.

Tekstualna datoteka
Tekstualna datoteka je sekvencijalna datoteka u kojoj je sadraj zapisan slijedno tj. znak do
znaka. Unutar tekstualne datoteke postoje jo i dvije specijalne oznake, a to su oznaka za
kraj reda i oznaka za kraj same datoteke.
Sintaksa:
open (naziv datoteke, mod otvaranja)
Parametar 'naziv datoteke' je obavezan i on predstavlja fiziki naziv datoteke koja de biti
otvorena/stvorena. Parametar 'mod' nije obvezan a sastoji se od sljededih modova (naina):
ios::in otvara datoteku u modu za upis
ios::out otvara datoteku u modu za ispis
ios::binary otvara datoteku u binarnom modu (tekstualne datoteke nisu binarne)
ios::ate postavlja inicijalnu poziciju pokazivaa na kraj datoteke umjesto na poetak
ios::app sav upisani sadraj u datoteku de se dodati na kraj ved postojedeg sadraja.
Ovaj mod je mogud samo ukoliko je datoteka otvorena striktno za upis.
ios::trunc sav sadraj datoteke se brie prije upisa novog
Biblioteke za rad s tekstualnim datotekama
ofstream za upis u datoteku
ifstream za ispis iz datoteke
fstream za upis i ispis iz datoteke

Open
Pridruuje fiziku datoteku na disku stvorenom toku datoteka.
Close
Zatvara datoteku tj. izlazni tok pa ona ponovo postaje raspoloiva drugim procesima.
Datoteni objekt se oslobaa i moe se ponovo iskoristiti za povezivanje s nekom drugom
datotekom.

Funkcija is_open()
Da bismo provjerili da li je navedena linija koda prola korektno tj. da li je datotenom
objektu zaista pridruena fizika datoteka, moemo koristiti ovu funkciju koja vrada
true/false ovisno o tome da li je rezultat pozitivan ili negativan.

Funkcija eof()
Vrada true ukoliko je dosegnut kraj datoteke.

Binarne datoteke
Ova datoteka nema oblik teksta. Razlika izmeu ove datoteke i tekstualne je ta to binarne
datoteke imaju formatirane zapise fiksne duljine. Zato u njima moemo pristupati izravno
preko njihovog rednog broja u datoteci.
Datoteci su u programskom jeziku C++ pridruena dva kursora. Prvi kursor pokazuje na
poziciju u datoteci sa koje se ita sljededi zapis (postoji samo kod ifstream tokova ili kod
fstream tokova s opcijom ios::in). Drugi kursor pokazuje na poziciju u datoteci na koju se
upisuje sljededi zapis (postoji samo kod ofstream tokova ili kod fstream tokova s opcijom
ios::out). Kod otvaranja datoteke kursor za itanje je uvijek postavljen na poetak datoteke.
Kursor za zapisivanje je postavljen na poetak datoteke ako je datoteka otvorena s opcijom
ios::trunc, a na kraj datoteke ako je otvorena s opcijom ios::app.
Napomena: Ako se datoteka otvori s ios:app opcijom, onda nede biti mogude runo
auriranje ovih kursora.

Jo neke naredbe
Tellg- Naredba za itanje pozicije kursora za itanje.
Tellp- Naredba za itanje pozicije kursora za pisanje.
Seekg- Naredba za postavljanje kursora za itanje.
Seekp- Naredba za postavljanje kursora za pisanje.

You might also like