Upload
schweini31
View
9
Download
0
Embed Size (px)
DESCRIPTION
eaffefe
Citation preview
1
1 ALGORITAM
Pojam algoritma predstavlja temelj za rarsgrgsrsrggrsgrsrgszumijevanje 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.
2
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.
3
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
4
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.
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 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.
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 odreeni skup instrukcija ponavlja
vie puta.
7
2 PODACI
Osnovna funkcija raunala je obrada podataka.
Svaki raunalni program obrauje podatke smjetene u memoriji raunala. Njih moemo
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,
8
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.
9
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 moe 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 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 moemo pustiti mati na volju pa svoje
varijable i funkcije nazivati svakojako. Pri tome je ,zbog razumljivosti koda, poeljno imena
odabirati tako da odraavaju 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).
11
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;
12
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 unarni: +, -, ++, --
o binarni: +, -, *, /, %
relacijski operatori: >, >=,