You are on page 1of 25

1.

Osnovni pojmovi
Softver je pojam za različite vrste programa koji se koriste za rad računara i sličnih uređaja.
Softver je, po A.K. Koy-u, modeliranje i implementiranje filozofije, metodologije i znanja o
izvršavanju određenog zadatka pomoću računarskog koda.

Dijeli se na:
● Aplikacijski: programi koji izršavaju posao za koji su korisnici zainteresovani
● Sistemski: Operativni sistem ili programi koji su podrška za rad aplikacijskog softvera

Sofver čine:
● Instrukcije: naredbe čije izvršavanje odrađuje željenu funkcionalnost
● Strukture podataka: omogućavaju programima adekvatno manipulisanje informacija
● Dokumenti: opisuju operacije i upotrebu programa

Problemi koji utiču na uspješnost razvoja i implementiranje softvera su:


● Kompleksnost
● Prilagodljivost
● Promjenjivost
● Nevidljivost

Ciklus razvoja softvera ima sljedeće faze:


● Analiza sistema
● Dizajn sistema
● Programiranje
● Integriranje i isporuka
● Održavanje

Vidi se da je programiranje samo jedna faza u izradi softvera, pa možemo zaključiti da je


programiranje uži pojam od sofvera.

Programiranje podrazumijeva postupke rješavanja nekog problema uz korištenje konkretnog


programskog jezika. Rezultat programiranje je program.
Osnovni preduslov za programiranje je da se problem, koji želimo isprogramirati, može
raščlaniti na konačan broj nedvosmislenih koraka koje računar može izvršiti.

Programski jezik predstavlja formalni jezik u kojem je napisan računalni program. Također
se može reći da je to: organizirana lista naredbi čije izvršavanje uzrokuje da se računar
ponaša na unaprijed definisani način.
Principi dizajna:
● Sintaksa: opisuje šta čini strukturno ispravan program tj. šta je gramatika jezika, koji
je osnovni skup riječi i simbola dozvoljeno koristiti.
● Imenovanje i tipovi :Programski jezik sadrži potpuno izgrađen skup pravila za
imenovanje varijabli, funkcija, klasa, parametara i sl., kao i njihovu “vidljivost”
unutar programa. Tipovi podataka omogućavaju programerima bolje razumijevanje i
upotrebu operatora, kao i kvalitetniju kontrolu kompajlera.
● Semantika: Značenje programa, tj. programskih izraza definirano je semantikom
programskog jezika.

Za programski jezik su bitne sljedeće karakteristike:


● Funkcija – programski jezik je jezik koji se koristi za pisanje računalnih programa
koji daju naredbe računaru za izvođenje određene vrste izračunavanja, kontrolu
vanjskih uređaja kao što su pisači, roboti i sl.
● Cilj – programski jezici se razlikuju od prirodnih jezika po tome što se prirodni jezici
koriste samo za interakciju između ljudi, dok programski jezici omogućavaju ljudima
komuniciranje sa strojevima. Neki programski jezici se koriste od strane jednoga za
kontrolu drugog uređaja.
● Konstrukcija – programski jezici obično sadrže konstrukcije za definisanje i
manipuliranje podatkovnim strukturama i/ili kontroliranje toka izvršavanja programa.

Osnovni koraci u programiranju:


1. Definisanje problema, prikupljanje informacija
2. Izrada algoritma
3. Kodiranje algoritma
4. Testiranje programa
5. Dokumentacija programa
6. Održavanje programa

Implementiranje programskog jezika predstavlja način na koji se program izvršava na jednoj


ili više konfiguracija hardvera i softvera. Dva su osnovna pristupa implementaciji
programskog jezika gdje se transformiranje izvornog koda (čitljivog za čovjeka) u kod čitljiv
od strane računala vrši:
● Kompajliranjem
● Interpretiranjem

Izvorni kod je bilo koji niz izraza napisan u nekom, od strane čovjeka čitljivom programskom
jeziku. Izvorni kod je obično jedna ili više tekstualnih datoteka. Promjene programa mogu se
raditi ISKLJUČIVO na izvornom programu.

Kompajler je računarski program koji prevodi tekst napisan u konkretnom programskom


jeziku u drugi, mašinski jezik, jezik koji računar razumije.
Osnovni cilj kompajliranja je kreiranje izvornog koda tj. programa koji se može samostalno
pozvati i izvršiti na odgovarajućoj računarskoj platformi.

Osnovne operacije komajlera su:


1. Leksička analiza
2. Sintaksna analiza
3. Semantička analiza
4. Optimiziranje koda neovisno o računaru na kojem se izvodi
5. Generisanje koda
6. Specifično optimiziranje koda ovisno o konkretnom računaruna kojem se izvodi.

Prve tri faze (leksička, sintaksna i semantička) imaju za cilj pronaći značenje izvornog
programa i još se nazivaju i sučelje (engl. front end) kompajlera. Posljednje faze
(optimiziranje koda, generiranje koda i specifično optimiziranje) - koriste se za konstrukciju
odgovarajućeg programa i nazivaju se pozadinske faze (engl. back end) kompajlera.

Sintaksna analiza podrazumjeva organizovanje tokena u posebna stabla - viši nivo jezičke
konstrukcije (rečenice, izraze, podprograme i sl.). Svaka konstrukcija je čvor u stablu i čine
ga njegova „djeca“. Korijen stabla je „program“, dok su listovi, počevši s lijeva udesno
tokeni preuzeti iz faze leksičke analize. Stablo pokazuje kako se tokeni međusobno uvezuju
da bi se dobio ispravan program.

U procesu leksičke i sintakske analize, kompajler provjerava jesu li svi programski tokeni
dobro formirani, te zadovoljava li niz tokena sintaksu definiranu pomoću „context-free“
gramatike. Svaki neispravni token trebao bi uzrokovati da skener prikaže poruku o
greški. Svaki sintaksno neispravni niz tokena trebao bi dovesti do toga da parser prikaže
pogrešku.

Context-free gramatika definiše sintaksu jezika. Odnosi se na pravilo da rečenice, tj. skupovi
naredbi, mogu biti ugnježdeni unutar drugih rečenica proizvoljno duboko, ali nije dozvoljeno
njihovo preklapanje.

Sematička analiza ima za cilj otkriti značenje programa. Ova faza kompilacije prepoznaje
kada se višestruke pojave istog identifikatora odnose na isti programski entitet, i osigurava da
je upotreba konzistentna. U većini programskih jezika, u fazi semantičke analize se prati tip
identifikatora i izraza kako bi se potvrdila konzistenost uporabe i kako bi se omogućilo
izvođenje generisanja koda u narednoj fazi.

Kompajleri obično kao izlazni rezultat daju objektni kod koji se pomoću linkera
transformira u izvršni.
Linker je program koji uzima jedan ili više objektnih programa generiranih od strane
kompajlera i spaja ih u jedan izvršni program.
Rezultat kompilacije kod programskih jezika koji koriste linkere je objektni kod koji se onda
pomoću linkera transformira u izvršni. Dva su osnovna tipa linkera:
● Statički: odradi svoj dio posla, odnosno formira izvršnu programsku datoteku, prije
izvođenja programa na računaru.
● Dinamički: odradi svoj posao nakon što se program koji se izvršava učita u memoriju.

Objektni programski kod sadrži mašinski kod i informacije za linker. Te informacije su


