You are on page 1of 12

1 ALGORITAM

Pojam algoritma predstavlja temelj za razumijevanje raunarstva openito. Meutim algoritmi nisu ogranieni samo na raunarstvo ili tehnike aktivnosti. Pomou algoritma moemo opisati maioniarski trik ili neku svakodnevnu aktivnost. Mnogi istraivai vjeruju da je bilo koja aktivnost ljudskog uma, ukljuujui zamiljanje, kreativnost i donoenje odluka, u osnovi rezultat izvoenja nekog od algoritama to je za posljedicu imalo razvoj znanstvene discipline poznate pod imenom Umjetna inteligencija. Algoritam moemo definirati kao skup jednoznanih tono utvrenih koraka koji slue za postizanje eljenog cilja.

1.1 Porijeklo naziva


Naziv algoritam dolazi od imena arapskoga matematiara Muhammad ibn Musa Al Horezmija (790 - 850). On je razradio i u svom djelu Al Jabr dao opu metodu za nalaenje dva rjeenja kvadratne jednadbe. U latinskom prijevodu njegove knjige ime je s vremenom pretvorenu u Algorithmus, a naziv djela u algebra. U prvo vrijeme sa algoritmima nazivana samo pravila raunanja s brojevima, a zatim u periodu sve do sredine 20. stoljea samo matematika pravila za obavljanje raznih zadataka. Tek s pojavom raunala pojam se rasprostranio, najprije u podruje raunarstva, a zatim i u druge djelatnosti. Rije algoritam danas se sve vie susree u raznim prilikama svakodnevnog ivota jer se obavljanje raznih poslova svodi na obavljanje pojedinih osnovnih operacija zadanim redoslijedom.

1.2 Svojstva algoritma


Postoje tri znaajna svojstva koje svaki algoritam mora imati.

Uz svaki algoritam moraju biti jasno definirani poetni objekti nad kojima se obavljaju operacije. Algoritam se mora sastojati od konanog broja koraka koji ukazuju na slijed operacija koje treba obaviti nad poetnim objektima kako bi se dobili zavrni objekti ili rezultati. Svaki korak se opisuje instrukcijom. Obavljanje algoritma naziva se algoritamskim procesom. Tijekom odvijanja algoritamskog procesa i postupne izgradnje zavrnog objekta mogu se pojaviti i neki meurezultati.

za obavljanje algoritma potreban je izvoditelj algoritma, netko ili neto tko razumije algoritam i zna tono obaviti svaki korak algoritma. Trajanje algoritamskog procesa odreeno je brzinom kojom izvoditelj obavlja korake algoritma.

1.3 Vrsta logaritama


Algoritme moemo podijeliti na specijalizirane i openite algoritme. Specijalizirani algoritmi mogu se primijeniti samo na pojedine poetne objekte i nisu upotrebljivi za ostale kombinacije tih objekata. Openiti algoritmi dozvoljavaju upotrebu razliitih vrijednosti poetnih objekata. Za njih definiramo klasu ulaznih objekata koji su dozvoljeni i nad kojima se algoritam ispravno izvodi i rezultira klasom izlaznih objekata.

1.4 Cilj programiranja


Osnovni cilj programiranja je osmisliti openiti algoritam iji e izvoditelj biti raunalo.

1.5 Programski jezici


Algoritmi i dozvoljeni objekti algoritama mogu se opisati prirodnim govornim jezikom, ali je isto tako mogue sainiti i umjetne jezike za zapisivanje algoritma. Oni moraju biti dovoljno dobro izgraeni da bi se njima mogli opisati raznovrsni algoritmi. Ako elimo da algoritam automatski obavlja raunalo, onda ga moramo prevesti u program sastavljen od instrukcija koje slue za upravljanje strojem koje raunalo razumije i moe izvesti. Taj jezik naziva se strojni jezik. Strojni jezik je teko razumljiv i neprikladan za ovjeka. Zbog toga su sainjeni umjetni jezici za zapisivanje algoritama razumljivi ovjeku. Ti jezici nazivaju se viim programskim jezicima. Algoritam zapisan u nekom programskom jeziku naziva se program.

