12
1 1 ALGORITAM Pojam algoritma predstavlja temelj za razumijevanje računarstva općenito. Međutim algoritmi nisu ograničeni samo na računarstvo ili tehničke aktivnosti. Pomoću algoritma možemo opisati mađioničarski trik ili neku svakodnevnu aktivnost. Mnogi istraživači vjeruju da je bilo koja aktivnost ljudskog uma, uključujući zamišljanje, kreativnost i donošenje odluka, u osnovi rezultat izvođenja nekog od algoritama što je za posljedicu imalo razvoj znanstvene discipline poznate pod imenom Umjetna inteligencija. Algoritam možemo definirati kao skup jednoznačnih točno utvrđenih koraka koji služe za postizanje željenog cilja. 1.1 Porijeklo naziva Naziv algoritam dolazi od imena arapskoga matematičara Muhammad ibn Musa Al Horezmija (790 - 850). On je razradio i u svom djelu Al Jabr dao opću metodu za nalaženje dva rješenja kvadratne jednadžbe. 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 računanja s brojevima, a zatim u periodu sve do sredine 20. stoljeća samo matematička pravila za obavljanje raznih zadataka. Tek s pojavom računala pojam se rasprostranio, najprije u područje računarstva, a zatim i u druge djelatnosti. Riječ algoritam danas se sve više susreće u raznim prilikama svakodnevnog života jer se obavljanje raznih poslova svodi na obavljanje pojedinih osnovnih operacija zadanim redoslijedom.

2222

Embed Size (px)

DESCRIPTION

aefeafe

Citation preview

1

1 ALGORITAM

Pojam algoritma predstavlja temelj za razumijevanje računarstva općenito.

Međutim algoritmi nisu ograničeni samo na računarstvo ili tehničke aktivnosti. Pomoću

algoritma možemo opisati mađioničarski trik ili neku svakodnevnu aktivnost.

Mnogi istraživači vjeruju da je bilo koja aktivnost ljudskog uma, uključujući zamišljanje,

kreativnost i donošenje odluka, u osnovi rezultat izvođenja nekog od algoritama što je za

posljedicu imalo razvoj znanstvene discipline poznate pod imenom Umjetna inteligencija.

Algoritam možemo definirati kao skup jednoznačnih točno utvrđenih koraka koji služe za

postizanje željenog cilja.

1.1 Porijeklo naziva

Naziv algoritam dolazi od imena arapskoga matematičara Muhammad ibn Musa Al

Horezmija (790 - 850). On je razradio i u svom djelu Al Jabr dao opću metodu za nalaženje

dva rješenja kvadratne jednadžbe. 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 računanja s brojevima, a zatim u

periodu sve do sredine 20. stoljeća samo matematička pravila za obavljanje raznih zadataka.

Tek s pojavom računala pojam se rasprostranio, najprije u područje računarstva, a zatim i u

druge djelatnosti. Riječ algoritam danas se sve više susreće u raznim prilikama

svakodnevnog života jer se obavljanje raznih poslova svodi na obavljanje pojedinih osnovnih

operacija zadanim redoslijedom.

2

1.2 Svojstva algoritma

Postoje tri značajna svojstva koje svaki algoritam mora imati.

Uz svaki algoritam moraju biti jasno definirani početni objekti nad kojima se

obavljaju operacije.

Algoritam se mora sastojati od konačnog broja koraka koji ukazuju na slijed operacija

koje treba obaviti nad početnim objektima kako bi se dobili završni objekti ili rezultati.

Svaki korak se opisuje instrukcijom. Obavljanje algoritma naziva se algoritamskim

procesom. Tijekom odvijanja algoritamskog procesa i postupne izgradnje završnog

objekta mogu se pojaviti i neki međurezultati.

za obavljanje algoritma potreban je izvoditelj algoritma, netko ili nešto tko razumije

algoritam i zna točno obaviti svaki korak algoritma. Trajanje algoritamskog procesa

određeno je brzinom kojom izvoditelj obavlja korake algoritma.

1.3 Vrsta logaritama

Algoritme možemo podijeliti na specijalizirane i općenite algoritme.

Specijalizirani algoritmi mogu se primijeniti samo na pojedine početne objekte i nisu

upotrebljivi za ostale kombinacije tih objekata.

Općeniti algoritmi dozvoljavaju upotrebu različitih vrijednosti početnih 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 općeniti algoritam čiji će izvoditelj biti računalo.

3

1.5 Programski jezici

Algoritmi i dozvoljeni objekti algoritama mogu se opisati prirodnim govornim jezikom, ali je

isto tako moguće sačiniti i umjetne jezike za zapisivanje algoritma. Oni moraju biti dovoljno

dobro izgrađeni da bi se njima mogli opisati raznovrsni algoritmi.

Ako želimo da algoritam automatski obavlja računalo, onda ga moramo prevesti u program

sastavljen od instrukcija koje služe za upravljanje strojem koje računalo razumije i može

izvesti. Taj jezik naziva se strojni jezik.