obično u obliku simboličkih definicija, a mogu postojati u dvije varijante:
1. Definisanje ili izvezeni simboli su funkcije ili varijable koje postoje u objektnom modulu,
ali bi trebale biti na raspolaganju i drugim objektnim modulima.
2. Nedefinirani ili uvezeni simboli su funkcije ili varijable koje konkretni objektni modul
poziva ili na koje se referencira, ali nisu definirane u sklopu samog modula tj. pripadaju
nekim drugim objektnim modulima (programima).

Posao linkera je da razriješi referenciranje na nedefinirane simbole na način da pronađe koji


ih objektni kod (program) definira i zamjeni rezerviranu adresu sa stvarnom adresom
simbola.

Linkeri mogu uzimati objekte i iz tzv. gotovih kolekcija objekata – programskih biblioteka.
Prednost postojanja takve kolekcije objekata je ponovno korištenje koda napisanog od strane
drugih programera, s tim da program ne uključuje cijelu biblioteku već samo one objekte iz
biblioteke koji su mu potrebni.

Linker vodi brigu o smještanju objekata u adresnom prostoru programa, što može imati za
posljedicu premještanje koda koji preferira specifičnu adresu u odnosu na neku drugu. Kako
kompajler uglavnom ne zna gdje će objekt biti smješten, on obično pretpostavlja fiksnu
lokaciju. Izvršna verzija koju formira linker često traži dodatno adresno premještanje
kada se konačno učita u memoriju

Izvršni kod ili izvršna datoteka je datoteka čiji sadržaj računar razumije i interpretira
kao program. Obično sadrži binarno predstavljen skup strojnih instrukcija za specifični
procesor Većina operativnih sistema koristi specifičan princip imenovanja ovakvih datoteka.

Drugi način implementiranja programskog jezika jeste korištenje interpretera.


Interpreter analizira (interpretira) instrukciju po instrukciju (red po red) programa i izravno je
izvršava.

Interpreter je u biti program koji izvršava korake međukoda dok se izvršava na realnom
računaru, odnosno to je program koji zamjenjuje dvije posljednje faze kompajliranja na način
da izravno izvršava međukod.
Postoje dva opća tipa interpretera:
•Čisti
•Miješani.
Čisti interpreter svaki izraz tokenizira, raščlanjuje, semantički provjerava i interpretira pri
svkom izvršavanju.
Miješani interpreter prvo prevodi čitav program u međukod, ali samo jedanput po
izvršavanju, a onda dalje ponavlja interpretiranje međukoda bez daljnjeg prevođenja.

Programske paradigme:

● imperativno programiranje
● objektno-orjentisano programiranje
● funkcionalno programiranje
● logičko programiranje

Imperativno programiranje:

Algoritmi se prevode u programe pomoću dvije komplementarne ideje: proceduralne


apstrakcije i specifikacije korak po korak.

Osnovne osobine:

● Kontrolne strukture
● Ulaz/Izlaz
● Greške i upravljanje izuzecima
● Proceduralna apstrakcija
● Izrazi i pridruživanje
● Biblioteke i potpora za podatkovne strukture

Prednosti:

● mogućnost ponovnog korištenja istog koda na različitim mjestima unutar programa


● jednostavnije praćenje programskog toka
● osnova za razvoj modula, odnosno osiguranja strukturiranog pristupa

Kod velikih i složenih programa, da bi se osigurala čitljivost programa i olakšalo


njegovo razumijevanje i održavanje, modularnost postaje nužna. Ona se može
osigurati kroz procedure koje imaju striktno definirane ulazne i izlazne kanale, te vrlo
jasna pravila koji su tipovi ulaza i izlaza dozvoljeni ili očekivani. Ulazi se obično
specificiraju u obliku argumenata, dok su izlazi definirani kao povratne vrijednosti.
Proceduralno programiranje:
Zbog mogućnosti da odrede jednostavno sučelje, da budu same sebi dovoljne, da se mogu
ponovno koristiti, procedure su prikladne i za pisanje dijelova koda od strane različitih
programera, kao i za formiranje programskih biblioteka.

Modularnost u programiranju je jedan od osnovnih principa, neovisno o programskoj


paradigmi, iako ne postoji opća suglasnost o tome što je ustvari Modul.
Modul je skup jednog ili više bliskih programskih izraza koji imaju svoj naziv po kojem ih
ostali dijelovi sustava mogu pozvati, i poželjno je da imaju vlastiti poseban skup imena
varijabli.

Osnovne osobine:
● Modul je logički neovisna i zaokružena cjelina
● Moduli se mogu programirati i testirati neovisno
● Mogu se formirati moduli zajednički za sve
● Ispravak, testiranje i dokumentiranje je jednostavnije i brže
● Modul sadrži jednu neovisnu programsku funkciju
● Veze između modula trebaju biti jednostavne i vidljive
● Obrada podataka se programira neovisno o fizičkom memoriranju istih
● Modul u pravilu treba imati jednu ulaznu i jednu izlaznu točku
● Nakon izvršavanja modul treba vraćati kontrolu na mjesto pozivanja

Najosnovnije osobine, presudne za formiranje modula su:

● KOHEZIJA - stepen povezanosti UNUTAR modula. što veća


● SPAJANJE - stepen povezanosti IZMEĐU DVA modula. što manji broj veza

Struktuirano programiranje:

Strukturirano programiranje - podskup proceduralnog programiranja. Povijesno promatrano,


postoji nekoliko različitih tehnika ili metodologija vezanih za pisanje strukturiranih
programa, od kojih su najpoznatije:
• Jackson-ovo strukturirano programiranje koje je bazirano na povezivanju podatkovnih i
programskih struktura,
• Dijkstra strukturirano programiranje kod kojega je programska logika struktura sačinjena od
sličnih pod-struktura povezanih na ograničen broj načina. Na taj način se razumijevanje
programa svodi na razumijevanje svake pojedinačne strukture.
• Pristup koji je proizišao iz Dijkstra-inog koji također zagovara razdvajanje (dijeljenje)
programa na pod-sekcije s jednom točkom ulaza, ali u suprotnosti s konceptom jedne tačke
izlaza.

Strukturirano programiranje je specifičan način “pisanja” programa gdje se za


kreiranje logičke programske strukture primjenjuju standardizirani elementi.
Cilj: programiranje uz upotrebu standardiziranih elemenata i prema utvrđenim pravilima
povećava produktivnost, smanjuje greške,povećava čitljivost i olakšava testiranje i
održavanje programa.

Svaka logička programska struktura može se proizvesti od 3 osnovne:


● sekvencija
● selekcija
● iteracija

Objektno orijentisano programiranje:

Objektno orijentisano programiranje polazi od toga da se računalni program može promatrati


kao skup pojedinačnih dijelova, ili objekata, koji surađuju (rade) jedan s drugim, dok se pak
prema tradicionalnom shvaćanju program promatra kao skup funkcija, ili pojednostavljeno
kao lista računalnih instrukcija.
Svaki objekt ima sposobnost primanja poruke, obrade podataka i slanja poruke drugim
objektima, iz čega proizlazi da se svaki objekt može promatrati kao mali neovisni stroj ili
glumac s različitom ulogom, odnosno odgovornošću.

Osnovni koncepti:
● Objekat
● Klasa
● Nasljeđivanje
● Enkapsulacija
● Polimorfizam

Objekat može biti bilo što sposobno za omogućavanje ograničenog skupa korisnih servisa
(usluga). Svaki objekat ima stanje, ponašanje i identitet.
Svaki objekat ima pristup bilo kojem znanju potrebnom za izvršavanje njegovih usluga, što
ne znači da objekt sadrži tu informaciju (znanje), već da joj može prići pitajući neki
drugi objekt.
Uz objekt se vežu sljedeći pojmovi:
- odgovornost
- poruke
- protokol

