50
Algoritmi i strukture Algoritmi i strukture podataka podataka Studij informatike

07.Algoritmi i Strukture Podataka

  • Upload
    hromerr

  • View
    66

  • Download
    11

Embed Size (px)

Citation preview

  • Algoritmi i strukture Algoritmi i strukture podatakapodataka

    Studij informatike

  • 22

    OpenitoOpenito oo predmetupredmetu

    U kolskoj godini 1999/2000 odluili smo modificirati izvoenje U kolskoj godini 1999/2000 odluili smo modificirati izvoenje nastave iz ovog predmeta. Umjesto klasinih folija gradivo e senastave iz ovog predmeta. Umjesto klasinih folija gradivo e seprezentirati raunarm i to koristei alat PowerPoint, rad prograprezentirati raunarm i to koristei alat PowerPoint, rad programa e ma e se izravno demonstrirati izvose izravno demonstrirati izvoenjem u Visual C++ okruenju. I tekst i enjem u Visual C++ okruenju. I tekst i programski kod mogu se stalno poboljavati. Dobar dio do sada programski kod mogu se stalno poboljavati. Dobar dio do sada obavljenih ispravki i poboljanja dugujemo upozorenjima studenatobavljenih ispravki i poboljanja dugujemo upozorenjima studenata a prethodnih generacija te im ovom prilikom zahvaljujemo. Sigurno prethodnih generacija te im ovom prilikom zahvaljujemo. Sigurno jo jo uvijek ima i pogreaka i nedostataka, a zbog uvedenih promjena, uvijek ima i pogreaka i nedostataka, a zbog uvedenih promjena, sigurno su nastale i nove te molimo studente da nam na njih ukasigurno su nastale i nove te molimo studente da nam na njih ukau.u.

    Laboratorijske vjebe odravat e se po 2 sata tjedno, ali poevLaboratorijske vjebe odravat e se po 2 sata tjedno, ali poevi od i od 08. studenog 1999. Iskljueni su tjedni od 20.12.19999 08. studenog 1999. Iskljueni su tjedni od 20.12.19999 -- 09.01.2000. 09.01.2000. To znai da ima 7 tjedana + 1 tjedan za nadoknade (To znai da ima 7 tjedana + 1 tjedan za nadoknade (PROVJERITI!PROVJERITI!).).

  • 33

    OpenitoOpenito oo predmetupredmetu

    PohaPohaanje nastave anje nastave nee se evidentiratinee se evidentirati i i nije uslovnije uslov za dobivanje za dobivanje potpisa. Mpotpisa. Meeutim:utim:

    Student koji nema vlastite biljeke s nastave Student koji nema vlastite biljeke s nastave nema pravo dolaska nema pravo dolaska na konzultacijena konzultacije. Vlastita teka s biljekama, odnosno dopunama i . Vlastita teka s biljekama, odnosno dopunama i komentarima na nastavnim materijalima je nuan uslov za bilo kakkomentarima na nastavnim materijalima je nuan uslov za bilo kakvo vo osobno obraanje nastavnicima ovog predmeta izvan predavanja iliosobno obraanje nastavnicima ovog predmeta izvan predavanja ilivjebi. Dio studenata uobiajeno smatra da ne mora pohaati vjebi. Dio studenata uobiajeno smatra da ne mora pohaati nastavu. To smatramo njihovim pravom (koje je na njihovu tetu!)nastavu. To smatramo njihovim pravom (koje je na njihovu tetu!), ali , ali pri tome moraju ostati konzekventni!pri tome moraju ostati konzekventni!

    Pretpostavka ovog predmeta je operativno znanje programiranja u Pretpostavka ovog predmeta je operativno znanje programiranja u jeziku C. Studenti, koji su eventualno uspjeli poloiti Programijeziku C. Studenti, koji su eventualno uspjeli poloiti Programiranje ne ranje ne nauivi C, imat e ozbiljnih problema s polaganjem ovog ispita.nauivi C, imat e ozbiljnih problema s polaganjem ovog ispita. Stoga Stoga ih upozoravamo da manjkavosti u svom znanju pravovremeno ih upozoravamo da manjkavosti u svom znanju pravovremeno nadoknade. Zahtjevi na znanje iz ovog predmeta poveat e se nadoknade. Zahtjevi na znanje iz ovog predmeta poveat e se proporcionalno naoj percepciji poboljanja izvedbe ovog predmetproporcionalno naoj percepciji poboljanja izvedbe ovog predmeta. a.

  • 44

    OpenitoOpenito oo predmetupredmetu

    Predmet je uveden u nastavni plan kao zajedniki odlukom oba stuPredmet je uveden u nastavni plan kao zajedniki odlukom oba studija dija i svih smjerova, a ne na osnovu nastojanja predmetnih nastavnikai svih smjerova, a ne na osnovu nastojanja predmetnih nastavnika(koji su predmet predloili samo za Raunarstvo). Naa je obveza(koji su predmet predloili samo za Raunarstvo). Naa je obvezapotivati ovu odluku Fakulteta te studentima ne moemo davati potivati ovu odluku Fakulteta te studentima ne moemo davati nikakve olakice temeljem pozivanja na odabir smjera koji toboenikakve olakice temeljem pozivanja na odabir smjera koji toboe ne ne treba ovo gradivo. Argumenti da je predmet nekome uslov za upis treba ovo gradivo. Argumenti da je predmet nekome uslov za upis na na treu ili ak etvrtu godinu, prijetnja gubitka prava studija zbtreu ili ak etvrtu godinu, prijetnja gubitka prava studija zbog 8. og 8. pada na ispitu i slino nee utjecati na kriterije ispitivaa. Npada na ispitu i slino nee utjecati na kriterije ispitivaa. Naprotiv, aprotiv, takve situacije ukazuju da dotini student najvjerojatnije studitakve situacije ukazuju da dotini student najvjerojatnije studira na ra na pogrenom fakultetu! Ako netko usprkos tome doe zamoliti za pogrenom fakultetu! Ako netko usprkos tome doe zamoliti za "razumijevanje", znai da ak nije upoznat niti s ovim uvodnim "razumijevanje", znai da ak nije upoznat niti s ovim uvodnim poglavljem. Kriterije emo dakle nastojati zadravati jednakima poglavljem. Kriterije emo dakle nastojati zadravati jednakima bez bez obzira na karakter ispitnog roka.obzira na karakter ispitnog roka.

  • 55

    OpenitoOpenito oo predmetupredmetu

    uslov za potpis: Kolokvirane laboratorijske vjebeuslov za potpis: Kolokvirane laboratorijske vjebe Ispit: Rijeeni zadatak za domai rad, pismeni i usmeni ispitIspit: Rijeeni zadatak za domai rad, pismeni i usmeni ispit Konzultacije (Konzultacije (donijeti vlastite zabiljeke s nastave!donijeti vlastite zabiljeke s nastave!): ):

    Prof.dr.sc. Damir KalpiProf.dr.sc. Damir Kalpi (D(D--368)368)Prof.dr.sc. Vedran MornarProf.dr.sc. Vedran Mornar (D(D--366)366)

    Svaki dan od 12Svaki dan od 12--13h13hZPM, Zgrada D/III kat, sjeverozapadno krilo ZPM, Zgrada D/III kat, sjeverozapadno krilo

    Sve primjedbe na predmet i oko njega aljite na:Sve primjedbe na predmet i oko njega aljite na:

    damir.kalpicdamir.kalpicfer.hr fer.hr ili ili vedran.mornarvedran.mornarfer.hrfer.hrSUBJECT:ASPSUBJECT:ASP

  • 66

    OpenitoOpenito oo predmetupredmetu

    LiteraturaLiteraturazz Kalpi & Mornar: Materijali s predavanjaKalpi & Mornar: Materijali s predavanjazz http://www.zpm.fer.hr/courses/algorhttp://www.zpm.fer.hr/courses/algorzz VlastitaVlastita tekatekazz Budin: Informatika za 1. razred gimnazije, Element, Zagreb, 1996Budin: Informatika za 1. razred gimnazije, Element, Zagreb, 1996zz Horowitz & Sahni: Fundamentals of Computer Algorithms, Pitman, Horowitz & Sahni: Fundamentals of Computer Algorithms, Pitman,

    London, 1978 (ima i novo izdanje!)London, 1978 (ima i novo izdanje!)zz Knuth: Fundamental Algorithms, AddisonKnuth: Fundamental Algorithms, Addison--Wessley, 1973Wessley, 1973zz Wirth: Algorithms + Data Structures = Programs, PrenticeWirth: Algorithms + Data Structures = Programs, Prentice--Hall, 1976Hall, 1976zz Weiss: Data Structures and Algorithm Analysis in C, Addison WeslWeiss: Data Structures and Algorithm Analysis in C, Addison Wesley, 1997ey, 1997

  • UvodUvod

  • 88

    AlgoritamAlgoritam

    to je algoritamto je algoritam??zz Abu Ja'far Mohammed ibn Musa al Khowarizmi (ili al Horezmi, u laAbu Ja'far Mohammed ibn Musa al Khowarizmi (ili al Horezmi, u latinskim tinskim

    tekstovima citiran kao "Dixit Algorizmi" tekstovima citiran kao "Dixit Algorizmi" --> Algorithmus) (oko 825. god.)> Algorithmus) (oko 825. god.)zz Precizno opisan nain rjeenja nekog problemaPrecizno opisan nain rjeenja nekog problemazz Jednoznano odreeno ta treba napravitiJednoznano odreeno ta treba napravitizz Moraju biti definirani poetni objekti koji pripadaju nekoj klasMoraju biti definirani poetni objekti koji pripadaju nekoj klasi objekata na i objekata na

    kojima se obavljaju operacijekojima se obavljaju operacijezz Kao ishod algoritma pojavi se zavrni objekt(i) ili rezultat(i).Kao ishod algoritma pojavi se zavrni objekt(i) ili rezultat(i).zz Konani broj koraka; svaki korak opisan instrukcijomKonani broj koraka; svaki korak opisan instrukcijomzz Obavljanje je algoritamski procesObavljanje je algoritamski proceszz upotrebljiv, ako se dobije rezultat u konanom vremenuupotrebljiv, ako se dobije rezultat u konanom vremenu

    Primjeri za nedoputene instrukcije:Primjeri za nedoputene instrukcije:zz izraunaj 5/0izraunaj 5/0zz uveaj x za 6 ili 7uveaj x za 6 ili 7

  • 99

    AlgoritamAlgoritam

    efikasnost:efikasnost:zz U konanom vremenu moe se dobiti rezultat koristei olovku i paU konanom vremenu moe se dobiti rezultat koristei olovku i papir.pir.

    Primjeri:Primjeri:zz Zbrajanje cijelih brojeva je efikasnoZbrajanje cijelih brojeva je efikasnozz Zbrajanje realnih brojeva nije jer se moe pojaviti broj s beskoZbrajanje realnih brojeva nije jer se moe pojaviti broj s beskonano nano

    mnogo znamenkimnogo znamenki

  • 1010

    ProceduraProcedura

    Postupak koji ima sva svojstva kao i algoritam, ali ne mora zavrPostupak koji ima sva svojstva kao i algoritam, ali ne mora zavriti u iti u konanom broju koraka jest raunarska procedura. U jeziku C to mkonanom broju koraka jest raunarska procedura. U jeziku C to moe oe biti biti voidvoid funkcijafunkcija

    Primjeri za proceduru: Primjeri za proceduru: zz Operacijski sistem raunalaOperacijski sistem raunalazz UreUreiva tekstaiva teksta

    Vrijeme izvoVrijeme izvoenja mora biti "razumno"enja mora biti "razumno" Primjer:Primjer:

    zz Algoritam koji bi izabirao potez igraa aha tako da ispita sve Algoritam koji bi izabirao potez igraa aha tako da ispita sve mogue mogue posljedice poteza, zahtijevao bi milijarde godina na najbrem zaposljedice poteza, zahtijevao bi milijarde godina na najbrem zamislivom mislivom raunalu.raunalu.

    Algoritam

    Procedura

  • 1111

    Algoritmi i programiAlgoritmi i programi

    ProgramProgram -- Opis algoritma koji u nekom programskom jeziku jednoznano Opis algoritma koji u nekom programskom jeziku jednoznano odreodreuje ta raunar treba napraviti.uje ta raunar treba napraviti.

    ProgramiranjeProgramiranje -- nauiti sintaksu nekog proceduralnog jezika i stei osnovna nauiti sintaksu nekog proceduralnog jezika i stei osnovna intuitivna znanja u pogledu algoritmizacije problema opisanog riintuitivna znanja u pogledu algoritmizacije problema opisanog rijeima.jeima.

    Algoritmi + strukture podataka = PROGRAMI (Algoritmi + strukture podataka = PROGRAMI (WirthWirth))zz kako osmisliti algoritmekako osmisliti algoritmezz kako strukturirati podatkekako strukturirati podatkezz kako formulirati algoritmekako formulirati algoritmezz kako verificirati korektnost algoritamakako verificirati korektnost algoritamazz kako analizirati algoritmekako analizirati algoritmezz kako provjeriti (testirati) programkako provjeriti (testirati) program

    Postupci izrade algoritama nisu jednoznani te zahtijevaju i krePostupci izrade algoritama nisu jednoznani te zahtijevaju i kreativnost. Inae ativnost. Inae bi ve postojali generatori algoritama. Znai da se (za sada?) gbi ve postojali generatori algoritama. Znai da se (za sada?) gradivo ovog radivo ovog predmeta ne moe u potpunosti algoritmizirati . Koristit e se ppredmeta ne moe u potpunosti algoritmizirati . Koristit e se programski jezik rogramski jezik C. Za saeti opis sloenijih algoritama moe se koristiti pseudoC. Za saeti opis sloenijih algoritama moe se koristiti pseudokod.kod.

  • StatiStatike strukture podatakake strukture podataka

  • 1313

    Osnovni tipoviOsnovni tipovi

    charchar -- znakovni tip (1 By)znakovni tip (1 By) intint -- cjelobrojni tip (2cjelobrojni tip (2--4 By)4 By) floatfloat -- realni tip (4 By)realni tip (4 By) doubledouble -- realni tip u dvostrukoj preciznostirealni tip u dvostrukoj preciznosti (8 By)(8 By)

    zz Razlika je izmeRazlika je izmeu preciznosti (u preciznosti (precisionprecision) i tanosti () i tanosti (accuracyaccuracy). Preciznost se ). Preciznost se iskazuje brojem prvih vaeih tanih znamenki, a tanost je blisiskazuje brojem prvih vaeih tanih znamenki, a tanost je bliskost stvarnoj kost stvarnoj (nepoznatoj) vrijednosti. Za dovoljnu tanost potrebna je adekva(nepoznatoj) vrijednosti. Za dovoljnu tanost potrebna je adekvatna tna preciznost, ali preciznost ne implicira automatski tanost jer spreciznost, ali preciznost ne implicira automatski tanost jer su iskazane u iskazane znamenke mogle nastati na osnovu npr. pogrenog mjerenja.znamenke mogle nastati na osnovu npr. pogrenog mjerenja.

  • 1414

    Prefiksi ili kvalifikatoriPrefiksi ili kvalifikatori

    Odnose se na cijele brojeva. Duljina ovisi o procesoru.Odnose se na cijele brojeva. Duljina ovisi o procesoru. shortshort -- smanuje raspon vrijednosti koje varijabla moe sadravati smanuje raspon vrijednosti koje varijabla moe sadravati

    (2 By)(2 By) longlong -- poveava raspon vrijednosti koje varijabla moe sadravatipoveava raspon vrijednosti koje varijabla moe sadravati

    (4 By)(4 By) signedsigned -- dozvoljava pridruivanje pozitivnih i negativnih vrijednostidozvoljava pridruivanje pozitivnih i negativnih vrijednosti

    unsignedunsigned -- dozvoljava pridruivanje samo pozitivnih vrijednostidozvoljava pridruivanje samo pozitivnih vrijednosti

  • 1515

    Memorijske klaseMemorijske klase

    memorijska_klasa memorijska_klasa utvrutvruje postojanost (trajnost) i podruje vaenja uje postojanost (trajnost) i podruje vaenja varijable ili polja u memoriji ovisno o mjestu deklaracije u provarijable ili polja u memoriji ovisno o mjestu deklaracije u programu.gramu.

    Postoje 4 memorijske klase:Postoje 4 memorijske klase:zz autoauto automatska (vrijedi lokalno unutar funkcije)automatska (vrijedi lokalno unutar funkcije)zz externextern vanjska (vrijedi globalno unutar programa)vanjska (vrijedi globalno unutar programa)zz staticstatic statika (vrijedi lokalno unutar funkcije ili modula)statika (vrijedi lokalno unutar funkcije ili modula)zz registerregister registarska (vrijedi lokalno unutar funkcije, ali koristi CPUregistarska (vrijedi lokalno unutar funkcije, ali koristi CPU

    registre)registre) Obino se kljuna rijeObino se kljuna rije autoauto ne navodi, te su sve lokalne varijable i polja ne navodi, te su sve lokalne varijable i polja

    definirani unutar neke funkcije automatske klase. Vanjska klasa definirani unutar neke funkcije automatske klase. Vanjska klasa ukazuje ukazuje na varijable i polja koji su globalni (zajedniki) za sve funkcina varijable i polja koji su globalni (zajedniki) za sve funkcije unutar je unutar programa i obino seprograma i obino se externextern ne navodi jer poloaj izvan funkcije ukazuje ne navodi jer poloaj izvan funkcije ukazuje na to.na to.

    Statika klasa se koristi onda kada se vrijednost varijable ili Statika klasa se koristi onda kada se vrijednost varijable ili lanova polja lanova polja treba zadrati nakon izlaska i ponovnog povratka u neku funkcijutreba zadrati nakon izlaska i ponovnog povratka u neku funkciju..

    U opisu algoritama izbjegavat e se globalne varijable da bi se U opisu algoritama izbjegavat e se globalne varijable da bi se eksplicitno eksplicitno ukazalo na razmjenu informacija meukazalo na razmjenu informacija meu funkcijama.u funkcijama.

  • 1616

    Niz znakova; LogiNiz znakova; Logika vrijednostka vrijednost

    Niz znakovaNiz znakova

    zz Numerika vrijednost 0 oznaka je kraja znakovnog niza.Numerika vrijednost 0 oznaka je kraja znakovnog niza.char ime_niza[duljina_niza+1];char ime_niza[duljina_niza+1];

    LogiLogika vrijednostka vrijednostzz U nekim jezicima postoji poseban tip podataka U nekim jezicima postoji poseban tip podataka LOGICALLOGICAL..zz U CU C--u se svaki tip podatka moe koristiti kao logiki.u se svaki tip podatka moe koristiti kao logiki.#define TRUE#define TRUE 11#define FALSE 0

    Z a g r e b \o

  • 1717

    PoljePolje

    Polje je Polje je strukturastruktura podatakapodataka gdje isto ime dijeli vie podataka gdje isto ime dijeli vie podataka Svi podaci u nekom polju moraju biti istog tipa i iste Svi podaci u nekom polju moraju biti istog tipa i iste memorijske klasememorijske klase Elementi (lanovi) polja se identificiraju po Elementi (lanovi) polja se identificiraju po indeksomindeksom Indeks moe biti nenegativni cijeli broj (konstanta, varijabla,Indeks moe biti nenegativni cijeli broj (konstanta, varijabla, cjelobrojni cjelobrojni

    izraz)izraz)x[0] x[9] x[n] x[MAX] x[n+1] x[k/m+5]x[0] x[9] x[n] x[MAX] x[n+1] x[k/m+5]

    Polje moe bitiPolje moe bitizz jednodimenzionalno (vektor)jednodimenzionalno (vektor)#define N 100#define N 100float x[N];float x[N];

    x[0] x[1] x[2] ... x[nx[0] x[1] x[2] ... x[n--2] x[n2] x[n--1] 1]

  • 1818

    PoljePolje

    zz dvodimenzionalno (matrica, tablica)dvodimenzionalno (matrica, tablica)#define N 100#define N 100#define M 50#define M 50float y[M][N];float y[M][N];

    red 1red 1 y[0][0] y[0][1] y[0][2] y[0][ny[0][0] y[0][1] y[0][2] y[0][n--2] y[0][n2] y[0][n--1]1]

    red 2red 2 y[1][0] y[1][1] y[1][2] y[1][ny[1][0] y[1][1] y[1][2] y[1][n--2] y[1][n2] y[1][n--1]1]. . .. . .

    red mred m y[my[m--1][0] y[m1][0] y[m--1][1] y[m1][1] y[m--1][2] y[m1][2] y[m--1][n1][n--2] y[m2] y[m--1][n1][n--1] 1]

  • 1919

    PoljePolje

    zz trodimenzionalno i viedimenzionalnotrodimenzionalno i viedimenzionalno# define N 100define N 100# define M 50# define M 50float z[3][M][N];float z[3][M][N];

    z[2][0][0] z[2][0][nz[2][0][0] z[2][0][n--1]1]z[1][0][0]z[1][0][0]

    z[0][0][0]z[0][0][0]

    z[2][mz[2][m--1][n1][n--1]1]z[1][mz[1][m--1][n1][n--1]1]

    z[0][mz[0][m--1][0] 1][0] z[0][mz[0][m--1][n1][n--1]1]

    Opi oblik naredbe za deklaraciju polja:Opi oblik naredbe za deklaraciju polja:memorijska_klasa tip_podatka polje[izraz1][izraz2]...memorijska_klasa tip_podatka polje[izraz1][izraz2]...

  • 2020

    Pokaziva (Pointer)Pokaziva (Pointer)

    Memorija raMemorija raunaunarra:a:

    zapravo je kontinuirani niz bajtova:zapravo je kontinuirani niz bajtova:

    00 11 22 33 4...4... 6464--128MB128MB

    Svaki bajt ima svoj redni broj: Svaki bajt ima svoj redni broj: adresuadresu

  • 2121

    Deklaracija "obinih" varijabli i pokazivaDeklaracija "obinih" varijabli i pokazivaaazz Deklaracijom varijabli rezervira se prostor u memoriji na slobodDeklaracijom varijabli rezervira se prostor u memoriji na slobodnim nim

    adresama, npr.:adresama, npr.:short a, b;short a, b;

    a ba b

    82560 8256282560 82562

    zz Deklaracijom pokazivaa rezervira se prostor u memoriji u duljinDeklaracijom pokazivaa rezervira se prostor u memoriji u duljini 4 bytea i 4 bytea kako bi se pohranila bilo koja adresa u adresnom prostoru od 4GBkako bi se pohranila bilo koja adresa u adresnom prostoru od 4GB, npr.:, npr.:

    short *p;short *p;a b p a b p

    82560 82562 8256482560 82562 82564

    zz VaVano je primijetiti da deklaracijom ni jednoj od varijabli nije ino je primijetiti da deklaracijom ni jednoj od varijabli nije inicijalizirana nicijalizirana vrijednostvrijednost

  • 2222

    Varijable i pokazivaVarijable i pokazivaiizz Vrijednost pokazivaa svakako treba postaviti prije upotrebeVrijednost pokazivaa svakako treba postaviti prije upotrebep p = &a= &a;;

    a b p a b p 8256082560

    82560 82562 8256282560 82562 82562

    zz Ovime je ostvareno pokazivanje pokazivaOvime je ostvareno pokazivanje pokazivaa a pp na varijablu na varijablu aaa b p a b p

    8256082560

    82560 82562 8256282560 82562 82562

    zz Sada je mogue indirektno postaviti vrijednost varijableSada je mogue indirektno postaviti vrijednost varijable aa*p = 7;*p = 7;

    a b p a b p 7 7 8256082560

    82560 82562 8256282560 82562 82562

  • 2323

    Varijable i pokazivaVarijable i pokazivaiizz Indirektno se moIndirektno se moe i koristiti vrijednost varijable e i koristiti vrijednost varijable aab b = *p= *p;;

    a b p a b p 7 7 7 7 8256082560

    82560 82562 8256282560 82562 82562

    IndirektnaZamjenaVrijednostiIndirektnaZamjenaVrijednosti

    zz Vrijednost pokazivaVrijednost pokazivaa moe se postaviti i rezervacijom slobodne memorijea moe se postaviti i rezervacijom slobodne memorije PrimjerZaMallocPrimjerZaMallocmain () {main () {short int *p;short int *p;p = (short int *) malloc (sizeof (short int));p = (short int *) malloc (sizeof (short int));*p = 7;*p = 7;

    }}zz Valja razlikovati:Valja razlikovati:

    pp pokazivapokaziva veliine 4 bajta na broj tipa veliine 4 bajta na broj tipa short intshort int **pp broj tipa broj tipa short int short int veliine 2 bajta. Ne mora postojati!veliine 2 bajta. Ne mora postojati!

  • 2424

    Aritmetika s pokazivaimaAritmetika s pokazivaima

    Aritmetika s pokazivaima podrazumijeva koritenje jedinica kojeAritmetika s pokazivaima podrazumijeva koritenje jedinica kojeodgovaraju duljini (By) strukture podatodgovaraju duljini (By) strukture podataka aka na koju pokaziva pokazuje.na koju pokaziva pokazuje.

    Uveanje za 1 pokazivaa na strukturu dugaku 4 By znai da se nUveanje za 1 pokazivaa na strukturu dugaku 4 By znai da se njegova jegova vrijednost uveava za 4. Ako je struktura dugaka 8 By, uveanjevrijednost uveava za 4. Ako je struktura dugaka 8 By, uveanjepokazivaa za 1 poveava vrijednost pokazivaa za 8 itd.pokazivaa za 1 poveava vrijednost pokazivaa za 8 itd.

    zz Primjer: Primjer: AritmetikaPokazivacaAritmetikaPokazivaca((longlong = 4 By, = 4 By, doubledouble = 8 By)= 8 By)

    VrijednostiVrijednostilong dugi; double dupli;long dugi; double dupli; pdugipdugi pduplipduplilong *pdugi; double *pdupli;long *pdugi; double *pdupli; ?? ??pdugi = &dugi;pdugi = &dugi; 128560128560 ??pdupli = &dupli;pdupli = &dupli; 128560128560 128564128564++pdugi;++pdugi; 128564128564 128564128564pdupli = pdupli + 2;pdupli = pdupli + 2; 128564128564 128580128580

  • 2525

    Polja i pokazivaiPolja i pokazivai PoljeJePokazivacPoljeJePokazivac#include #include main () {main () {int x[4] = {1,2,3,4};int x[4] = {1,2,3,4};printf ("%d %dprintf ("%d %d\\n", *x, *(x+1));n", *x, *(x+1));f (x);f (x);

    }}void f (int *x) { void f (int *x) { iliili void f (int x[]) {void f (int x[]) {printf ("%d %dprintf ("%d %d\\n", *x, x[0]);n", *x, x[0]);++x;++x;printf ("%d %d %dprintf ("%d %d %d\\n", *x, x[0], *(xn", *x, x[0], *(x--1));1));

    }}Ispis na ekranu:Ispis na ekranu:1 21 21 1 x1 1 x[0] x[1] x[2] x[3][0] x[1] x[2] x[3]2 2 12 2 1 11 22 33 44

  • 2626

    Zapisi (strukture)Zapisi (strukture) Typedef deklaracijaTypedef deklaracija

    typedef stari_tip novi_tip;typedef stari_tip novi_tip;npr.npr.typedef unsigned size_t;typedef unsigned size_t;typedef int redni_broj;typedef int redni_broj;typedef short logical;typedef short logical;redni_broj i, j;redni_broj i, j;size_t velicina;size_t velicina;logical da_ne;

    Definiranje struktureDefiniranje strukturezz Strukture podataka iji se elementi razlikuju po tipu:Strukture podataka iji se elementi razlikuju po tipu:structstruct ime_strukture {ime_strukture {

    tip_elementa_1 ime_elementa_1;tip_elementa_1 ime_elementa_1;tip_elementa_2 ime_elementa_2;tip_elementa_2 ime_elementa_2;

    ......tip_elementa_n ime_elementa_n;tip_elementa_n ime_elementa_n;

    };};

  • 2727

    Zapisi (strukture)Zapisi (strukture)zz PrimjerPrimjerstruct osoba {struct osoba {char jmbg[13+1];char jmbg[13+1];char prezime[40+1];char prezime[40+1];char ime[40+1];char ime[40+1];int visina;int visina;float tezina;float tezina;

    };};Ovime nije deklariran konkretan zapis, ve je samo definirana stOvime nije deklariran konkretan zapis, ve je samo definirana struktura zapisa.ruktura zapisa.Deklaracija konkretnih zapisa:Deklaracija konkretnih zapisa:struct struct ime_strukture zapis1, zapis2, ... , zapisNime_strukture zapis1, zapis2, ... , zapisN;;npr.npr.struct osoba o1, o2, zaposleni[500];struct osoba o1, o2, zaposleni[500];

  • 2828

    Zapisi (strukture)Zapisi (strukture)zz Mogue je definiranje statike strukture podataka proizvoljne slMogue je definiranje statike strukture podataka proizvoljne sloenosti jer pojedini oenosti jer pojedini

    element moe takoer biti element moe takoer biti structstruct::struct student {struct student {

    int maticni_broj;int maticni_broj;struct osoba osobni_podaci;struct osoba osobni_podaci;struct adresa adresa_roditelja;struct adresa adresa_roditelja;struct adresa adresa_u_Zagrebu;struct adresa adresa_u_Zagrebu;struct osoba otac;struct osoba otac;struct osoba majka;struct osoba majka;

    };};Alternativno, koritenjem naredbe Alternativno, koritenjem naredbe typedef:typedef:typedef struct {typedef struct {char jmbg[13+1];char jmbg[13+1];char prezime[40+1];char prezime[40+1];char ime[40+1];char ime[40+1];int visina;int visina;float tezina;float tezina;

    } osoba;} osoba;osoba o1, o2, zaposleni[500];osoba o1, o2, zaposleni[500];

  • 2929

    Zapisi (strukture)Zapisi (strukture)typedef struct {typedef struct {

    int maticni_broj;int maticni_broj;osoba osobni_podaci;osoba osobni_podaci;adresa adresa_roditelja;adresa adresa_roditelja;adresa adresa_u_Zagrebu;adresa adresa_u_Zagrebu;osoba otac;osoba otac;osoba majka;osoba majka;

    } student;} student;

    Referenciranje elemenata zapisaReferenciranje elemenata zapisazapis.element = vrijednost;zapis.element = vrijednost;vrijednost = zapis.element;vrijednost = zapis.element;npr:npr:student pero;student pero;pero.majka.tezina = 92.5;pero.majka.tezina = 92.5;

  • 3030

    Zapisi (strukture)Zapisi (strukture)

    Pokaziva na strukturuPokaziva na strukturustruct osoba *p;struct osoba *p;*p*p -- zapis o osobizapis o osobipp -- adresa zapisa o osobiadresa zapisa o osobizz Referenciranje na element strukture preko pokazivaaReferenciranje na element strukture preko pokazivaapp-->prezime>prezime ili ili (*p).prezime(*p).prezime

    PrimjerZaStructPrimjerZaStruct

  • Elementi izrade programaElementi izrade programa

  • 3232

    Normalan slijed; Bezuslovni skokNormalan slijed; Bezuslovni skok

    Normalan programski slijedNormalan programski slijednaredba_1naredba_1naredba_2naredba_2naredba_3naredba_3

    ......

    Bezuslovni skokBezuslovni skokPseudokod:Pseudokod: C:C:

    idi naidi na oznaka_naredbeoznaka_naredbe gotogoto oznaka_naredbeoznaka_naredbe;;

  • 3333

    GrananjeGrananje

    zz S: Oznaka za jednu ili vie naredbi, odnosno programski odsjeakS: Oznaka za jednu ili vie naredbi, odnosno programski odsjeak uslovno obavljanje naredbi (jednostrana selekcija)uslovno obavljanje naredbi (jednostrana selekcija)

    Pseudokod:Pseudokod: C:C:ako je ako je ((logiki_izrazlogiki_izraz) ) ondaonda if (if (logiki_izrazlogiki_izraz){){

    | | SS S;S;}}

    Grananje (dvostrana selekcija)Grananje (dvostrana selekcija)Pseudokod:Pseudokod: C:C:ako jeako je ((logiki_izrazlogiki_izraz) ) ondaonda if (if (logiki_izrazlogiki_izraz){){

    | | S_1S_1 S_1S_1;;inaeinae } else {} else {

    | | S_2S_2 S_2S_2;;}}

  • 3434

    GrananjeGrananje

    Viestruko grananje (viViestruko grananje (viestrana selekcija)estrana selekcija)Pseudokod:Pseudokod: C:C:

    ako jeako je (logiki_izraz_1) (logiki_izraz_1) ondaonda if (if (logiki_izraz_1logiki_izraz_1) {) {| | S_1S_1 S_1S_1;;

    inae ako jeinae ako je (logiki_izraz_2)(logiki_izraz_2) ondaonda } else if (} else if (logiki_izraz_2logiki_izraz_2) {) {| | S_2 S_2 S_2S_2;;

    inae ako jeinae ako je (logiki_izraz_3) (logiki_izraz_3) ondaonda } else if (} else if (logiki_izraz_3logiki_izraz_3) {) {| | S_3S_3 S_3S_3;;

    ...... ......inaeinae } else {} else {

    | | S_0S_0 S_0S_0;;}}

  • 3535

    GrananjeGrananje

    SkretnicaSkretnicaPseudokod:Pseudokod: C:C:

    skretnicaskretnica (vrijednost)(vrijednost) switch(switch(cjelobrojna vrijednostcjelobrojna vrijednost){){sluajsluaj C1C1 case case C1C1::

    | | S_1S_1 S_1S_1;;break;break;

    sluajsluaj C2C2 case case C2C2::| | S_2S_2 S_2S_2;;

    break;break;...... ......sluajsluaj CnCn case case CnCn::

    | | S_nS_n S_nS_n;;break;break;

    inaeinae default:default:| | S_n+1S_n+1 S_nplus1S_nplus1;;

    }}

  • 3636

    GrananjeGrananjezz Primjer za vjebu: Ostvariti skretnicu naredbom Primjer za vjebu: Ostvariti skretnicu naredbom if if -- else.else.if (vr == C1) {if (vr == C1) {S1;S1;

    } else if (vr == C2) {} else if (vr == C2) {S2;S2;

    }}......

    } else if (vr == Cn) {} else if (vr == Cn) {Sn;Sn;

    } else {} else {S_nplus1;S_nplus1;

    }}zz Ako se iz skretnice izbace naredbe Ako se iz skretnice izbace naredbe breakbreak, obavljaju se slijedno sve naredbe , obavljaju se slijedno sve naredbe

    iza one gdje je prvi put zadovoljeno: iza one gdje je prvi put zadovoljeno: vr == Civr == Ci

  • 3737

    GrananjeGrananjezz Skretnica bez Skretnica bez breakbreak koritenjem naredbe koritenjem naredbe ifif..nadjen = 0;nadjen = 0;if (vr == C1) {if (vr == C1) {S1;S1;nadjen = 1;nadjen = 1;

    }}if (vr == C2 if (vr == C2 |||| nadjennadjen) {) {S2;S2;nadjen = 1;nadjen = 1;

    }}......

    if (vr == Cn if (vr == Cn |||| nadjennadjen) {) {Sn;Sn;

    }}S_nplus1;S_nplus1;

  • 3838

    Programska petljaProgramska petlja

    Petlja s ispitivanjem uslova ponavljanja na poetkuPetlja s ispitivanjem uslova ponavljanja na poetkuPseudokod:Pseudokod: C:C:dok jedok je (logiki_izraz)(logiki_izraz) initiiniti while (while (logiki_izrazlogiki_izraz) {) {

    | | SS SS;;}}

    Petlja s ispitivanjem uslova ponavljanja na krajuPetlja s ispitivanjem uslova ponavljanja na krajuzz U nekim programskim jezicima postoji oblik:U nekim programskim jezicima postoji oblik: REPEAT...UNTILREPEAT...UNTILPseudokod:Pseudokod: C:C:ponavljatiponavljati do {do {

    | | SS SS;;dodo ((logiki_izraz)logiki_izraz) } while(!} while(!logiki_izrazlogiki_izraz))zz Standardna petlja u CStandardna petlja u C--u:u:Pseudokod:Pseudokod: C:C:ponavljatiponavljati do {do {

    | | SS SS;;dok dok jeje (logiki_izraz)(logiki_izraz) }} while (while (logiki_izrazlogiki_izraz););

  • 3939

    Programska petljaProgramska petlja

    Petlja s poznatim brojem ponavljanjaPetlja s poznatim brojem ponavljanjaPseudokod:Pseudokod: C:C:zaza ii := := pocpoc dodo krajkraj ((korakkorak kk) ) initiiniti for(i=poc;i

  • 4040

    Programska petljaProgramska petlja

    Skok iz petljeSkok iz petljePseudokod:Pseudokod: C:C:

    izaizai iz petljei iz petlje break;break;skoi na kraj petljeskoi na kraj petlje continue;continue;

    Beskonana petljaBeskonana petljaPseudokod:Pseudokod: C:C:

    ponavljajponavljaj while(1) {while(1) {||SS S;S;

    zauvijekzauvijek }}

    zz U algoritmima ovakva petlja nije doputena jer je u suprotnosti U algoritmima ovakva petlja nije doputena jer je u suprotnosti sa zahtjevom da sa zahtjevom da postupak bude konaan. postupak bude konaan.

  • 4141

    Programska petljaProgramska petlja

    zz U tijelu petlje mora postojati barem jednom ispitivanje uslova zU tijelu petlje mora postojati barem jednom ispitivanje uslova za izlazak iz petlje:a izlazak iz petlje:while(1) {while(1) {

    S1S1;;if (if (logiki_izrazlogiki_izraz) break;) break;S2S2;;......

    } } iliiliwhile(1) {while(1) {

    S1S1;;if (if (logiki_izrazlogiki_izraz) goto ) goto oznaka_naredbeoznaka_naredbe;;S2S2;;......

    }}zz Naredbu Naredbu gotogoto treba izbjegavati ako je ikako mogue. Smanjuje se mogunost treba izbjegavati ako je ikako mogue. Smanjuje se mogunost

    pogreke i olakava testiranje programa ako svaka programska cjepogreke i olakava testiranje programa ako svaka programska cjelina (npr. lina (npr. petlja) ima samo jedan ulaz i jedan mogui izlaz.petlja) ima samo jedan ulaz i jedan mogui izlaz.

  • 4242

    ProcedureProcedure

    Programi se sastoje od procedura. Prva pozvana procedura je glavProgrami se sastoje od procedura. Prva pozvana procedura je glavni ni program. Kad glavni program zavri, slijedi povratak u operaprogram. Kad glavni program zavri, slijedi povratak u operativntivni sistem. i sistem. Inae, povratak iz procedure je uvijek na onu proceduru koja ju Inae, povratak iz procedure je uvijek na onu proceduru koja ju je pozvala. je pozvala. Uobiajena je podjela na funkcije (Uobiajena je podjela na funkcije (functionfunction) koje imaju od nula do vie ) koje imaju od nula do vie ulaznih argumenata i vraaju jedan rezultat, te na openite potpulaznih argumenata i vraaju jedan rezultat, te na openite potprograme rograme ((subroutinesubroutine) koje rezultat predaju argumentima.) koje rezultat predaju argumentima.

    U jeziku C sve procedure su funkcije koje daju rezultat nekog odU jeziku C sve procedure su funkcije koje daju rezultat nekog od tipova tipova podataka, ali mogu mijenjati i vrijednost argumenata.podataka, ali mogu mijenjati i vrijednost argumenata.

    Posebni sluajevi:Posebni sluajevi:zz Glavni program:Glavni program: mainmainzz Potprogram koji u imenu ne vraa vrijednost:Potprogram koji u imenu ne vraa vrijednost: voidvoid

  • 4343

    Razmjena podataka izmeRazmjena podataka izmeu funkcijau funkcija

    globalne varijableglobalne varijable argumenti navedeni u zagradi, prenose se vrijednosti (argumenti navedeni u zagradi, prenose se vrijednosti (call by valuecall by value)) za prijenos vrijednosti u pozivajuza prijenos vrijednosti u pozivajuu funkcijuu funkciju koriste se kod poziva funkcije koriste se kod poziva funkcije

    kao argumenti adrese, a u definiciji funkcije argumenti su pokazkao argumenti adrese, a u definiciji funkcije argumenti su pokazivai (ivai (call by call by referencereference).).

    Ako funkcija mora predati rezultat preko argumenata, Ako funkcija mora predati rezultat preko argumenata, obavezobavezno se koristi no se koristi call by referencecall by reference..

    Primjer: zamjena vrijednosti dvije cjelobrojne varijable Primjer: zamjena vrijednosti dvije cjelobrojne varijable KomunikacijaSFunkcijamaKomunikacijaSFunkcijama

  • 4444

    UlaznoUlazno--izlazne operacijeizlazne operacije

    Za slijedno itanje/pisanje preko standardnih ulaznoZa slijedno itanje/pisanje preko standardnih ulazno--izlaznih jedinica koristit izlaznih jedinica koristit e se odgovarajue C funkcije ili naredbe pseudokoda:e se odgovarajue C funkcije ili naredbe pseudokoda:zz ulazulaz (lista adresa argumenata)(lista adresa argumenata)zz izlazizlaz (lista argumenata)(lista argumenata)

    Kod itanja je dakle nuan Kod itanja je dakle nuan call by referencecall by reference, dok kod ispisa moe posluiti i , dok kod ispisa moe posluiti i call by value.call by value.

  • 4545

    Dvodimenzionalna i viedimenzionalna polja kao Dvodimenzionalna i viedimenzionalna polja kao argumenti funkcijeargumenti funkcije

    zz Polje u funkciji treba doekati kao jednodimenzionalno polje iliPolje u funkciji treba doekati kao jednodimenzionalno polje ili pokaziva.pokaziva.zz Primjer:Primjer:int polje[3][4] = { { 1, 2, 3, 4},int polje[3][4] = { { 1, 2, 3, 4},

    { 5, 6, 7, 8},{ 5, 6, 7, 8},{ 9, 10, 11, 12} };{ 9, 10, 11, 12} };

    u memoriji raunau memoriji raunarra spremljeno je kaoa spremljeno je kao

    tj. jednako kao jednodimenzionalno polje od 12 elemenata.tj. jednako kao jednodimenzionalno polje od 12 elemenata.zz Razlikuju se fizike dimenzije polja od logikih, koje mogu bitiRazlikuju se fizike dimenzije polja od logikih, koje mogu biti i manje. Za i manje. Za

    pozicioniranje je potrebno znati fiziki broj stupaca pozicioniranje je potrebno znati fiziki broj stupaca (MAX_broj_stupaca).(MAX_broj_stupaca).zz Za dohvat elementa izZa dohvat elementa iz ii--tog rtog redaeda treba preskoititreba preskoiti ii--1 1 punih redpunih redovova.a.zz Kako prvi red ima indeks 0, drugi 1, trei 2 itd., za dohvat eleKako prvi red ima indeks 0, drugi 1, trei 2 itd., za dohvat elemenata retka s menata retka s

    indeksomindeksom ii treba preskoititreba preskoiti i*i*MAX_broj_stupacaMAX_broj_stupaca lanova poljalanova polja..zz Openito: Openito: dvodim_polje[i][j] dvodim_polje[i][j] jednodim_polje[i * MAX_broj_stupaca + j]jednodim_polje[i * MAX_broj_stupaca + j]zz Primjer koritenja dvodimenzionalnog polja u potprogramu:Primjer koritenja dvodimenzionalnog polja u potprogramu: DvodimenzionalnoPoljeDvodimenzionalnoPolje

    11 22 33 44 55 66 77 88 99 1010 1111 1212

  • 4646

    Pisanje strukturiranih programaPisanje strukturiranih programa Osnovni naputciOsnovni naputci

    zz specifikacija ulaznih i izlaznih varijabli ( u C obvezatno!)specifikacija ulaznih i izlaznih varijabli ( u C obvezatno!)zz definicija lokalnih varijablidefinicija lokalnih varijablizz tok programa prema dolje, osim petlji i neizbjene goto naredbetok programa prema dolje, osim petlji i neizbjene goto naredbezz poravnati naredbe istporavnati naredbe istogog nivoanivoa za poveanje itkosti (za poveanje itkosti (indentationindentation))zz dokumentacija kratka ali smislenadokumentacija kratka ali smislenazz koristiti potprograme gdje je to primjerenokoristiti potprograme gdje je to primjereno

    Izbor vrste petljeIzbor vrste petljezz Primjer: itati lanove nekog skupa nenegativnih brojeva sve dokPrimjer: itati lanove nekog skupa nenegativnih brojeva sve dok njihova suma njihova suma

    ne premai neki predvieni iznos ne premai neki predvieni iznos nn..y = 0;y = 0;do {do {

    ulaz(&x);ulaz(&x);y += x;y += x;

    } while (y

  • 4747

    Pisanje strukturiranih programaPisanje strukturiranih programazz Primjer: ProitatiPrimjer: Proitati n n vrijednosti i obraditi ih procedurom vrijednosti i obraditi ih procedurom PROCES. PROCES. Koritenjem Koritenjem

    petljepetlje while:while:i = 0;i = 0;while (i < n) {while (i < n) {

    ulaz(&x);ulaz(&x);PROCES(x);PROCES(x);i++;i++;

    }}S obzirom da je unaprijed poznat broj ponavljanja, primjerenije S obzirom da je unaprijed poznat broj ponavljanja, primjerenije je koristiti petlju je koristiti petlju s poznatim brojem ponavljanja:s poznatim brojem ponavljanja:for (i = 0; i < n; i++) {for (i = 0; i < n; i++) {

    ulaz(&x);ulaz(&x);PROCES(x);PROCES(x);

    }}Ne radi se samo o manjem broju naredbi, nego se smanjuje i moguNe radi se samo o manjem broju naredbi, nego se smanjuje i mogunost greke nost greke u pisanju programa.u pisanju programa.

  • 4848

    Pisanje strukturiranih programaPisanje strukturiranih programazz Primjer: Treba proitati i obraditi skup podataka sve dok ne naPrimjer: Treba proitati i obraditi skup podataka sve dok ne naiie oznaka kraja e oznaka kraja

    podataka podataka (EOF)(EOF). . Realizacija petljomRealizacija petljom whilewhile::ulaz(&x);ulaz(&x);while (x != EOF) {while (x != EOF) {PROCES(x);PROCES(x);ulaz(&x);ulaz(&x);

    }}Treba dakle proitati prvi podatak, obrauje ga se samo ako postTreba dakle proitati prvi podatak, obrauje ga se samo ako postoji, a nakon oji, a nakon obrade ita se sljedei podatak koji se obradi u iduem prolaskuobrade ita se sljedei podatak koji se obradi u iduem prolasku kroz petlju.kroz petlju.Bolje je rjeenje skokom iz petlje:Bolje je rjeenje skokom iz petlje:while (1) {while (1) {ulaz(&x);ulaz(&x);if (x == EOF) break;if (x == EOF) break;PROCES(x);PROCES(x);

    }}Ne naruava se eljeni princip da iz jednog programskog bloka poNe naruava se eljeni princip da iz jednog programskog bloka postoji samo stoji samo jedan izlaz.jedan izlaz.

  • 4949

    Pisanje strukturiranih programaPisanje strukturiranih programaz Ako ima dva kriterija za zavretak petlje: kraj podataka ili da Ako ima dva kriterija za zavretak petlje: kraj podataka ili da rezultat procedurerezultat procedure

    PROCESPROCES, pohranjen u varijabli, pohranjen u varijabli y y bude nula:bude nula:do {do {

    ulaz(&x);ulaz(&x);if (x == EOF) break;if (x == EOF) break;PROCES(x, &y);PROCES(x, &y);

    } while (y != 0);} while (y != 0);if (x != EOF) {if (x != EOF) {......

    } else {} else {......

    }}Na izlasku iz programskog segmenta ne zna se zbog ega je petljaNa izlasku iz programskog segmenta ne zna se zbog ega je petlja zavrila pa se zavrila pa se to mora ispitivati.to mora ispitivati.

    Koritenje naredbeKoritenje naredbe casecasezz Uvijek se moe upUvijek se moe upotrijeotrijebiti elementarnija naredbabiti elementarnija naredba ifif--elseelse. Naredba . Naredba casecase je u je u

    prednosti kad ima mnogo ravnopravnih grananja.prednosti kad ima mnogo ravnopravnih grananja.

  • 5050

    VieoblijeVieoblije; Logi; Logike operacijeke operacije

    Razlika izmeRazlika izmeu opisa algoritma i realizacije u opisa algoritma i realizacije -- vivieoblijeeoblijezz Deklarirat e se tip varijable tamo gdje je to jednoznano za alDeklarirat e se tip varijable tamo gdje je to jednoznano za algoritam. C ne goritam. C ne

    podrava vieoblije (polimorfizam). Umjesto nekog od elementarnpodrava vieoblije (polimorfizam). Umjesto nekog od elementarnih tipova ih tipova moe se (zahvaljujui naredbi moe se (zahvaljujui naredbi typedeftypedef), koristiti openiti), koristiti openiti tiptip..

    zz Primjer: TraPrimjer: Traenje najveeg lana u jednodimenzionalnom poljuenje najveeg lana u jednodimenzionalnom polju MaxClanStdMaxClanStd

    Obavljanje logikih operacijaObavljanje logikih operacijazz U analizi algoritama pretpostavljat e se obavljanje logikih opU analizi algoritama pretpostavljat e se obavljanje logikih operacija na eracija na

    najkrai nain (reducirano ispitivanje, najkrai nain (reducirano ispitivanje, shortshort--circuit evalationcircuit evalation). Npr. logiki izraz ). Npr. logiki izraz (logiki_izraz1 (logiki_izraz1 logiki_izraz2)logiki_izraz2) daje odmah rezultat daje odmah rezultat truetrue ako je ako je logiki_izraz1 logiki_izraz1 = true= true, bez vrednovanja za , bez vrednovanja za logiki_izraz2logiki_izraz2. Analogno . Analogno (logiki_izraz1 (logiki_izraz1 logiki_izraz2)logiki_izraz2) daje odmah rezultat daje odmah rezultat false false ako je ako je logiki_izraz1 = falselogiki_izraz1 = false..