12
1 1 ALGORITAM Pojam algoritma predstavlja temelj za rarsgrgsrsrggrsgrsrgszumijevanje 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.

feafaefeafeafea

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: >, >=,