Odgovornost objekta - servis za koji se objekt “složio” ili mu je dodijeljen za izvršavanje.


Objekti su zaduženi za izvršavanje specifičnih zadataka, a odgovornost se koristi kako bi se
otkrilo ko (koji objekat) je zadužen za zadatak, bez potrebe da se razmišlja o strukturi objekta

Poruka je formalna komunikacija poslana od strane jednog objekta drugom a koja zahtjeva
neki servis (uslugu).
Pojam protokol se koristi za onaj dio sučelja koji prikazuje poruke na koje je objekt spreman
odgovoriti.
Skup poruka na koje objekat odgovara i mijenjanje stanja objekta koje se bilježi – naziva se
sučelje (engl. interface).
Klasa je apstrakcija (generički opis) za skup objekata s istim atributima i
operacijama, odnosno to je predložak (engl. template) za kreiranje objekata.
Zbog toga se kaže da je objekat instanca (pojavni – konkretni oblik) klase.

Nasljeđivanje mehanizam koji omogućuje da klasa (podklasa) redefinira (promijeni)


ponašanje i osobine neke druge klase (nadklase). Podklasa ima sve što i nadklasa, ali i još
nešto što je specifično samo za nju.
Nasljeđivanje se može definirati i kao nadređena-podređena relacija između klasa u kojoj
podređena (dijete) klasa ima isto ponašanje (odgovornosti) kao i nadređena (roditelj) klasa i
plus najmanje jedno dodatno.

Enkapsulacija osigurava da kod izvan klase (tj. Druga klasa) vidi samo funkcionalne, ali ne i
implementacijske detalje klase. “skriva” ponašanje objekta od njegove implementacije,
odnosno odvaja kako objekt izgleda od toga kako implementira svoje ponašanje. jamči da
nitko osim objekta ne može znati kako “iznutra” taj objekt izgleda, tj. na koji način izvršava
svoj zadatak. Rezultat enkapsulacije je da svaki objekt prema „vanjskom svijetu“, tj ostalim
klasama pokazuje svoje sučelje tj. Skup poruka (metoda) na koje odgovara.

Polimorfizam potječe od grčkih riječi poly – mnogo i morph-oblik, što znači mnogo oblika.
U objektno orijentiranom programiranju to znači da jedna poruka može uzrokovati različite
oblike odgovora. Polimorfizam je ponašanje koje se mijenja ovisno od toga koja klasa ga
uzrokuje, što znači da dvije ili više klasa mogu reagirati potpuno različito na istu poruku,
odnosno da je primatelj poruke odgovoran za njenu interpretaciju.

Funkcionalno programiranje:

Nastaje 60-tih godina prošlog stoljeća. Rezultat potrebe istraživača umjetne inteligencije,
simboličke računalne obrade, dokazivanja teorema, sustavi bazirani na pravilima, obrada
prirodnog jezika ...
LISP – prvi funkcionalni programski jezik
Osnovne karakteristike:
– Računarska obrada se promatra kao matematička funkcija koja preslikava ulaze u izlaze
nema navođenja stanja, te ni potrebe za pridruživanjem,
– Efekt petlje se postiže rekurzijom

Logičko programiranje:

Nastaje 70-tih godina prošlog stoljeća.


Osnovne osobine:
– Programer deklarira cilj računalne obrade, umjesto detaljnog algoritma pomoću kojega se
taj cilj može ostvariti
– Ciljevi se izražavaju kao kolekcije izjava, ili pravila o izlaznim rezultatima i ograničenjima
računalne obrade
DVA područja primjene:
- Umjetna inteligencija
- Pronalaženje podataka u bazama podataka

Hisotroja Programskih jezika:

Historija programskih jezika je vezana za tekstilnu industriju. Francuz Joseph Marie Charles
Jacquard, gledajući kako krojači svaki put iznova podešavaju mašinu , 1801. Dizajnira
mašinu koja čita instrukcije s bušenih kartica.
Iako je bilo riječ o jednostavnom programiranju, mogle su se primijetiti dvije bitne ideje:
- raščlanjivanje kompleksnih zadaća na niz nedvosmislenih i konačnih koraka koje stroj može
izvesti
- mašina na temelju programa može izvršavati ponavljajuće zadatke

Charles Babbage se naziva ocem računara u današnjem smislu te riječi. On je izumio


analitičku mašinu, koja se smatra prvim računarom. Sastojala se od uređaja za:
● Primanje instrukcija
● Izvršavanje instrukcija
● Pohranjivanje instrukcija
● Ispis informacija na papir

Prvi programerka je bila Ada Lovelace Byron.


Ada je napisala skupove instrukcija koje bi se mogle izvršavati na Analitičkom Stroju.

Pet generacija programskih jezika:

● mašinsi
● asembler
● proceduralni
● problemski orijentiran
● Prirodni

Mašinski programski jezik:


- Definisan sklopovskim dizajnom svakog računara
- Sastoji se od stringova brojeva (ograničenih na 0 i 1) koji računalu kazuju kako izvršiti
elementarne operacije jednu po jednu.

Asembler programski jezik:


Kratice na engleskom jeziku za prikaz elementarnih operacija (mnemonički kod)
- Strojno ovisan
- Program napisan simbolički – izvorni program
- Prevođenje u mašinski jezik
Proceduralni programski jezici /Viši programski jezici (treća generacija):

- Naredba je izraz kojim se izvodi niz operacija na sklopovskoj razini računara


- Sintaksa je skup načela pomoću kojih se za niz simbola utvrđuje pripadaju li ili ne nekom
jeziku. Za programske jezike sintaksa točno definira redoslijed elemenata u naredbama
jezika.

Problemski orijentirani programski jezik/ Jezici četvrte generacije:

• upitni jezici (SQL)


• Aplikacijski generatori - Komponente ovih jezika su baze podataka s vlastitim upravljačkim
sistemom, rječnik podataka, te alati koji osiguravaju zaštitu baze podataka. - Brzo učenje i za
neprogramere
- Orijentirani su rezultatima (izlazima). Potrebno je opisati problem koji rješavamo umjesto
načina postizanja rješenja
- interaktivni

ALGORITAMSKI PRISTUP RJEŠAVANJU PROBLEMA