1.6 Nain zapisivanja algoritma


Vidjeli smo da je algoritam openiti pojam definiran izvan specifinog programskog jezika. Zbog toga uvodim i naine njegovog zapisivanja koji nisu vezani niti za jedan programski jezik. Takvih naina ima vie. Spomenut emo pseudokod i dijagram toka. Pseudokod je algoritam zapisan rijeima. Naziv dolazi kao kombinacija rijei pseudo (gr. la, lani, tobonji) i kod (skup dogovorenih znakova kojima moemo oblikovati neku poruku, komunicirati). U programiranju se pod kodom razumijeva izvorni program napisan u nekom programskom jeziku. Prema tome, pseudokod bi bio "lani" program u kojem upute ne piemo u nekom od programskih jezika nego iste ili sline korake algoritamskog procesa opisujemo uvijek istim dogovorenim rijeima i znakovima iz govornog jezika. Dijagram toka je grafiki prikaz algoritma. Takav nain zapisivanja ima nekoliko prednosti pred pseudokodom. Zapisivanje se vri meunarodno dogovorenim simbolima i ne ovisi o govornom jeziku onoga koji sastavlja algoritam. Grafiki prikaz je jednostavan, pregledan, lako se pronalaze greke. Nadalje, problem se moe jednostavno analizirati, usporediti s nekim drugim problemom, skratiti vrijeme pronalaenja rjeenja. Simboli koje koristi dijagram toka su: simbol za poetak i kraj programa

simbol za ulaz i izlaz podataka

simbol za izvrne instrukcije, u pravilu pridruivanje

simbol za uvjetno grananje, u ovisnosti o ispunjenosti testiranog uvjeta algoritam izvoenje nastavlja jednim od alternativnih tijekova algoritma

spojna toka alternativnih tijekova algoritma

tijek izvoenja algoritma

1.7 Tipovi podataka


Razlikujemo tri osnovna tipa algoritma:

algoritam slijeda (linijski algoritam), algoritam grananja, algoritam petlje.

Njihova osnovna svojstva pokazat emo na sljedeim primjerima.

Primjer 1. Zadatak 1: Napravi algoritam za unos dva broja i ispis njihovog zbroja.

Napomena: Ovo je primjer algoritma slijeda kod kojeg se instrukcije uvijek izvode jedna za drugom, unaprijed odreenim redoslijedom bez obzira na vrijednosti podataka s kojima algoritam radi.

Primjer 2. Zadatak 2. Napravi algoritam za unos jednog broja i ispis njegove apsolutne vrijednosti.

Napomena: Ovo je primjer algoritma grananja kod kojeg se ispituje odreeni uvjet i, ovisno o njegovoj ispunjenosti, algoritam usmjerava jednim od dva alternativna tijeka. 5

Primjer 3. Zadatak 3. Napravi algoritam za unos jednog broja i ispis njegovih prvih 10 potencija.

Napomena: Ovo je primjer algoritma petlje kod kojeg se odreeni skup instrukcija ponavlja vie puta.

2 PODACI
Osnovna funkcija raunala je obrada podataka. Svaki raunalni program obrauje podatke smjetene u memoriji raunala. Njih mo emo podijeliti na

nepromjenjive podatke, tj. konstante, promjenjive podatke, tj. varijable.

Raunalo za svaki podatak predvia i rezervira mjesto u memoriji za njegovu pohranu. Svako rezervirano mjesto u memoriji ima svoju jedinstvenu memorijsku adresu. Memorijske adrese su vieznamenkasti binarni brojevi. Korisnicima je oznaavanje varijabli vieznamenkastim binarnim brojevima neprikladno, pa im se zato dodjeljuju simbolika imena. Simboliko ime je ime koje se sastoji od slova engleskog alfabeta, znamenki i znaka podcrtavanja. Svaki put kad program naie na simboliko ime, povezuje ga s pripadajuim podatkom.