Strojni jezik je teško razumljiv i neprikladan za čovjeka. Zbog toga su sačinjeni umjetni jezici

za zapisivanje algoritama razumljivi čovjeku. Ti jezici nazivaju se višim programskim

jezicima. Algoritam zapisan u nekom programskom jeziku naziva se program.

1.6 Način zapisivanja algoritma

Vidjeli smo da je algoritam općeniti pojam definiran izvan specifičnog programskog jezika.

Zbog toga uvodim i načine njegovog zapisivanja koji nisu vezani niti za jedan programski

jezik. Takvih načina ima više. Spomenut ćemo pseudokod i dijagram toka.

Pseudokod je algoritam zapisan riječima. Naziv dolazi kao kombinacija riječi pseudo (grč.

laž, lažni, tobožnji) i kod (skup dogovorenih znakova kojima možemo oblikovati neku poruku,

komunicirati). U programiranju se pod kodom razumijeva izvorni program napisan u nekom

programskom jeziku. Prema tome, pseudokod bi bio "lažni" program u kojem upute ne

pišemo u nekom od programskih jezika nego iste ili slične korake algoritamskog procesa

opisujemo uvijek istim dogovorenim riječima i znakovima iz govornog jezika.

Dijagram toka je grafički prikaz algoritma. Takav način zapisivanja ima nekoliko prednosti

pred pseudokodom. Zapisivanje se vrši međunarodno dogovorenim simbolima i ne ovisi o

govornom jeziku onoga koji sastavlja algoritam. Grafički prikaz je jednostavan, pregledan,

lako se pronalaze greške. Nadalje, problem se može jednostavno analizirati, usporediti s

nekim drugim problemom, skratiti vrijeme pronalaženja rješenja. Simboli koje koristi dijagram

toka su:

simbol za početak i kraj programa

4

simbol za ulaz i izlaz podataka

simbol za izvršne instrukcije, u pravilu

pridruživanje

simbol za uvjetno grananje, u ovisnosti o

ispunjenosti testiranog

uvjeta algoritam izvođenje

nastavlja jednim od alternativnih tijekova

algoritma

spojna točka alternativnih tijekova algoritma

tijek izvođenja algoritma

1.7 Tipovi podataka

Razlikujemo tri osnovna tipa algoritma:

algoritam slijeda (linijski algoritam),

algoritam grananja,

algoritam petlje.

Njihova osnovna svojstva pokazat ćemo na sljedećim primjerima.

5

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 određenim 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 određeni uvjet i, ovisno o

njegovoj ispunjenosti, algoritam usmjerava jednim od dva alternativna tijeka.

6

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 određeni skup instrukcija ponavlja

više puta.

7

2 PODACI

Osnovna funkcija računala je obrada podataka.

Svaki računalni program obrađuje podatke smještene u memoriji računala. Njih mo�žemo

podijeliti na

nepromjenjive podatke, tj. konstante,

promjenjive podatke, tj. varijable.

Računalo za svaki podatak predviđa i rezervira mjesto u memoriji za njegovu pohranu.

Svako rezervirano mjesto u memoriji ima svoju jedinstvenu memorijsku adresu.

Memorijske adrese su višeznamenkasti binarni brojevi. Korisnicima je označavanje varijabli

višeznamenkastim binarnim brojevima neprikladno, pa im se zato dodjeljuju simbolička

imena. Simboličko ime je ime koje se sastoji od slova engleskog alfabeta, znamenki i znaka

podcrtavanja. Svaki put kad program naiđe na simboličko ime, povezuje ga s pripadajućim

podatkom.

2.1 Tipovi podataka

S obzirom da se različite klase podataka obrađuju na različite načine, nužno je da svaki

podatak koji se u programu javlja ima dodijeljenu oznaku tipa, koja govori o tome

kako se dotični podatak pohranjuje u memoriju računala,

koji su njegovi dozvoljeni rasponi vrijednosti,

kakve su operacije moguće s tim podatkom i sl.

Ove klase nazivamo tipovima podataka. Najčešće susrećemo sljedeće tipove:

logički podaci (eng. Boolean) - mogu sadržavati samo dvije vrijednosti istinu i laž

(eng. true i false)

cijeli brojevi (eng. integers) - često u programskim jezicima postoji nekoliko tipova

podataka koji služe za čuvanje cijelih brojeva, a međusobno 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 računalu realizirani kao brojevi s

pomičnom decimalnom točkom, također se decimalni brojevi koji se zapisuju

korištenjem plutajuće točke, također vrlo često realizirani kroz nekoliko tipova

podataka,

8

znakovi (eng. characters) - služe za zapis jednog znaka.

tekst (eng. string) - niz znakova koji možemo promatrati kao cjelinu.

2.2 Cjelobrojni tipovi podataka

U programskom jeziku C++ postoji cijeli niz cjelobrojnih tipova podataka. Oni se međusobno

razlikuju po količini memorije koju zauzimaju, kao i po tome zapisuju li samo pozitivne