Algoritam- konačan niz nedvosmislenih koraka koji su izvodljivi i ako se slijede, dovode do
rješenja problema.
Algoritam se može opisati neformalno ili matematički rigorozno. Neformalno se opisuje kao
osnovni skup koraka koji se moraju izvršiti da bi se došlo do određenog, zadanog rezultata.
Prema rigoroznoj definiciji algoritma, slijed koraka koji se izvršavaju mora imati 5 važnih
osobina:
1. KONAČNOST- nakon konačnog broja koraka algoritam će se sigurno završiti (ako su
cjelobrojne vrijednosti konačne dužine)
2. DEFINIRANOST- svaki korak u slijedu je jasan i nedvosmislen
3. ULAZ- 1 ili više vrijednosti na raspolaganju prije nego algoritam započne s
izvršavanjem
4. IZLAZ- 1ili više kvantitativnih vrijednosti rezultat izvršavanja algoritma nad ulaznim
vrijednostima
5. EFEKTIVNOST- svaki pojedini korak algoritma mora biti završen za neko vrijeme
konačne dužine
Programski jezik je kompletan ako je sposoban za implementiranje bilo kojeg algoritma.
POJAM ALGORITMA
Abdullah Muhammed bin Musa al-Khwarizmi – algorism- izvorno značenje, pravila za
izvršavanje aritmetike upotrebom arapskih brojeva
Algoritam podrazumijeva konačan skup dobro definiranih instrukcija za izvršavanje nekog
zadatka koji će. Za dano početno stanje, završiti odgovarajućim prepoznatljivim konačnim
stanjem.
Prvi algoritam za računar je napisala Ada Byron.
Turingov stroj (1937.) imao je svrhu da omogući formalnu i rigoroznu definiciju algoritma, te
je on mogao da pokaže mogućnosti i ograničenja algoritma.
Turing pokazao mogućnosti i ograničenja algoritma. Današnji kriterij algoritma je da može
biti implementiran na Turingovom stroju ili nekom ekvivalentnom formalizmu.Za ilustriranje
i pojašnjavanje algoritma koristi se primjer recepta.
Za ilustriranje i pojašnjavanje algoritma, često se koristi primjer recepta(upute za korake).
Algoritmi obično imaju korake koji se ponavljaju, zahtijevaju odlučivanje, logičko ili na bazi
usporedbe.Ako je algoritam loše napisan, nemoguće je korektno izvršavanje algoritma.
Algoritmi predstavljaju osnovni način na koji računari obrađuju informacije.
PREDSTAVLJANJE ALGORITMA
Algoritmi se mogu predstaviti na različite načine:
1. PRIRODNI JEZIK- narativni opis algoritma. Svaki algoritamski korak se opisuje
prirodnim jezikom.
2. PSEUDOKOD- narativni oblik prikaza algoritamskih koraka pri čemu se koriste
prirodni, neformalizirani jezik zajedno sa formaliziranim programskim strukturama.
On odgovara redoslijedu pojavljivanja programskih izraza pri konkretnoj
implementaciji(u programski jezik). Jednostavan je i djelimično formaliziran.Za
pseudokod (za razliku od prirodnog jezika) koristimo kontrolne ili algoritamske
strukture, npr strukture redoslijeda i uvjeti se pišu malim slovima, dok se velikim
slovima naglašavaju osnovni blokovi koda(START i END) i osnovne algoritamske
strukture(IF, ELSE, ENDIF, DO WHILE, DO UNTIL).Pseudokod omogućava
fokusiranje na korake koji su neophodni.
3. DIJAGRAM TOKA- slikovno, grafičko predstavljanje algoritma. Algoritamski koraci
se prikazuju uz pomoć linija, strelica i grafičkih oblika. Dijagram toka se lako prevodi
u bilo koji programski jezik. Da bi bio jasniji, kratke instrukcije se pišu unutar svakog
simbola kako bi dale detaljniji opis zadatka.
4. NASSI-SCHEIDERMANN- strukturirani ili iteracijski dijagrami toka. Temelj ovog
dijagrama je pravougaonik i njegova podjela uvijek daje više pravougaonika koji se
opet mogu dalje dijeliti. To znači da su ovi dijagrami ugniježdeni jedan unutar
drugog.

OSNOVNE ALGORITAMSKE STRUKTURE


Pod osnovnim algoritamskim strukturama podrazumijevamo:

 Sekvencija-slijed algoritamskih koraka koji se izvršavaju jedan za drugim (slika


lijevo)

 Selekcija-uvjetno grananje, gdje o ispunjenosti uvjeta ovisi koji će se koraci izvršiti


(slika desno)

 Iteracija–ciklična struktura koja podrazumijeva višestruko izvršavanje skupa


algoritamskih koraka(do while, do until, for)

o DO WHILE-pre-test iteracija- ciklična struktura koja omogućava da se određeni


algoritamski koraci ponavljaju ovisno o zadanom uvjetu. Ovo je kombinacija
sekvencije i selekcije s tim da se prvo izvršava selekcija(provjera da li je zadani uvjet
ispunjen) a zatim sekvencija.
o DO UNTIL-post-test iteracija-ciklična struktura koja se sastoji od sekvencije i
selekcije s tim da se prvo izvršava sekvencija (izvršavaju se određeni koraci) a zatim
selekcija(provjera ispunjenosti uvjeta).
o FOR-ciklična struktura koja podrazumijeva da je broj iteracija unaprijed poznat.
Često su potrebne ciklične strukture gdje se određena vrijednost broji od neke početne
pa sve do neke krajnje vrijednosti.

IZGRADNJA ALGORITMA
Zajedničko za izgradnju svakog algoritma jeste izgrada općeg plana i općeg niza koraka za
rješavanje algoritamskog problema. Za izradu programa, potrebno je precizno, jasno i
nedvosmisleno definiranje svakog koraka. Algoritam nije upotrebljiv ako nije u postpunosti
ispravan, tj u svim svojim dijelovima i u svim okolnostima.
Najčešći pristup razvoju algoritma je odozgo prema dolje, tj profinjenje u koracima.Prema
ovom pristupu, algoritamski problem se dijeli u određen broj podproblema, podprocesa koji
opisuju dijelove problema, tako da se algoritam izvršava dio po dio.
Opći plan razvoja algoritma:
1. Definirati korake algoritma
2. Ispitati svaki korak algoritma
3. Ispitati granične uvjete
Svaki algoritam bi trebao imati sljedeće sekcije (dijelove):
 Zaglavlje:Naziv algoritma (naslov)
 Opis algoritma: Kratak opis algoritma
 Deklaracija: Kratak opis varijabli

 Tijelo:Niz koraka
 Kraj algoritma: Naredba kraj
TIPOVI PODATAKA
POHRANJIVANJE PODATAKA U RAČUNARSKOJ MEMORIJI
Osnovna arhietktura današnjih računara bazirana je na von Neumannovom modelu računara u
kome su programske instrukcije i podaci zajedno pohranjeni u memoriji. Razlikujemo
memorijske razine:
 Primarna
 Sekundarna
 Tercijarna
 Neaktivna ili odvojena

Primarnu memoriju čine RAM, registri i priručna memorija.Središnja procesorska jedinica


CPU može izravno pristupati jedino primarnoj memoriji i to vrši preko memorijske
sabirnice(to su dvije sabirnice-adresna i podatkovna).Pomoću adresne sabirnice se šalje broj
željene lokacije, a pomoću podatkovne se čitaju ili pišu podaci. CPU kontinuirano čita
instrukcije i podatke iz ove memorije i izvršava ih odgovarajućim slijedom.
a) Registri su smješteni u prosecoru. Svaki registar pohranjuje riječ dužine 32 ili 64 bita.
CPU daje instrukcije aritmetičkoj i logičkoj jedinici za izvršavanje različitih izračuna
i operacija nad podacima smještenim u registrima. Registri su najbrži oblik računarske
memorije. Kompilatori također direktno pristupaju registrima s tim da ih mogu čitati
ili natrag pohranjivati podatke u registre.
b) Priručna memorija (cache memory) je međurazina između ultra brzih registara i
znatno sporijeg RAM-a. Ova vrsta memorije povećava performanse računara.
Najčešće korištene informacije iz RAM-a se dupliciraju ovdje, jer većina programa
teži pristupu istim ili susjednim memorijskim lokacijama. To jeste, programske petlje
tendiraju pristupu istoj lokalnoj varijabli u svakoj iteraciji i sekvencijalnom prolazu
kroz polja.
c) RAM memorija nije trajna. Instrukcije i podaci u RAM-u se gube prilikom gašenja
računara.
Svaki računar ima dio trajne primarne memorije koji sadrži mali program za pokretanje
računara(BIOS- basic input/output system).Ovaj tip memorije je samo za čitanje ROM.