2.1 Tipovi podataka


S obzirom da se razliite klase podataka obrauju na razliite naine, nuno je da svaki podatak koji se u programu javlja ima dodijeljenu oznaku tipa, koja govori o tome

kako se dotini podatak pohranjuje u memoriju raunala, koji su njegovi dozvoljeni rasponi vrijednosti, kakve su operacije mogue s tim podatkom i sl.

Ove klase nazivamo tipovima podataka. Najee susreemo sljedee tipove:

logiki podaci (eng. Boolean) - mogu sadravati samo dvije vrijednosti istinu i la (eng. true i false) cijeli brojevi (eng. integers) - esto u programskim jezicima postoji nekoliko tipova podataka koji slue za uvanje cijelih brojeva, a meusobno se razlikuju po broju bajtova koje zauzimaju, po tome mogu li pamtiti negativne brojeve ili ne i sl.,

realni brojevi (eng. floating point numbers) - u raunalu realizirani kao brojevi s pominom decimalnom tokom, takoer se decimalni brojevi koji se zapisuju koritenjem plutajue toke, takoer vrlo esto realizirani kroz nekoliko tipova podataka, 7

znakovi (eng. characters) - slue za zapis jednog znaka. tekst (eng. string) - niz znakova koji moemo promatrati kao cjelinu.

2.2 Cjelobrojni tipovi podataka


U programskom jeziku C++ postoji cijeli niz cjelobrojnih tipova podataka. Oni se meusobno razlikuju po koliini memorije koju zauzimaju, kao i po tome zapisuju li samo pozitivne (unsigned) ili i pozitivne i negativne brojeve (ovo je podrazumijevani tip, ali moe se staviti i prefiks signed). Na slici se mogu vidjeti podaci o nazivu tipova, koliini zauzete memorije i rasponu podataka za svaki od cjelobrojnih tipova podataka u C++. Treba napomenuti da ove veliine ovise o okruenju u kojem se C++ program izvodi.

2.3 Tipovi podataka za zapis realnih brojeva


U programskom jeziku C++ postoji cijeli i nekoliko tipova podataka za zapis realnih brojeva u formatu broja sa plutajuom decimalnom tokom. Oni se meusobno razlikuju po koliini memorije koju zauzimaju. Na slici se mogu vidjeti podaci o nazivu tipova, koliini zauzete memorije i rasponu podataka za svaki od realnih tipova podataka u C++. I ovdje treba napomenuti da veliine ovise o okruenju u kojem se C++ program izvodi. 8

2.4 Tipovi podataka za zapis teksta


U programskom jeziku C++ postoje i dva tipa podataka koja slue za zapis pojedinanog znaka. Oni se meusobno razlikuju po koliini memorije koju zauzimaju, kao i po kodu koji koriste za zapis znakova u raunalu. Takoer postoji i tip podataka koji slui za pohranu teksta, odnosno niza znakova koje moemo promatrati i tretirati kao cjelinu. Na slici se mogu vidjeti podaci o nazivu tipova, koliini zauzete memorije i rasponu podataka za oba znakovna tipa podataka u C++.

2.5 Identifikatori
Mnogim elementima raunalnog programa (konstantama, varijablama, funkcijama, klasama) potrebno je dati odreeno ime. U tu svrhu koriste se identifikatori, tj. simbolika imena kod ijeg zadavanja imamo dosta slobode. U programskom jeziku C++ broj znakova identifikatora nije ogranien. Prilikom njegovog izbora imamo dosta slobode, ali ipak je potrebno potivati nekoliko osnovnih pravila:

identifikator mo e biti sastavljen od kombinacije slova engleskog alfabeta (A - Z, a z), znamenki (0 - 9) i znaka za podcrtavanje _ (eng. underscore),

prvi znak mora biti slovo ili znak za podcrtavanje, 9