(unsigned) ili i pozitivne i negativne brojeve (ovo je podrazumijevani tip, ali može se staviti i

prefiks signed).

Na slici se mogu vidjeti podaci o nazivu tipova, količini zauzete memorije i rasponu podataka

za svaki od cjelobrojnih tipova podataka u C++. Treba napomenuti da ove veličine ovise o

okruženju 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 plutajućom decimalnom točkom. Oni se međusobno razlikuju po količini

memorije koju zauzimaju.

Na slici se mogu vidjeti podaci o nazivu tipova, količini zauzete memorije i rasponu podataka

za svaki od realnih tipova podataka u C++. I ovdje treba napomenuti da veličine ovise o

okruženju u kojem se C++ program izvodi.

9

2.4 Tipovi podataka za zapis teksta

U programskom jeziku C++ postoje i dva tipa podataka koja služe za zapis pojedinačnog

znaka. Oni se međusobno razlikuju po količini memorije koju zauzimaju, kao i po kodu koji

koriste za zapis znakova u računalu. Također postoji i tip podataka koji služi za pohranu

teksta, odnosno niza znakova koje možemo promatrati i tretirati kao cjelinu.

Na slici se mogu vidjeti podaci o nazivu tipova, količini zauzete memorije i rasponu podataka

za oba znakovna tipa podataka u C++.

2.5 Identifikatori

Mnogim elementima računalnog programa (konstantama, varijablama, funkcijama, klasama)

potrebno je dati određeno ime. U tu svrhu koriste se identifikatori, tj. simbolička imena kod

čijeg zadavanja imamo dosta slobode.

U programskom jeziku C++ broj znakova identifikatora nije ograničen. Prilikom njegovog

izbora imamo dosta slobode, ali ipak je potrebno poštivati 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,

10

identifikator ne smije biti jednak nekoj od ključnih riječi ili nekoj od alternativnih

oznaka operatora

treba izbjegavati nazive identifikatora koji sadrže dvostruke znakove podcrtavanja

(__) ili koji započinju 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 različita

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 značenje varijabli. Ako se oblikuje ime sastavljeno od

više riječi, uobičajeno je riječi odvajati znakom podcrtavanja ili ih pisati spojeno tako da je

svako prvo slovo u riječi veliko (npr. ime_ od_vise_rijeci ili ImeOdViseRijeci).

11

2.6 Varijable

Varijable su podaci čija se vrijednost u tijeku izvođenja programa može mijenjati. Svaku

varijablu koju u programu koristimo moramo deklarirati (najaviti programu njeno postojanje).

Opći oblik deklaracije varijable je:

tip_podatka identifikator [= inicijalna_vrijednost];

za pojedinačnu varijablu, odnosno

tip_podatka identifikator[dimenzija] [= {skup inicijalizatora}];

za niz podataka istog tipa.

Istom deklaracijskom instrukcijom moguće je najaviti i više 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 izvođenja programa

ne može se mijenjati. Svaku konstantuu koju u programu koristimo moramo definirati.

Postoje dva načina definicije konstanti u C++, pretprocesorskom naredbom #define čiji je

opći oblik:

#define identifikator inicijalna_vrijednost

ili na slično varijablama uz prefiks const:

const tip_podatka identifikator = inicijalna_vrijednost;

12

3 OPERATORI

U svim programskim jezicima postoji cijeli niz operatora koji simbolički predstavljaju

određene operacije koje se nad podacima mogu obavljati.

Operatori programskog jezika C++ su:

operator pridruživanja: =

aritmetički operatori:

o unarni: +, -, ++, --

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

relacijski operatori: >, >=, <, <=, ==, !=

logički operatori: ! (logičko NE), && (logičko I), || (logičko ILI)

bitovni operatori: ~ (komplement), & (binarni I), | (binarni ILI), ^ (isključivo ILI),

<< (pomak ulijevo), >> (pomak udesno)

operator dodjele tipa: static_cast<tip_podatka>

4 KONTROLA TIJEKA PROGRAMA

Uobičajeno je da se naredbe u programu izvršavaju u onom poretku u kojem su napisane

(sekvencijalno). Naravno, često se javlja potreba da se naredbe izvršavaju u nekim drugom

poretku. Stoga postoje naredbe koje omogućavaju programu da odredi koja će biti sljedeća

naredba u programu koja će se izvršiti, neovisno o tome je li upravo ta naredba sljedeća u

poretku izvršavanja.

Naredbe koje to omogućuju kontroliraju tijek kojim će se izvršavati naš program te se stoga

te naredbe zovu naredbe kontrole tijeka programa. Programske strukture koje kontroliraju

tijek izvođenja programa su:

grananja,

petlje.

Grananje nam omogućuje izvršavanje jednog od navedenih blokova naredbi u ovisnosti o

ispunjenosti testiranih uvjeta ili o vrijednosti testiranog izraza.

Petlja omogućuje višestruko izvršavanje bloka naredbi. Blok naredbi će se izvršavati sve dok

je uvjet povratka u petlju ispunjen.