Sekundarna memorija- vanjska memorija, CPU joj ne može izravno pristupiti, trajna
memorija, koriste se ulazno/izlazni kanali putem kojih se prebacuju traženi podaci. Primjer
ove memorije je hard disk.
Tercijarna memorija- robotizirani mehanizmi koji postavljaju i skidaju izmjenjive masovne
medije za pohranu podataka s odgovarajućih uređaja. Ovi podaci se često kopiraju na
sekundarnu memoriju prije upotrebe. Ona se koristi za automatiziranje ogromnih arhiva
podataka, a rijetko za pristup podacima. Tipični primjeri su upotrebe biblioteke traka i optički
diskovni automati.
Neaktivna memorija poznata i kao odvojena. Podrazumijeva pohranu podataka na medije ili
uređaje koji nisu pod kontrolom CPU-a. Čovjek sam mora da poveže ovu vrstu memorije sa
računarom. Danas se dosta sekundarne i tercijarne memorije koristi u obliku odvojene
memorije.
Općenito, glavna memorija se može shvatiti kao skup elektroničkih prekidača-tranzistora.
Može da ima dva stanja: uključeno(1) i isključeno(0).Logičkim kombinovanjem prekidača, tj
nula i jedinica, možemo da predstavimo podatke u računaru. Glavna memorija se može
zamisliti kao naizgled beskonačni niz odijeljenih blokova organiziranih u grupe od po
osam(1Byte=8bit).Svaki blok može da primi samo 0 ili 1, a svaka grupa od po 8 blokova ima
jedinstveni broj koji se naziva memorijska adresa. CPU pristupa podacima u memoriji
zahvaljujući memorijskoj adresi(zna adresu i njenu veličinu). Rezervisanje memorije za nove
podatke vrši se zahvaljujući poznavanju tipa podataka i varijabli.
VARIJABLA
Varijabla je pridruživanje imena memorijskoj adresi, tj vrijednost pridružujemo varijabli.
Svaka varijabla ima svoj tip, vrijednost i trajanje. Varijabla se kroz program može ažurirati to
jeste njena se vrijednost može mijenjati.
Tip varijable je imenovani skup(npr cjelobrojni) svih vrijednosti koje varijabla može
poprimiti i za koji su dopuštene odgovarajuće operacije.
DEFINIRANJE TIPOVA PODATAKA
Tip podataka označava potrebnu količinu memorije za pohranu podatka, kao i vrstu podatka
koji će biti pohranjen. Tip podataka se definira i kao skup vrijednosti i operatora koji se mogu
izvršavati nad tim vrijednostima. Tipovi podataka imaju za cilj dati određeno semantičko
značenje skupu bitova.
Osnovne funkcije koje tipovi podataka omogućavaju su:

 Sigurnost upotreba tipova podataka može omogućiti kompilatoru da otkrije besmislen


ili možda pogrešan kod.

 Optimizacija je statična provjera tipova podataka koja može osigurati korisne


informacije za kompliator.

 Dokumentacija- kod ekspresivnijih sistema tipova podataka, tip podataka može služiti
kao oblik dokumentacije, jer može ilustrirati namjeru programera.

 Apstrakcija- Tipovi podataka omogućavaju programerima da razmišljaju o


programima na višoj razini, ne zamarajući se njihovom implementacijom na
niskoj(strojnoj) razini
Greška tipa podataka je bilo koja greška koja se pojavljuje zbog pokušaja izvođenja neke
operacije nad tipom podataka za koje nije definirana.
Sustav tipova je precizna definicija povezivanja između tipa varijable, njenih vrijednosti i
mogućnosti operacija nad tim vrijednostima.
Provjera tipa podataka može se vršiti u vrijeme kompiliranja(jezici statičkog tipa podataka)
ili u vrijeme izvršavanja programa(jezici dinamičkog tipa podataka).
Tipovi podataka su:

 Elementarni, primitivni osnovni tipovi podataka koji su ugrađeni, oni su neodvojivi


dio programskog jezika.

 Složeni, korisnički definirani, napravljeni na bazi elementarnih tipova podataka.

 Apstraktni tip podataka, prave se enkapsulacijom tj povezivanjem konstanti, tipova


podataka, varijabli i metoda u novi entitet. Npr T=<W,O> (W-vrijednosti, O
operatori)
Elementarni tipovi podataka – tipovi podataka koje program nudi kao osnovne za izgradnju
složenih korisnički definisanih tipova podataka. Većina programskih jezika ne dopušta
programima da mijenjaju ponašanje ili osobine elementarnih tipova podataka.
Memorijske jedinice elementarnih tipova podataka:

 Byte- 8 bita

 Polu-riječ 16 bita

 Riječ 32 bita

 Dvostruka riječ 64 bita


 Četverostruka riječ 128 bita

Elementarne tipove podataka možemo podijeliti na:


 Znakovni tip
 Numerički tipovi
 Logički tip

Znakovni tip podataka


Osnovni znakovni tip podataka je znak-char. Znak je jedinica informacije koja odgovara
slovu ili simbolu pisanog oblika prirodnog jezika. Znak je definiran kao član skupa elemenata
koji se koristi za organizaciju, kontrolu ili predstavljanje podataka. Standardi ASCII(1967
uveden, zadnje ažuriranje 1986.), Unicode i ISO/IEC 10646. I znakovni tip se u računaru
predstavlja brojevima.
Numerički tipovi podatka
Mogu se podijeliti na: cjelobrojne i tip podataka sa pomičnim zarezom.
Pojam cjelobrojni odnosi se na bilo koji tip podataka koji može predstaviti neki podskup
matematičkih cjelobrojnih vrijednosti. Mogu biti označeni signed i neoznačeni unsigned.
Neoznačeni brojevi se predstavljaju u rasponu od 0 do 2n-1.Označeni se predstavljaju u
rasponu od -2n-1-1 do 2n-1-1. Negativni brojevi se prikazuju uz pomoć 2. komplementa,
magnituda znaka i komplementom od 1. (byte 8, short 16, int 32, long 64 bita)
Tip podataka s pomičnim zarezom je digitalno predstavljanje broja koji pripada nekom
podskupu racionalnih brojeva. Predstavlja se kao proizvod binarnog broja s jednim brojem
koji nije nula lijevo od decimalne tačke i odgovarajućeg eksponenta od 2. Za jednostruku
preciznost koristimo: jedan bit za predznak(+, -), 8 bita za eksponent(do +127), 32 bita za
mantisu(binarno djeljivi dio u opsegu od 0 do 1).
Logički tip podataka
Logički ili boolean tip podataka je elementarni tip podataka koji ima dvije vrijednosti 0 ili 1, i
koristi se za označavanje istine ili laži.
Boolean algebra:
o konjukcija(AND)
o disjunkcija(OR)
o jednakost(=)
o negacija(NOT)
o i dr.
Tipovi podataka koji rezerviraju više bajtova memorije koriste i više memorijskih adresa, a
oznaka se odnosi na 1. bit.

Složeni tipovi podataka