identifikator ne smije biti jednak nekoj od kljunih rijei ili nekoj od alternativnih oznaka operatora treba izbjegavati nazive identifikatora koji sadre dvostruke znakove podcrtavanja (__) ili koji zapoinju znakom podcrtavanja i velikim slovom, jer su takve oznake rezervirane za C++ implementacije i standardne biblioteke.

C++ razlikuje velika i mala slova pa su npr. xy, Xy, xY i XY etiri razliita identifikatora.

Osim ovih nekoliko pravila kod zadavanja imena mo emo pustiti ma ti na volju pa svoje varijable i funkcije nazivati svakojako. Pri tome je ,zbog razumljivosti koda, po eljno imena odabirati tako da odra avaju stvarno znaenje varijabli. Ako se oblikuje ime sastavljeno od vie rijei, uobiajeno je rijei odvajati znakom podcrtavanja ili ih pisati spojeno tako da je svako prvo slovo u rijei veliko (npr. ime_ od_vise_rijeci ili ImeOdViseRijeci).

10

2.6 Varijable
Varijable su podaci ija se vrijednost u tijeku izvoenja programa moe mijenjati. Svaku varijablu koju u programu koristimo moramo deklarirati (najaviti programu njeno postojanje). Opi oblik deklaracije varijable je: tip_podatka identifikator [= inicijalna_vrijednost]; za pojedinanu varijablu, odnosno tip_podatka identifikator[dimenzija] [= {skup inicijalizatora}]; za niz podataka istog tipa. Istom deklaracijskom instrukcijom mogue je najaviti i vie varijabli istog tipa, npr. int b1, b2 = 4, b3[5], b4[5] = {1, 2, 3, 4, 5}; Deklaraciju varijable u kojoj se varijabli istovremeno dodjeljuje i inicijalnu vrijednost nazivamo inicijalizacija varijable.

2.7 Konstante
Konstante su podaci ija se vrijednost zadaje u samom kodu i u tijeku izvoenja programa ne moe se mijenjati. Svaku konstantuu koju u programu koristimo moramo definirati. Postoje dva naina definicije konstanti u C++, pretprocesorskom naredbom #define iji je opi oblik: #define identifikator inicijalna_vrijednost ili na slino varijablama uz prefiks const: const tip_podatka identifikator = inicijalna_vrijednost;

11

3 OPERATORI
U svim programskim jezicima postoji cijeli niz operatora koji simboliki predstavljaju odreene operacije koje se nad podacima mogu obavljati. Operatori programskog jezika C++ su:

operator pridruivanja: = aritmetiki operatori:


o o

unarni: +, -, ++, -binarni: +, -, *, /, %

relacijski operatori: >, >=, <, <=, ==, != logiki operatori: ! (logiko NE), && (logiko I), || (logiko ILI) bitovni operatori: ~ (komplement), & (binarni I), | (binarni ILI), ^ (iskljuivo ILI), << (pomak ulijevo), >> (pomak udesno) operator dodjele tipa: static_cast<tip_podatka>

4 KONTROLA TIJEKA PROGRAMA


Uobiajeno je da se naredbe u programu izvravaju u onom poretku u kojem su napisane (sekvencijalno). Naravno, esto se javlja potreba da se naredbe izvravaju u nekim drugom poretku. Stoga postoje naredbe koje omoguavaju programu da odredi koja e biti sljedea naredba u programu koja e se izvriti, neovisno o tome je li upravo ta naredba sljedea u poretku izvravanja. Naredbe koje to omoguuju kontroliraju tijek kojim e se izvravati na program te se stoga te naredbe zovu naredbe kontrole tijeka programa. Programske strukture koje kontroliraju tijek izvoenja programa su:

grananja, petlje.

Grananje nam omoguuje izvravanje jednog od navedenih blokova naredbi u ovisnosti o ispunjenosti testiranih uvjeta ili o vrijednosti testiranog izraza. Petlja omoguuje viestruko izvravanje bloka naredbi. Blok naredbi e se izvravati sve dok je uvjet povratka u petlju ispunjen.

12

You might also like