Složeni tipovi podataka sastavljeni su od prostih i/ili složenih tipova podataka. U složene
tipove ubrajaju se: enumeracija, string, polje, stog, lista, pokazivač, klasa, struktura, stablo,
redovi isl.
Enumeracija- složeni tip podataka snažno povezan s cjelobrojnom vrijednosti. Ovo
omogućava da se varijabli pridruži naziv umjesto vrijednosti.
String- Niz znakova naziva se string. Predstavlja se (' ') ili ('' '').
Pokazivač- vrijednost koja predstavlja memorijsku adresu ili referencu koja omogućava
određenu razinu zaobilaženja u referenciranju memorije. Postoje 2 vrste u C: adresa operatora
uzima argument varijable i vraća njenu adresu, a operator derefenciranja uzima reference i
producira vrijednost reference.
Polje- način da se koristeći isti naziv referencira niz memorijskih lokacija. Identificiranje se
vrši pomoću indeksa, a ne pomoću varijable. Vrijednost indeksa polazi od 0 ka većim
brojevima. Polja olakšavaju rad s većim količinama podataka i ubrzavaju rad jer su elementi
polja smješteni jedan uz drugi u računarskoj memoriji.Deklariranje polja se sastoji od: tipa
podataka, naziva polja i ukupnog broja elemenata polja. Postoje jednodimenzijska i
višedimenzijska polja. Prvi skup elemenata polja se naziva primarno polje, a sva ostala su
podpolja. Referenciranje na indeks prve dimenzije pokazuje na memorijsku adresu prvog
elementa te dimenzije.

IMPLEMENTIRANJE IMPERATIVNE PARADIGME

Osnovne osobine imperativnog programiranja su:


 pridruživanje
 deklariranje varijabli
 izrazi
 Strukture za upravljanje programskim tokom
 proceduralna apstrakcija
 ulaz i izlaz
 greške i upravljanje izuzecima
 biblioteke i potpora za podatkovne strukture
1. IZRAZI I OPERATORI
Izraz je kombinacija literala, varijabli, operatora, poziva funkcijama koji kao rezultat
daju određenu vrijednost koja se onda može koristiti u bilo kojem drugom kontekstu
unutar programa. Kako je izlazni rezultat izraza vrijednost, slijedi da se izrazi
evaluiraju po vrijednosti. Primjer izraza je:
a+b
U ovom izrazu a i b su operandi dok je + operator.
Pod operatorom se općenito podrazumijeva simbol koji označava operaciju koja će se izvršiti
na jednu ili više vrijednosti a rezultat te operacije neka druga vrijednost.
Izraz može sadržavati i poziv funkciji, a primjer takvog izraza je:
moja_funkcija(a,b,d)
Općenito gledajući, programski jezici mogu specificirati koju notaciju koristi pozivi funkcija
odnosno operatora. Te notacije mogu biti tipa prefix, infix i postfix. ovi pojmovi se odnose na
to pojavljuje li se naziv funkcije odnosno operatora prije, između ili nakon argumenata.
Većina imperativnih jezika koristi infiks notacije za binarni operatore i prefiks notacije za
unarne operatore i druge funkcije.
Prioritet operatora i asocijativnost variraju od jednog programskog jezika do drugog. Bez
pravila asocijativnosti i prioriteta infiks notacija je po prirodi neodređena jedan od načina
eliminiranja neodređenosti je pridruživanja asocijativnosti i prioriteta operatorima.
Drugi način eliminiranja semantičke neodređenosti je upotreba Poljske notacije jer je njena
semantika po prirodi određena. u Poljskoj prefiks notaciji binarni operator se uvijek piše
ispred svoja dva operanda.
Tako na primjer za dato stablo izraza prefiks notacija se može generirati upotrebom “prefiks
kretanja” po stablu.
1. generirati vrijednost čvora
2. posjetiti lijevo poddrvo
3. posjetiti desno poddrvo

Druga varijanta jeste Poljska postfix notacija u kojoj operator uvijek dolazi iza svojih
operanada.
Izraz za ovu notaciju se može zapisati kao:
ab + cd *-
Algoritam za ovaj oblik kretanja bi bio:
1. posjetiti lijevo poddrvo
2. posjetiti desno poddrvo
3. generirati vrijednost čvora
Jedno od ograničenja Poljske notacije je da se isti simbol ne može koristiti za operacije sa
različitim brojem argumenat.

Druga, Cambridge notacija ovaj problem izbjegava tako što u toj notaciji operatori uvijek
dolazi ispred operanada, a čitavi izrazi se zatvaraju u zagrade.
(-(+ab)(*cd))
Prednost Cambridge prefiks notacija je da operatori kao što su - i + postaju prirodno n-narni.

Operatori se mogu grupisati na:


 aritmetičke operatore
 operatore usporedbe
 logički operatore
Aritmetički operatori se koriste u matematičkim izrazima na isti način kao i u algebri.
aritmetički operator se mogu primijeniti na numerički tip podataka.

Operator uvećanja povećava vrijednost za jedan dok operator umanjenja umanjuje vrijednost
za jedan.
operatori uvećanja i umanjenja su posebni po tome što se mogu pojaviti u dvije notacije:
 postfiks, kada slijede iza podatka
 prefiks, kada prethode podatku
Naime, ako ovi operateri koriste prefiks notaciju, to znači da se vrijednost varijable i
povećava, odnosno smanjuje, prije nego se upotrijebi u izrazu. Dok ako koristi postfix
notaciju, znači da se vrijednost varijable ponovo koristi u izrazu, a zatim se povećava
odnosno smanjuje.

Operatori poređenja utvrđuju odnos, porede jednu vrijednost sa drugom. Tipični operatori
usporedbe su veće, manje, jednako, različite i sl. Rezultat operatora usporedbe je uvijek
logička vrijednost to jest boolean tip podatka. Ovi operatori se najčešće koriste u izrazima sa
naredbom if i u različitim kontrolnim strukturama.

Logički operatori se mogu koristiti samo s podacima boolean tipa, a konačni rezultat je
također tipa boolean.
Većina programskih jezika koriste dva specifična logička operatora konjukcije i disjunkcije,
pod zajedničkim nazivom kratkospojni operatori .
Naime, prilikom utvrđivanja istinitosti logičkih izraza, radi se tzv. kratkospojna evaluacija
što podrazumijeva da se nikad ne izračunava dio izraza koji ne utječe na rezultat.

Java također koristi i specifični trojni ili tenarni operator ? : koji koristi infiks notaciju za
višestruke operatore. Osnovna osobina ovog tipa operatora je da može zamijeniti određene
vrste uvjetnih izraza. Opći prikaz Java tenarnog operatora je:
izraz1 ? izraz2 : izraz3
Ako izraz1 ima vrijednost TRUE onda se izračunava izraz2 ,u suprotnom ako je vrijednost
za izraz1 FALSE, izračunava se izraz3.
Konačni rezultat operatora ?: jeste rezultat onog izraza koji se izračunava (iraza2 ili
izraza3). Bitno je napomenuti da rezultat računanja izraza izraz2 i izraz3 mora biti vrijednost
istog tipa podataka, kao i da mora označavati memorijsku lokaciju određenog tipa upisivao u
vrijeme izvođenja.

Upotreba više različitih operatora u jednome izrazu, bez korištenja zagrada, može dovesti do
neodređenosti izraza. Zbog toga, u svim programskim jezicima, ako se koristi infix notacija,
izbor između alternativnih evaluiranih redoslijeda ovisi o dva pravila: prioritetu izvršavanja i
asocijativnosti operatora. U slučaju da se koristi prefiks ili postfix notacija, ova pravila nisu
bitna za konačni rezultat.
Pravilo asocijativnosti određuje da li se niz operatora istog prioriteta grupira ulijevo ili
udesno. osnovni aritmetički operatori gotovo uvijek imaju asocijativnost slijeva u desno,
međutim, uvijek se preporučuje upotreba zagrada.

2.PRIDRUŽIVANJE
Koncept pridruživanja je temeljni koncept imperativne paradigme, iako ga implementiraju i
gotovo svi objektno orijentirani programski jezici.
Pridruživanje vrijednosti varijabli općenito se prikazuje kao:
varijabla = vrijednost
gdje na lijevoj strani može biti jednostavna varijabla ili element polja, odnosno bilo koja l-
vrijednost. S desne strane operatora pridruživanja nalazi se bilo koji izraz odgovarajućeg tipa.
Taj izraz se, suprotno od l-vrijednosti naziva r-vrijednost. Svaka l-vrijednost može imati
ulogu r-vrijednosti, ali obrnuto ne vrijedi.
Pridruživanje se obavlja s desna na lijevo.
U modelu pridruživanja po referenci, svaka varijabla je l-vrijednost. Kada se pojavi u
kontekstu koji očekuje r-vrijednost, mora biti diferencirana da bi dobila vrijednost koju
pokazuje (referencira).
Pošto pomoću pridruživanja omogućavaju dodjelu vrijednosti varijabli, imperativni
programski jezici ne osiguravaju uvijek način za specificiranje inicijalne, odnosno početne
vrijednosti varijabli prilikom njene deklaracije.
Nehotična upotreba neinicijaliziranih varijabli je jedna od najčešćih programskih grešaka, a
najlakši način da se to izbjegne jeste dodijeliti vrijednost svakoj varijabli pri prvom
pojavljivanju, odnosno deklariranju.
U slučaju da varijabli nije dodijeljena inicijalna vrijednost pri njenom deklariranju, većina
programskih jezika ih specificira(engl. default value).
Za lokalne varijable notacija definitivnog pridruživanja onemogućava upotrebu
neincijaliziranih varijabli. To bi značilo da svaki mogući put do izraza mora dodijeliti
vrijednost svakoj varijabli i tom izrazu. ovo je izrazito konzervativno pravilo i može ponekad
proglasiti pogrešnim neke programe, iako oni nikada ne bi stvarno koristili neinicijalizirane
varijable. inicijalizacija se interpretira kao poziv funkciji konstruktora.

3. STANJE PROGRAMA
Stanje programa je povezivanje svih aktivnih objekata sa njihovim trenutnim vrijednostima.
Za stanje programa su značajna dva mapiranja:
 uparivanje aktivnih objekata sa specifičnim memorijskim lokacijama
 uparivanje aktivnih memorijskih lokacija sa njihovim trenutnim vrijednostima
Stanje programa se posmatra kao mapiranje, od deklariranje varijabli do njihovih trenutno
dodijeljenih vrijednosti u nekoj tački tokom izvršavanja programa. Stanje programa je uvijek
povezano sa određenom programskom instrukcije i za svaku programsku varijablu prikazuje
njenu trenutnu vrijednost.
Svako pridruživanje mijenja stanje programa, a kako test while petlje nema popratnih
efekata on ne može promijeniti stanje programa.

3. UPRAVLJANJE PROGRAMSKIM TOKOM


Selekcija ili grananje osigurava promjenu toka izvođenja programa na osnovu ispunjenja
zadanog uvjetaUpravljanje programskim tokom je osobina imperativne paradigme.
Programske naredbe grupišu se u tri strukture
1. naredbe sekvencije
2. naredbe selekcije ili grananja
3. iterativne naredbe
 Sekvencija

Sekvencija je osnovni način kontrolisanja redoslijeda u kojem se pojavljuju popratni efekti


odnosno pridruživanje. Sekvencija podrazumijeva da kada jedna naredba slijedi drugu unutar
programa, prva naredba se izvršava prije druge, odnosno naredbe se izvršavaju onim slijedom
kako su u programu napisane.
U većini imperativnih jezika lista naredbi može biti zatvorena između sljedećih naredbi ili
simbola:
 BEGIN...END
 {...}
Uobičajeni naziv za navedeni tipove naredbi ili simbola je delimiteri ili graničnici. Takva
delimitirana lista naziva se složena instrukcija.

 Selekcija

Selekcija ili grananje osigurava promjenom toka izvođenja programa na osnovu ispunjenja
zadanog uvjeta, izračunavanja nekog izraza ili stanja određene varijable.
U većini programskih jezika postoje dva oblika naredbi koji implementiraju selekciju a to su:
1. if
2. case/switch
Programski jezik Java podržava oba oblika kroz naredbe if i switch i te naredbe omogućavaju
upravljanje tokom programa na osnovu uvjeta koji su poznati samo u trenutku izvršavanja
programa.

1. Naredba IF
Naredba if je naredba za uvjetno grananje ili selekciju. Uvjetna naredba se koristi za odabir
alternativnih puteva tokom izvršavanja programa. opći oblik naredbe if može se prikazati na
sljedeći način:
IfNaredba-> if (izraz) naredba1 [esle naredba2]
ELSE nije obavezni dio if naredbe, što znači da se if naredba može napisati i bez korištenja
pojma else. Može se reći da naredba if radi po slijedećem principu:
if (ako)je uvjet TRUE (istinit) izvršava se naredba1, else(inače, ako je uvjet
FALSE) izvršava se naredba2

Unutar jedne naredbe if može se nalaziti jedna ili više drugih if naredbi. U tom slučaju se
govori o ugniježdenim if naredbama a opći prikaz za veći broj ugniježdenih if naredbi je:
IfNaredba-> if Izraz then Naredbe
{else if Izraz then Naredbe}
[else Naredba]
end if

Kod niza ugniježđeni if naredbi one se izvršavaju odozgo prema dolje. Ako je uvijet neke od
if naredbi ispunjen, tj. istinit, izvršava se naredba vezana za taj uvjet a ostale if naredbe u nizu
se preskaču i izvršava se prva sljedeća naredba koja dolazi iza niza if naredbi. Ako pak ni
jedan od uvjeta nije ispunjen, to jest svi su neistiniti, izvršava se naredba koja se nalazi iza
posljednjeg else. Za taj posljednji else se može reći da predstavlja podrazumijevanu akciju, a
ako nema ti tog krajnjeg else, program nastavlja sa prvom sljedećem naredbom što znači da
niz if nije uzrokovao nikakvu promjenu.

2. Naredba SWITCH
Naredba switch osigurava alternativnu sintaksu za specijalni slučaj ugniježdenih if naredbi.
Ona omogućava grananje programa na način da se na osnovu vrijednosti određenog izraza
kontrola programskog toka usmjerava na određeni dio programskih naredbi.
Ugniježdene if naredbe se mogu zapisati pomoću switch naredbe (pogledati stranu 135).

Vrijednost izraza se upoređuje sa svakim literalom iz naredbi case . Ako se pronađe literal
identične vrijednosti, izvršava se niz naredbi koje slijede iza te naredbe case, a ako se ne
pronađe niti jedan literal čija bi vrijednost odgovarala vrijednosti izraza, izvršava se niz
naredbi za default. Međutim default nije obavezan za switch naredbu što znači da ako nema
defaulta, nijedna vrijednost literala se ne poklapa sa vrijednošću izraza i programski tok se
nastavlja s prvom sljedećom naredbom iza naredbe switch.
Naredbe switch također mogu biti ugniježdene jedna unutar druge. Za razliku od naredbe if
koja može provjeriti svaki logički izraz, switch naredba samo provjerava postojanje
jednakosti između vrijednosti izraza i jednog od case literala.
Naredba switch je obično mnogo efikasnija od niza ugniježdenih if naredbi. Naime, kada
prevodi naredbu switch kompilator može pregledati svaki literal u naredbama case i sastaviti
takozvanu “tablicu skokova” koju će koristiti za biranje puta izvršavanja programa zavisno o
vrijednosti izraza. Međutim, kada je riječ o nizu ugniježdenih if naredbi kompilator ne
raspolaže nikakvim sličnim predznanjima.

 ITERACIJA
Iteracija ili petlja se koristi u imperativnoj paradigmi dok je rekurzija bliža funkcionalnoj i
objektnoj paradigmi. Ovisno o mehanizmu koji se koristi za određivanje broja ponavljanja tj.
iteracija, razlikuju se dva osnovna tipa iteracija:
1. logički kontrolirana
2. brojčano kontrolirana

1. Logički kontrolirana iteracija

Kod logički kontrolirane iteracije broj iteracija nije unaprijed poznat, a isti skup naredbi se
izvršava onoliko puta koliko je potrebno da se ispuni zadani uvjet. Ispitivanje ispunjenosti
uvjeta može se raditi na početku ili na kraju iteracije pa se shodno tome i razlikuju:
 Pre-test iteracije
 Post-test iteracije

Pre-test iteracija je poznata i kao while iteracija. Uobičajeno se u programskim jezicima


implementira pomoću naredbe while. Naredba while ponovlo izvršava jednu ili više i naredbi
sve dok je uvjet ispunjen to jest istinit, a u suprotnom se iteracija prekida i programski tok se
nastavlja prvom sljedećom naredbom nakon petlje.
Post-test iteracija provjeru uslova radi na samom kraju ciklusa i ta iteracija se u
programskim jezicima obično implementira pomoću naredbe do while. U ovom slučaju
ciklus, odnosno blok naredbi, se izvršava barem jedanput bez obzira na istinitost ili
neistinitost uslova. U svakom ciklusu naredbe do while, najprije se izvrše sve naredbe koje
čine tijelo petlje i potom slijedi ispitivanje istinitosti izraza. Ako je izraz istinit ciklus se
ponavlja, u suprotnom, izlazi se iz ciklusa i programski tok se prenosi na prvu sljedeću
naredbu i za naredbe do while.

2. Brojčano kontrolirana iteracija

To je iteracija koja se izvršava jedanput za svaku vrijednost u datom konačnom skupu i kod
koje je broj iteracija poznat prije početka prve iteracije. Ovaj oblik iteracije se prvi put
pojavio u programskom jeziku Fortran I a implementiran je pomoću naredbe do loop.
Danas većina programskih jezika brojčano kontroliranu iteraciju implementira pomoću
naredbe for. Opći oblik naredbe je: FOR i :=prva TO konačna, korak... END

Varijabla i se naziva indeks petlje ili brojač i njena se vrijednost mijenja nakon svake iteracije
odnosno ciklusa. Kada varijabla i dostigne konačnu vrijednost, završava se izvođenje skupa
naredbi unutar for petlje i prelazi se na prvu sljedeću naredbu.
Na samom početku izvršavanje naredbi for postavlja se vrijednost za brojač ciklusa petlje.
Nakon toga, ispituje se vrijednost uvjeta koji mora biti logički izraz. Uvjet obično poredi broj
sa zadanom ciljnom vrijednošću. Dakle, ako je uvjet istinit izvršavaju se naredbe koje čine
iteracija a u sklopu izvršavanja iteracije brojač se mijenja. Ciklus provjera uvjeta, izvršavanje
tijela petlje i ažuriranje brojača ponavlja se sve dok uvjet ne postane neistinit.

4.UPRAVLJANJE ULAZOM/IZLAZOM
programski jezici imaju razvijene tehnike za prikupljanje podataka s trajnih izvora i za
pohranjivanje podataka na ta trajna odredišta. Zajednički naziv za te tehnike je ulaz/izlaz.
Izvori i odredišta za U/I operacije nazivaju se datoteke. Većina savremenih programskih
jezika uključuje U/I operacije u svoje standardne programske biblioteke.

Da bi program mogao pristupiti datoteci mora je pronaći i otvoriti. Otvorenoj datoteci se


može pristupiti na dva načinačina:
 sekvencijalno
 Random
Datoteka sa sekvencijalnim pristupom je ona u kojoj su podaci pohranjeni u istom redoslijedu
u kojem se čitaju ili pišu od strane programa.
Datoteke sa random pristupom su one kod kojih se podaci mogu učitati ili zapisivati u
neserijskom redoslijedu, tako da pojedini podatak može biti pročitan 0,1 ili bilo koji broj puta
dok je datoteka otvorena
Kada program završi sa čitanjem ili upisom podataka u datoteku datoteka se zatvara i
program prepušta kontrolu nad datotekom tako da joj može pristupiti drugi program.
Podacima u sekvencijalnoj datoteci se može programski prići bilo kao u toku znakova bilo
kao seriji slogova fiksne dužine istog formata.
Ako je to izvor podataka za program naziva se ulazni tok a ako je to odredište podatka naziva
se izlazni tok.
Programski jezici moraju osigurati na koji način utvrditi da li se došlo do kraja toka odnosno
da li su svi podaci pročitani i da li se više niti jedan podatak neće pojaviti u toku kao i kako
označiti da je izlazni tok završen. Jedan od temeljnih zahtjeva u programiranju jeste
mogućnost učitavanja podataka preko tipkovnice i njihov prikaz na zaslonu računara.
Datotečni tok se koristi za prijenos podataka u ili iz prirodnog sistemskog datotečnog sistema
Kanalni tok dopušta podacima iz jednog toka da se ubacuju izravno u drugi tok. Ovo
omogućava programima izbjegavanje pohrane podataka u privremene podatkovne strukture.
Memorijski tokovi se koriste za prijenos podataka između polja i programa dok filter tok
omogućava potporu za formatirani ulaz i izlaz.

Random ili direktni pristup datotekama omogućava nesekvencijalno obradu podataka u


datoteci. Takve datoteke nalaze se u direktorijima ili mapama i nije ih potrebno obrađivati
sekvencijalno od početka već jednostavno pronaći ili ažurirati pojedinačni unos. Hard diskovi
su uređaji dizajnirani za rad sa direktnim pristupom datotekama. Disk ima veći broj ploča od
kojih svaka ima nekoliko koncentričnih tragova svaki trag ima isti broj sektora fiksne dužine
serija glava za čitanje pisanje po jedna na površini ploče se pozicionira za čitanje i pisanje
podataka na pojedinom cilindru prije nego se ruka pomjeri na sljedeći cilindar taj pokret se
naziva traka.

Jedna od osnovnih osobina proceduralne paradigme je i proceduralna apstrakcija. To je


proces pomoću kojeg programer povezuje ime sa potencijalno složenim dijelom programa,
nakon čega se o tom dijelu programskog koda razmišlja u smislu njegove svrhe ili
funkcionalnosti umjesto o detaljima kako se ta funkcionalnost postiže. Skrivanjem
nepotrebnih detalja proceduralna apstrakcija smanjuje konceptualnu kompleksnost
omogućavajući programerima fokusiranje na podskup programskog koda koji je jednostavniji
za upravljanje. Procedure i potprogrami se nazivaju i kontrolne apstrakcije one omogućavaju
programeru skrivanje komplicirano koda iza jednostavnog sučelja.

You might also like