mark

Upload: petar-petkovic

Post on 09-Mar-2016

262 views

Category:

Documents


0 download

DESCRIPTION

l

TRANSCRIPT

  • 1. Intuitivna definicija algoritma

    Algoritam je jedan od osnovnih pojmova matematike i raunarstva. Prve algoritme sreemo kod starih Grka.

    Svima su poznati Euklidov algoritam i Eratostenovo sito (250. g. p. n.e.) Algoritam predstavlja uputstvo za

    reavanje nekog zadatka u cilju dobijanja reenja (posle konano mnogo vremena).

    Primena procedure moe dovesti do sledea tri sluaja: 1) Primena procedure predstavlja beskonaan proces. Reenje zadatka se u tom sluaju ne moe dobiti posle konano mnogo koraka, odnosno, posle koanno mnogo vremena. Procedura ne daje rezultat.

    2) Primena procedure se prekida posle konano mnogo koraka i ne dobija se rezultat. Proces raunanja se ne moe nastaviti jer se ne zna korak na koji se prenosi izvrenje. Uzrok ove situacije mogu biti pogreni ulazni podaci (ili pogreno definisana procedura). U prethodna dva sluaja kaemo da imamo nerezultativnu proceduru.

    3) Proces primene procedure se prekida posle konano mnogo koraka sa dobijanjem rezultata. Reenje zadatka postoji i moe se dobiti primenom procedure (rezultativne).

    Algoritam je konaan skup strogo definisanih algoritamskih koraka ijom primenom na ulazne podatke (i

    meurezultate) dobijamo reenje zadatka posle konano mnogo vremena.

    2. Osnovne osobine algoritma

    Diskretnost. Svaki algoritam predstavlja konaan ureen skup algoritamskih koraka. To je rezultat

    dekompozicije (diskretizacije) problema koji se reava od strane oveka. Pri tome, algoritam nije skup

    algoritamskih koraka, ve ureen skup ili niz, jer je bitan redosled algoritamskih koraka u zapisu algoritma.

    Takoe kamo da je proces izvrenja algoritma diskretan u vremenu. To znai da se u svakom vremenskom

    trenutku (intervalu) izvrava samo jedan algoritamski korak. Proces izvravanja algoritma jeste konaan niz

    algoritamskih koraka koji se po strogo definisanom redosledu izvravaju. To je sluaj kada imamo jednog

    izvrioca algoritma (jedan procesor). Postoje i paralelni algoritmi, koji omoguuju da se dva ili vie

    algoritamskih koraka izvravaju istovremeno.

    Determinisanost (odreenost). Svaki algoritamski korak treba da je definisan jasno, strogo (tano) i nedvosmisleno. Tumaenje i izvravanje pravila algoritma ne sme zavisiti od volje oveka ili maine. Posle izvrenja nekog algoritamskog koraka strogo je definisan prelaz na sledei algoritamski korak. To znai da je izvrenje algoritma deterministiki proces i da se moe automatski izvravati. Opis algoritma na prirodnom jeziku moe dovesti do dvosmislenosti.

    Izvrivost. Uspenu definiciju izvrivosti dao je D. Knut. On kae da je algoritamski korak izvriv ako je ovek u stanju da ga izvri za konano vreme (pomou olovke i papira). Kod algoritamski reivih zadataka nema neizvrivih koraka. Meutim, mogue je lako formulisati pravilo koje nije izvrivo. Na primer: Ako razvoj broja PI sadri 7 uzastopnih devetki tada sabrati sve preostale cifre.

    Konanost. Osobina konanosti algoritma jeste zahtev da se izvrenje svakog algoritma zavri posle konano mnogo vremena. Drugim reima,izvrenje svakog algoritma je postignuto posle konano mnogo primena algoritamskih koraka. Zbog osobina 1. i 3. to znai da svaki algoritamski korak ma kog algoritma mora da se izvri konano mnogo puta. U suprotnom, nemamo algoritam. Iako imamo konano mnogo algoritamskih koraka, pri emu je svaki od njih strogo definisan i izvriv, ovo nije algoritam. Kod sloenijih algoritama (zadataka) javlja se potreba formalnog dokaza konanosti algoritma.

    Ulaz i izlaz algoritma. Svaki algoritam ima dva posebno izdvojena (konana) skupa podataka (veliina). Prva jeste skup ulaznih a druga skup izlaznih veliina. Broj veliina u ovim skupovima moe biti i nula. Skup ulaznih veliina algoritma predstavlja polazne veliine (podatke) zadatka koji se reava. Skup izlaznih veliina jeste traeno reenje (rezultat) postavljenog zadatka. Ukratko, ove skupove nazivamo ulaz i izlaz algoritma. (Za podatke koji na pripadaju skupu ulaznih podataka algoritma kaemo da algoritam nije primenljiv).

    6. Masovnost (Univerzalnost). Univerzalnost je osobina algoritma da se moe primeniti na to iru klasu problema. To upravo znai da ulazne veliine algoritma mogu uzimati poetne vrednosti iz to obilnijih

  • (masovnijih) skupova podataka. Algoritam jeste opte uputstvo koje se moe primeniti na ma koji izbor vrednosti ulaznih veliina. Zbog ove osobine,moemo rei da je algoritam bolji ukoliko je univerzalniji (termin masovnost manje odgovara ovoj osobini).

    7. Elementarnost algoritamskih koraka. Algoritam treba da sadri algoritamske korake koji predstavljaju elementarne operacije koje korisnik algoritma moe da razume ili izvrilac algoritma da izvri. Za potrebe oveka, algoritamski koraci mogu biti kompleksnije fundamentalne ili logike celine u sloenom algoritmu. Meutim, za potrebe pisanja programa, algoritam sadri elementarne algoritamske korake koji odgovaraju naredbama ili pozivima potprograma, algoritam sadi elementarne algoritamske korake koji odgovaraju naredbama ili pozivima potprograma programskog jezika.

    8. Rezultativnost (usmerenost). Algoritam je tako definisan da polazei od proizvoljnih vrednosti ulaznih veliina primena algoritamskih koraka vodi (usmerava) strogo ka dobijanju traenog rezultata.

    3. Naini izvravanja algoritamskih koraka Analizom izvrenja algoritma mogu se uoiti tri naina izvravanja algoritamskih koraka: sukcesivno (sekvencijalno), sa granicom i cikliko. a) Sukcesivno izvravanje algoritamskih koraka jeste takvo da se koraci izvravaju jedanput i u redosledu kako su napisani. Takvi algoritamski koraci ine prostu linijsku algoritamsku strukturu ili sekvencu (nisku) algoritamskih koraka.

    b) Izvravanje algoritamskih koraka tako da se neki izvre jedanput a neki nijednom predstavlja primer izvravanja sa grananjem (ili prelazom). Takvu algoritamsku strukturu nazivamo razgranatom linijskom algoritamskom strukturom.

    c) Cikliko izvravanje se javlja kada se grupa algoritamskih koraka izvrava vie puta. Takvu grupu naredbi nazivamo ciklikom algoritamskom strukturom ili ciklusom.

    4. Paralelnost, efikasnost i elegantnost algoritma

    Paralelnost (jednovremenost). Algoritam definiemo kao konaan skup algoritamskih koraka. Taj skup je ureen jer se njime definie prirodan redosled izvravanja koraka sa mogunou grananja ili ponovnog izvravanja. Za izvrenje algoritma kaemo da je niz primena algoritamskih koraka. Prednost dajemo prvom terminu jer postoje algoritmi u kojima se moe promeniti redosled nekih algoritamskih koraka a da se

    reenje ne menja. Takve algoritamske korake moemo izvravati istovremeno (paralelno), pomou vie izvrioca (procesora). Algoritmi koji definiu paralelno izvravanje algoritamskih koraka jesu

    paralelni algoritmi, a paralelni procesori izvravaju takve algoritme.

    Efikasnost (efektivnost). Dva razliita algoritma koji reavaju jedan isti zadatak moemo uporeivati u odnosu na neki izbrani kriterijum. Rezultat uporeivanja moe biti da je jedan algoritam bolji ili efikasniji od drugog. Izbor kriterijuma moe biti razliit. Najee se pravi kompromis izmeu razliitih kriterijuma (vreme memorija, jednostavnost brzina ). esto puta neki efikasni algoritmi zavise od izbora ulaznih podataka algoritma. Tako imamo efikasne algoritme sortiranja podataka za sluajno izabrane (neureene) podatke ili pak za delimino ureene.

    Elegantnost. Elegantnost moe biti subjektivan kriterijum za izbor algoritma, ali se esto koristi. Elegantno reenje zadatka jeste ono koje je prosto (jednostavno) i originalno. Jednostavnost reenja je uvek poeljno ali je pitanje da li su uvek mogua originalna reenja. Pod originalnou reenja podrazumeva se njegova neoiglednost.

    5. Naini zapisivanja algoritma Opis algoritma ima dva osnovna cilja :

    - Da je algoritam razumljiv raznim korisnicima tako da se moe koristiti ili prenositi;

    - Da se na osnovu njega moe pisati program na nekom (algoritamskom) programskom jeziku u cilju izvravanja na raunaru.

    Postoji nekoliko najee korienih naina za zapis algoritama,a to su : a) skup pravila (pomou prirodnog jezika);

    b) dijagram toka (pomou grafikih tabela);

  • c) pseudokod.

    6. Zapis algoritma skupom pravila

    Zapis algoritama pomou skupa pravila ima zadatak da pregledno, jasno i tano opie algoritamske korake pomou rei, simbola i reenica prirodnog jezika. Oblik pravila algoritma je na odreen nain precizan tako da su ona jasna i razumljiva svakome.

    Navodimo neka najee upotrebljavana pravila za zapis algoritma : - Pravilo dodeljivanja : :=

    Izraunata vrednost izraza dodeljuje se promenljivoj sa leve strane simbola dodeljivanja := . Alternativni simboli mogu biti = , ->...

    - Pravilo uslovnog grananja : if then

    Ako je ispunjen tada se izvrava ,a u suprotnom prelazi se na sledee pravilo. - Pravilo grananja : if then

    else

    Ako je ispunjen izvrava se ,a u suprotnom . - Pravilo bezuslovnog grananja (skoka) : go to

    Ovo pravilo ukazuje da se prekida prirodni redosled izvrenja pravila algoritma i zahteva prelaz na pravilo oznaeno sa . - Pravilo za prekid izvrenja algoritma : Kraj (Stop) Posle izvrenja ovog pravila prekida se izvrenje algoritma. - Pravilo za ulaz podataka : Ulaz () - Pravilo za izlaz podataka : Izlaz () - Pravilo ciklusa : Ponavljaj . . .

    Sve dok se ne ispuni

    Ovo pravilo definie ponovljeno izvravanje niza pravila ,. . . , sve dok nije

    ispunjen. Kada se ispuni prelazi se na sledee pravilo.

    7. Zapis algoritma dijagramom toka

    Jedan od najjednostavnijih i esto korienih naina zapisa algoritama jeste dijagram toka (ili blok ema) algoritma (tokovnik). Dijagram toka predstavlja jednu varijantu grafikog opisa algoritma.

    Svaki algoritamski korak predstavljen je grafikim simbolom (blokom). Svi blokovi su povezani linijama sa moguim strelicama. Na taj nain se zadaje struktura algoritma i redosled izvravanja algoritamskih koraka. Oblik grafikog simbola ukazuje na vrstu algoritamskog koraka,odnosno njegovu funkciju u algoritmu. U tabeli su dati najee korieni grafiki simboli i njihova funkcija.

    Proizvoljna algoritamska ema se u optem sluaju moe razloiti na elementarne eme (ili elementarne algoritamske strukture). Postoje tri vrste elementarnih ema: 1) linijska (sekvenca)

    2) razgranata (grananje)

    3) ciklika (ciklus)

    Pokazuje se da je dovoljno imati na raspolaganju jednu linijsku, jednu razgranatu i jednu cikliku elementarnu emu da bi se realizovala proizvoljna algoritamska struktura.

  • Viestruko grananje moemo realizovati kada (na izlaz nekog algoritamskog koraka) u okviru jedne od grana

    umetnemo novu razgranatu emu.

    8. Pseudojezik kao opti model viih programskih jezika

    Za definiciju pseudojezika kao opteg modela viih programskih jezika neophodno je obuhvatiti sledee

    etiri fundamentalne komponente:

    (1) Tipovi i strukture podataka koje pseudojezik podrava:

    - statiki skalarni tipovi,

    - statiki strukturirani tipovi,

    - dinamiki tipovi sa promenljivom veliinom,

    - dinamiki tipovi sa promenljivom strukturom.

    (2) Osnovne kontrolne strukture koje se primenjuju u pseudojeziku:

    - sekvenca,

    - selekcije,

    - ciklusi,

    - skokovi.

    (3) Operacije ulaza i izlaza podataka:

    - ulaz/izlaz podataka za ulazno-izlazne ureaje i datoteke, - konverzija tekstualnog i binarnog formata podataka.

    (4) Tehnike modularizacije programa:

    - nezavisne funkcije i procedure,

    - interne funkcije i procedure,

    - rekurzivne funkcije i procedure.

    Razni tipovi podataka neophodni su u programskim jezicima da bi podraavali razne tipove objekata koje

    sreemo u matematikim modelima. Podaci mogu biti skalarni ili strukturirani. Podatak je strukturiran

    ukoliko se sastoji od vie komponenti koje se nalaze u precizno definisanom odnosu. Primer strukturiranog

    objekta je pravougaona matrica realnih brojeva kod koje svaki element predstavlja komponentu koja se

    nalazi u odreenom odnosu sa ostalim komponentama. Podatak je skalaran ukoliko se ne sastoji od

    jednostavnijih komponenti. Jedan od skalarnih tipova podataka na svim programskim jezicima je celobrojni

    tip podataka. Lako je uoiti da za svaki tip podataka postoje operacije koje za njih vae, a ne vae za druge

    tipove podataka. Tako je na primer inverzija matrice operacija koja se ne primenjuje na celobrojne skalare,

    na isti nain kao to se operacija celobrojnog deljenja dva skalara ne moe primeniti na matrice.

    Osnovne kontrolne strukture su izuzetno vana komponenta svakog programskog jezika. Pomou njih se

    odreuje redosled izvravanja operacija koje raunar obavlja.

    Da bi se omoguilo komuniciranje raunara sa spoljnim okruenjem potrebne su instrukcije ulaza i izlaza

    podataka. Pri tome podaci mogu da se uitavaju sa tastature ili iz datoteka i da se prenose na ekran, tampa,

    ili u datoteke.

    Pod datotekom (file) podrazumevamo osnovnu organizaciju podataka koja obuhvata proizvoljan broj manjih

    jednoobrazno strukturiranih celina koje se nazivaju zapisi. Svaki zapis sadri podatke o jednoj jedinici

    posmatranja.

    9. Azbuka programskih jezika

    Azbuka jezika predstavlja osnovni skup simbola (znakova) od kojih se grade sve sintaksne

    kategorije jezika. Broj znakova azbuke se obino razlikuje od jezika do jezika i kree se od najmanje 48 do 90 znakova. Azbuka programskog jezika obino obuhvata skup velikih i malih slova engleske abecede, skup dekadnih cifara i odreeni skup specijalnih znakova. Dok je kod starijih programskih jezika bilo uobiajeno da se koriste samo velika slova (na primer FORTRAN IV), danas se skoro redovno dozvoljava i ravnopravno korienje malih slova

  • abecede. Azbuke programskih jezika se najvie razlikuju po skupu specijalnih znakova koje obuhvataju. Narednih nekoliko primera azbuka programskih jezika to ilustruje.

    Azbuka jezika C : velika slova: A | B| C | D| E| F|G|H|I|J|K|L|M|N|0| P|Q| R|S|T|U|V|W|X|Y|Z

    cifre: 0 |1 |2|3|4|5|6|7|8|9

    specijalni znaci: + | - | * | / |= | ( | ) | { \ } \ [ | ] \ < | > | ' | " | ! | # | \ | % | & | | | | _ | ^ | | ~ \ , \ ; | : | ?

    znak blanko

    mala slova: a | b | c | d | e| f|g|h| i| j| k|l|m|n|o|p|q|r|s| t|u| v|w|x|y|z

    Danas se obino skup specijalnih znakova azbuke programskog jezika standardizuje i svodi na skup znakova meunarodnog standardnog koda ISO7 (ASCII kod). b | ! | " | $ | % | & | ' | ( | ) | * | + | , | - | . | / | : | ; | < | = | > | ? | @ | [ | ] | \ | ^ ili _ | ` | { | } | ~

    eto se pored osnovnog skupa specijalnih znakova koriste i sloeni simboli, obino dvoznaci, kao na primer:

    | ** | >= | | =< | < | := | -> | /* | */ |

    10. Identifikatori i rezervisane rei Identifikatori su uvedene rei kojima se imenuju konstante, promenljive, potprogrami, programski moduli, klase, tipovi podataka i slino. U svim programskim jezicima postoji slina konvencija za pisanje identifikatora. Identifikatori su nizovi koji se obino sastoje od slova i cifara i obavezno zapoinju slovom. Ovo ogranienje omoguava jednostavniju implementaciju leksikog analizatora i razdvajanje identifikatora od drugih sintaksnih kategorija (numerikih i znakovnih konstanti na primer). Slede primeri nekih identifikatora:

    ALFA A B1223 Max_vrednost PrimerPrograma

    U jeziku C velika i mala slova se razlikuju. Programski jezik PASCAL ne razlikuje velika i mala slova.

    Re jezika ije je znaenje utvreno pravilima tog jezika naziva se rezervisana re. Rezervisane rei mogu da budu zabranjene, kada se ne mogu koristiti kao identifikatori u programu. Takav je sluaj u programskom jeziku C. Meutim, i u jezicima u kojima je to dozvoljeno ne preporuuje se korienje kljunih rei kao identifikatora jer moe da smanji preglednost programa, a u nekim sluajevima da dovede i do ozbiljnih greaka u programu. Poznat je, na primer, sluaj greke sa DO naredbom koji je doveo do pada letilice iz satelitskog programa Gemini 19. U programu za upravljanje letilicom stajala je DO

    naredba napisana kao:

    DO 10 I = 1.10

    umesto ispravnog koda

    DO 10 I = 1,10.

    Greka pri prevoenju meutim nije otkrivena jer je leksiki analizator ovu liniju kda protumaio kao naredbu dodeljivanja

    DO10I = 1.10

    u kojoj se promenljivoj D010I dodeljuje vrednost 1.10. Greka je otkrivena tek u fazi izvravanja programa kada je prouzrokovala pad letelice.

    Rezervisane rei jezika C: auto, break, case, char, const, continue, default, do, double, else, enum, extern, float, for, goto, if, int, long,

    register, return, short, signed, sizeof, static, struct, switch, typedef, union, unsigned, void, voatile, while.

    11. Konstante u programskim jezicima

    Veliina koja u toku izvravanja programa uvek ima samo jednu vrednost, koja se ne moe menjati, naziva se konstanta. U nekim programskim jezicima (Pascal, Ada, C) postoji mogunost imenovanja konstante. Konstantama se dodeljuju imena koja se u programu koriste umesto njih. Na taj nain nastaju simbolike konstante.

    U jeziku C se koristi vie vrsta konstanti i to su: - celobrojne konstante; 2, 3, +5, -123

    - karakteri: 'a', 'b', ... ;

    - stringovi: sekvence karaktera izmeu navodnika.

    Konstante

  • Konstantni tip je izvedeni tip. Dobija se iz nekog osnovnog tipa pomou specifikatora const.

    Konstantni tip zadrava sve osobine osnovnog tipa, samo se podatak ne moe menjati. - Primeri: const float pi=3.14; const char plus='+';

    Konstanta mora da se inicijalizuje pri definisanju.

    Prevodilac esto ne odvaja memorijski prostor za konstantu.

    Konstante mogu da se koriste u konstantnim izrazima koje prevodilac treba da izrauna u toku prevoenja. Na primer, konstante mogu da se koriste u izrazima koji definiu dimenzije nizova.

    Umesto simbolikih konstanti koje se uvode sa #define preporuka je koristiti tipizirane konstante koje se uvode sa const.

    Dosledno korienje konstanti u programu obezbeuje podrku prevodioca u spreavanju greaka.

    12. Promenljive i komentari u programskim jezicima

    Veliine ije se vrednosti menjaju u toku izvravanja programa nazivaju se promenljive. Promenljivoj se u programu dodeljuje ime, i u svakom trenutku ona je definisana svojom vrednou. Kaemo da je svaka promenljiva u programu povezana sa tri pojma:

    imenom - identifikatorom promenljive.

    referencom - pokazivaem koji odreuje mesto promenljive u memoriji i vrednou - podatkom nad kojim se izvravaju operacije.

    U svim programskim jezicima postoji mogunost proirenja izvrnog koda programa komentarima kojima se kod dodatno pojanjava. Ovi komentari se u toku prevoenja programa ignoru od strane kompilatora i ne ulaze u sastav izvrnog koda koji se generie prevoenjem programa. Meutim komentari su veoma vaan deo programa kojim se podeava njegova dokumentarnost, i bitno utiu na efikasnost analize programa. Konvencija za zapisivanje komentara se razlikuje od jezika od jezika. Slede primeri komentara u nekim

    programskim jezicima:

    /* Ovo je primer komentara u jeziku C */

    // Kratak C++ komentar u okviru jednog reda

    13. Struktura programa u jeziku C

    Programi pisani u C jeziku imaju strukturu bloka, ali se za ograniavanje bloka koriste vitiaste zagrade umesto zagrada begin i end. C program se moe nalaziti u jednom ili vie fajlova. Samo jedan od tih fajlova (glavni programski modul) sadri funkciju main kojom zapoinje izvrenje programa. U programu se mogu koristiti funkcije iz standardne biblioteke. U tom sluaju se moe navesti direktiva pretprocesora oblika

    #include .

    esta je direktiva oblika #include kojom se ukljuuju funkcije iz fajla stdio.h (standard input/output header).

    Glavni program, main(), takoe predstavlja jednu od funkcija. Opis svake funkcije se sastoji iz zaglavlja i tela funkcije. U jeziku C sve promenljive moraju da se deklariu. Opti oblik jednostavnog programa je: void main()

    {

    }

    14. Tipovi podataka

    Jedan od najznaajnijih pojmova u okviru programskih jezika je pojam tipa podataka. Atribut tipa odreuje

    skup vrednosti koje se mogu dodeljivati promenljivima, format predstavljanja ovih vrednosti u memoriji

    raunara, skup osnovnih operacija koje se nad njima mogu izvravati i veze sa drugim tipovima podataka.

    Neka je zadat skup T sainjen od n proizvoljnih apstraktnih objekata: T:={v1,...,vn}, n>1. Ukoliko su svi

    objekti istorodni, u smislu da se u okviru nekog programskog jezika na njih moe primenjivati jedan

    odreeni skup operatora, onda se T naziva tip podataka, Ako za promenljive x i y uvek vai x pripada T i y

    pripada T onda su one tipa T. To u okviru programa formalno definiemo iskazom DEFINE x, y : T.

  • Vrednost je bilo koji entitet kojim se moe manipulisati u programu. Vrednosti se mogu evaluirati, zapamtiti

    u memoriji, uzimati kao argumenti, vraati kao rezultati funkcija, i tako dalje. Razliiti programski jezici

    podravaju razliite tipove vrednosti.

    15. Podela tipova podataka

    Razliiti programski jezici podravaju razliite tipove vrednosti. Jedna od klasifikacija osnovnih tipova

    podataka prikazana je na slici. Tipovi podataka su podeljeni u dve osnovne grupe: statiki tipovi i dinamiki

    tipovi. Pod statikim tipovima podrazumevamo tipove podataka kod kojih je unapred i fiksno definisana

    unutranja struktura svakog podataka, a veliina (t.j. memorijska zapremina) fiksno se definie pre (ili u

    vreme) izvravanja programa koji koristi podatke statikog tipa.

    Statiki tipovi podataka obuhvataju skalarne i strukturirane podatke. Pod skalarnim tipovima podrazumevamo najprostije tipove podataka ije su vrednosti skalari, odnosno takve veliine koje se tretiraju kao elementarne celine i za koje nema potrebe da se dalje razlau na komponente. U tom smislu realne i kompleksne brojeve tretiramo kao skalare u svim programskim jezicima koji ih tretiraju kao elementarne

    celine (neki jezici nemaju tu mogunost pa se tada kompleksni brojevi tretiraju kao struktura koja se razlae na realni i imaginarni deo; na slian nain mogao bi se realni broj razloiti na normalizovanu mantisu i eksponent). Pod strukturiranim tipovima podataka podrazumevamo sve sloene tipove podataka koji se realizuju povezivanjem nekih elementarnih podataka u precizno definisanu strukturu. U ulozi elementarnih

    podataka obino se pojavljuju skalari ili neke jednostavnije strukture. Kompozitna vrednost ili struktura podataka (data structure) jeste vrednost koja je komponovana iz jednostavnijih vrednosti. Kompozitni tip

    jeste tip ije su vrednosti kompozitne. Programski jezici podravaju mnotvo kompozitnih vrednosti: strukture, slogove, nizove, algebarske tipove, objekte, unije, stringove, liste, stabla, sekvuencijalni fajlovi,

    direktni fajlovi, relacije, itd.

    Skalarni tipovi podataka mogu biti linearno ureeni ili linearno neureeni. Linearno ureeni tipovi podataka su tipovi kod kojih se vrednosti osnovnog skupa T preslikavaju na jedan interval iz niza celih

    brojeva, t.j. za svaki podatak x iz T zna se redni broj podatka. Stoga svaki podatak izuzev poetnog ima svog prethodnika u nizu, i slino tome, svaki podatak izuzev krajnjeg ima svog sledbenika u nizu. Pod dinamikim tipovima podataka podrazumevamo tipove podataka kod kojih se veliina i/ili struktura podataka slobodno menja u toku obrade. Kod dinamikih tipova sa promenljivom veliinom podrazumevamo da je struktura podataka fiksna, ali se njihova veliina dinamiki menja tokom obrade tako da se saglasno tome dinamiki menjaju i memorijski zahtevi. Na primer, dopisivanjem novih zapisa u sekvencijalnu datoteku veliina datoteke raste uz neizmenjenu strukturu. Kod dinamikih tipova sa promenljivom strukturom unapred je fiksno definisan jedino princip po kome se formira struktura podataka

    dok se sama konkretna struktura i koliina podataka u memoriji slobodno dinamiki menjaju.

  • 16. Statika i dinamika tipizacija

    Pre izvrenja bilo koje operacije, moraju se proveriti tipovi operanada da bi se spreila greka u tipu

    podataka. Meutim, postoji izvestan stepen slobode u vremenu provere: provera tipa se moe izvriti ili u

    vremenu kompilacije (compile-time) ili u vremenu izvrenja programa (at run-time). Ova mogunost lei u

    osnovi vane klasifikacije programskih jezika na statiki tipizirane (statically typed) i dinamiki tipizirane

    (dynamically typed). U nekom statiki tipiziranom jeziku, svaka varijabla i svaki izraz imaju fiksni tip (koji

    je ili eksplicitno postavljen od strane programera ili izveden od strane kompajlera). Svi operandi moraju biti

    proverenog tipa (type-checked) u vremenu kompilovanja programa (at compile-time). U dinamiki

    tipiziranim jezicima, vrednosti imaju fiksne tipove, ali varijable i izrazi nemaju fiksne tipove.

    Statika tipizacija je efikasnija. Dinamika tipizacija zahteva proveru tipova u vremenu izvrenja

    programa (run-time type checks), to usporava izvrenje programa. Statika tipizacija zahteva jedino proveru

    tipa u vremenu kompilacije programa (compile-time type checks), ija je cena minimalna (i izvrava se

    jedanput). Osim toga, dinamika tipizacija primorava sve vrednosti da budu etiketirane (tagged) (da bi se

    omoguila provera u vreme izvrenja), a ovakvo oznaavanje poveava upotrebu memorijskog prostora.

    Statika tipizacija ne zahteva ovakvo oznaavanje.

    Statika tipizacija je sigurnija: kompajler moe da proveri kada program sadri greke u tipovima. Dinamika tipizacija ne omoguava ovakvu sigurnost.

  • Dinamika tipizacija obezbeuje veliku fleksibilnost, to je neophodno za neke aplikacije u kojima

    tipovi podataka nisu unapred poznati.

    17. Koncept jakih tipova podataka

    Na osnovu toga kako je postavljen koncept tipova podataka, programski jezici mogu da se svrstaju u dve

    grupe: na programske jezike sa slabim tipovima podataka i na jezike sa jakim tipovima podataka.

    Koncept jakih tipova podataka obuhvata nekoliko osnovnih principa:

    Tip podataka odreuju sledei elementi: - skup vrednosti,

    - format registrovanja podataka,

    - skup operacija koje se nad podacima mogu izvravati,

    - skup funkcija za uspostavljanje veza sa drugim tipovima podataka.

    Sve definicije tipa moraju da budu javne, eksplicitne. Nisu dozvoljene implicitne definicije tipova. Objektu se dodeljuje samo jedan tip. Dozvoljeno je dodeljivanje vrednosti samo odgovarajueg tipa. Dozvoljene su samo operacije obuhvaene tipom. Tip je zatvoren u odnosu na skup operacija koji obuhvata. Ove operacije se mogu primenjivati samo nad operandima istog tipa. Meoviti izrazi nisu dozvoljeni. Dodeljivanje vrednosti raznorodnih tipova mogue je samo uz javnu upotrebu funkcija za transformaciju tipa.

    Koncept jakih tipova poveava pouzdanost, dokumentarnost i jasnou programa.

    18. Koncept slabih tipova podataka

    Na osnovu toga kako je postavljen koncept tipova podataka, programski jezici mogu da se svrstaju u dve

    grupe: na programske jezike sa slabim tipovima podataka i na jezike sa jakim tipovima podataka. U

    sluaju jezika sa slabim tipovima podataka informacija o tipu promenljive koristi se, i korektna je samo na

    mainskom nivou, u fazi izvrenja programa. Ovako postavljen koncept podrazumeva sledee mogunosti:

    (1) Operacija koja se od strane kompilatora prihvati kao korektna, na nivou izvornog koda programa, moe da bude potpuno nekorektna.

    *PRIMER CISTO DA SE ZNA STA SE RADI*

    Razmotrimo sledei primer: char c;

    c = 4;

    Promenljiva c definisana je da pripada tipu char, to podrazumeva da joj se kao vrednosti dodeljuju znaci

    kao podaci. Meutim umesto korektnog dodeljivanja c = '4', promenljivoj c je dodeljena vrednost broja 4 kao

    konstante celobrojnog tipa. Kod jezika sa slabim tipovima podataka kompilator ne otkriva ovu greku i

    informaciju o tipu koristi samo na mainskom nivou kada promenljivoj c dodeljuje vrednost jednog bajta

    memorijske lokacije u kojoj je zapisana konstanta 4. Oigledno je da ovako postavljen koncept tipova moe

    da dovede do veoma ozbiljnih greaka u izvravanju programa koje se ne otkrivaju u fazi kompilovanja

    programa.

    (2) Koncept slabih tipova podrazumeva odreeni automatizam u transformaciji tipova podataka u sluaju

    kada se elementi razliitih tipova nalaze u jednom izrazu ija se vrednost dodeljuje promenljivoj odreenog

    tipa.

    *PRIMER *

    Razmotrimo sledei primer: float x, y;

    int i, j, k;

    i = x;

  • k = x-j ;

    Promenljive x i y su realne (tipa float), a i, j i k celobrojne (tipa int). Naredbom i=x; vri se dodeljivanje

    vrednosti tipa float promenljivoj celobrojnog tipa. Kod jezika sa slabim tipovima ovo dodeljivanje je

    dozvoljeno iako se pri tome x svodi na drugi format i pravi greka u predstavljanju njegove vrednosti. Kod

    ovako postavljenog koncepta tipova, da bi se napisao korektan program potrebno je tano poznavati

    mehanizme transformacije tipova. U drugoj naredbi iz primera (k = x-j;) od broja x koji je tipa float treba

    oduzeti broj j, tipa int i rezultat operacije dodeliti promenljivoj tipa int. Da bi smo bili sigurni u korektnost

    rezultata potrebno je da znamo redosled transformacija koje se pri tome izvravaju, odnosno da li se prvo x

    prevodi u int i onda izvrava oduzimanje u skupu celih brojeva i vrednost rezultata dodeljuje promenljivoj

    tipa int ili se j prevodi u tip float, izvrava oduzimanje u skupu realnih brojeva, a zatim rezultat prevoi u tip

    int i dodeljuje promenljivoj k.

    Koncept slabih tipova podataka doputa puno slobode kod zapisivanja izraza u naredbama dodeljivanja;

    meutim cena te slobode je nejasan program sa skrivenim transformacijama, bez mogunosti kontrole i

    korienja informacije o tipu u fazi kompilovanja programa.

    19. Ekvivalentnost tipova podataka

    ta ekvivalentnost tipova oznaava zavisi od programskog jezika. (Sledea diskusija podrazumeva da je

    jezik statiki tipiziran.) Jedna mogua definicija ekvivalentnosti tipova jeste strukturna ekvivalentnost

    (structural equivalence): T1 T2 ako i samo ako T1 i T2 imaju isti skup vrednosti. Strukturna

    ekvivalentnost se tako naziva zato to se ona moe proveriti poreenjem struktura tipova T1 i T2.

    (Nepotrebno je, a u optem sluaju i nemogue, da se prebroje sve vrednosti ovih tipova.)

    Kada kompilator jezika sa jakim tipovima podataka treba da obradi naredbu dodeljivanja oblika

    x := izraz

    on vri dodeljivanje samo u sluaju ekvivalentnosti tipa promenljive sa leve strane dodeljivanja i rezultata

    izraza na desnoj strani naredbe, osim u sluaju kada je na desnoj strani celobrojni izraz a na levoj strani

    promenljiva nekog realnog tipa.

    Eksplicitnom ekvivalentnou tipova postie se vea pouzdanost jezika. U ovom sluaju nisu potrebne

    posebne procedure po kojima bi se ispitivala strukturna ekvivalentnost. Meutim, kada je potrebno vrednost

    promenljive ili izraza dodeliti promenljivoj koja mu ne odgovara po tipu ovaj koncept zahteva korienje

    funkcija za transformisanje tipova.

    20. Elementarni tipovi podataka u programskim jezicima

    U okviru svakog programskog jezika, sistem tipova podataka zasniva se na skupu osnovnih tipova podataka

    nad kojima se dalje definiu izvedeni tipovi, podtipovi, strukturni tipovi i specifini apstraktni tipovi

    podataka. Skup osnovnih tipova podataka se obino svodi na tipove podataka za rad sa elementarnim

    numerikim podacima (celi i realni brojevi), znakovnim podacima (pojedinani znaci ASCII koda) i

    logikim vrednostima (true i false).

    21. Celobrojni tip podataka

    Podaci celobrojnog tipa pripadaju jednom lntervalu celih brojeva koji obuhvata pozitivne i negativne brojeve

    i koji se obino oznaava na sledei nain:

    T := {minint, minint+1, ... , -1, 0, 1, ,.. , maxint-1, maxint } .

    Ovde je najmanji broj oznaen sa minint, a najvei sa maxint (od engl. maximum integer i minimum integer)

    pri emu ove veliine nisu fiksne ve zavise od implementacije i prema tome variraju od raunara do

    raunara.

    22. Realni tip podataka

    Promenljive realnog tipa uzimaja za svoju vrednost podskupove skupa realnih brojeva. U programskim

    jezicima postoji vie vrsta podataka realnog tipa, koji se razlikuju po tanosti predstavljanja podataka.

  • Realni tip podataka obuhvata jedan konaan podskup racionalnih brojeva ograniene veliine i

    tanosti. Tip float najee obuhvata brojne vrednosti iz sledeih podintervala brojne ose:

    Ovde minreal oznaava najmanju apsolutnu vrednost veu od nule, koja se moe predstaviti na raunaru, a

    maxreal predstavlja najveu apsolutnu vrednost koja se moe predstaviti na raunaru. Realni brojevi iz

    intervala (-minreal, minreal) se zaokruuju i prikazuju kao 0, realni brojevi iz intervala (-r, -maxreal) i

    (maxreal, +r) ne mogu se predstaviti u memoriji raunara, a r i +r se kodiraju specijalnim kodovima.

    23. Logiki tip podataka

    Logiki tipovi podataka postoje kao osnovni tipovi podataka u svim novijim jezicima. Obino nose naziv

    LOGICAL (FORTRAN) ili BOOLEAN (Pascal, Ada). Obuhvataju samo dve vrednosti true i false, nad

    kojima su definisane osnovne logike operaclje not, and, or i xor.

    Takoe, vai i ureenost skupa vrednosti ovog tipa tako da je false < true.

    Izrazi u kojima se primenjuju logike promenljive i konstante nazivaju se logiki izrazi. Ako se logike

    konstante oznaavaju sa false i true onda podrazumevamo da svi izrazi moraju biti sainjeni striktno od

    logikih veliina. Podrazumeva se da su neispravni meoviti izrazi u kojima se koriste veliine true i false

    pomeane sa numerikim konstantama i aritmetikim operacijama. Na primer, nije definisan izraz 4*false +

    2*true + true, ali izraz 4*(x>0) + 2*(y>0) + (z>0) , koji je takoe besmislen kod logikih konstanti false i

    true, u sluaju numerikog kodiranja T={0,1} redovno ima i smisla i upotrebnu vrednost kao generator

    veliina 0,1,2,3,4,5,6,7.

    24. Znakovni tip podataka (uvodni deo cisto procitati lako se pamti)

    Korisnik raunara komunicira sa raunarom preko ulaznih i izlaznih ureaja i tu je bitno da se pojavljuju

    podaci u formi koja je itljiva za oveka. To znai da se komuniciranje obavlja pomou znakova iz odreene

    azbuke koja redovno obuhvata abecedno poreana velika i mala slova, cifre, specijalne znake i kontrolne

    znake. Pod specijalnim znacima se podrazumevaju svi oni znaci koji se javljaju na tastaturama i mogu

    odtampati, ali nisu ni slova ni cifre (na tastaturi sa kojom je pisan ovaj tekst specijalni znaci su ! # S % &

    *()_-+=:"; '?,/.). A predstavlja simboliki naziv promenljive, dok 'A' predstavlja binarno kodirano prvo

    slovo abecede. Najpoznatiji metod je ameriki standard ASCII (American Standard Code for Information

    Interchange). Ovim smenama su neki manje vani znaci iz skupa ASCII znakova zamenjeni sa specifinim

    jugoslovenskim znacima (na pr., umesto ASCII znakova \ | { } [ ] ~ @ i ^ u srpskoj varijanti se pojavljuju

    znaci i ). Neki terminali imaju mogunost podesivog izbora skupa znakova tako da

    korisnik moe po potrebi izabratl ameriku ili jugoslovensku varijantu skupa ASCII znakova. Prva 32 znaka

    u ASCII skupu su kontrolni znaci. Nekl od njlh imaju jedinstvenu interpretaciju kod svih ureaja, a kod

    nekih interpretacija se razlikuje od ureaja do ureaja. Ovde pominjemo sledee:

    BEL (Bell) = zvuni signal

    LF (Line Feed) = prelazak u naredni red

    FF (Form Feed) = prelazak na narednu stranu

    CR (Carriage /Return) = povratak na poetak reda

    ESC (Escape) = prelazak u komandni reim

    Skup ASCII znakova je baziran na sedmobitnim znacima, pa prema tome obuhvata ukupno 128 znakova.

    Kako se radi o linearno ureenom skupu svaki znak ima svoj redni broj i ti brojevi su u opsegu od 0 do 127. Funkcija koja za svaki znak daje njegov redni broj (ordinal number) oznaava se sa ord. Argument ove funkcije je tipa CHARACTER, a vrednost funkcije je tipa CARDINAL.

    25. Celobrojni tipovi podataka u jeziku C (i ovo se isto lako pamti samo procitati)

    Celobrojni tipovi su brojaki tipovi i javljaju se kao oznaeni ili neoznaeni. Celobrojne vrednosti

    obuhvataju celobrojne konstante, celobrojne promenljive, izraze i funkcije.

  • Celobrojne konstante predstavljaju podskup skupa celih brojeva iji opseg zavisi od deklaracije ali i od konkretne implementacije. U C jeziku celobrojne konstante se predstavljaju kao niske cifara. Ispred koje

    moe da stoji znak '+' za pozitivne, a obavezan je znak '-' za negativne vrednosti. Bitno je napomenuti da se mogu koristiti 3 brojna sistema, i to: dekadni (baza 10), oktalni (baza 8);

    heksadekadni (baza 16). Heksadecimalni brojevi poinju sa 0x ili 0X. Dozvoljene cifre su 0, 1,.., 9 i slova a, b, c, d, e, f (ili A, B, C, D, E, F). Oktalni brojevi poinju sa 0 a ostale cifre mogu biti 0, 1, ..7. Opseg celih brojeva se moe menjati primenom kvalifikatora long i short. Kvalifikator long moe da povea opseg vrednosti celobrojnih promenljivih tipa int. Opseg vrednosti tipa long int (ili skraeno long) je [-2147483648, +2147483647] = [-231,+231-1]. Tip long int (ili long) garantuje da promenljive tog tipa nee zauzimati manje memorijskog prostora od promenljivih tipa int. Kvalifikator short int (ili skraeno short) smanjuje opseg celobrojnih promenljivih. Opseg promenljivih tipa short uvek je [-215,215-1], tj. one se uvek

    smetaju u 2 bajta. Upotrebom promenljivih ovog tipa ponekad se postie uteda memorijskog prostora. Meutim, upotreba ovih promenljivih moe da uspori izvravanje programa, jer se pre korienja u aritmetikim izrazima ove promenljive transformiu u tip int. Ako smo sigurni da su vrednosti celobronih promenljivih nenegativne, one se mogu deklarisati na jedan od sledeih naina: unsigned int (skraeno unsigned), unsigned short int (skraeno unsigned short), unsigned long int (skraeno unsigned long). U sluaju greke integer overflow, program nastavlja da radi, ali sa nekorektnim rezultatom. Promenljive celobrojnog tipa se deklariu navoenjem imena promenljivih iza imena nekog celobrojnog tipa. Imena promenljivih se meusobno razdvajaju zarezima, a iza spiska se navodi ';'. U operatorima opisa je dozvoljeno izvriti inicijalizaciju deklarisanih promenljivih.

    26. Realni tip podataka u jeziku C

    Promenljive ovih tipova uzimaju za svoje vrednosti podskupove skupa realnih brojeva. U jeziku C postoje tri

    vrste podataka realnog tipa, koji se razlikuju po tanosti predstavljanja podataka: float (za jednostruku

    tanost), double (za dvostruku tanost) i long double. U TURBO C vrednosti tipa float se pamte u 4 bajta (32

    bita), a double u 8 bajtova (64 bita). Efekat je da vrednosti tipa float zauzimaju 6 decimalnih mesta, a double

    16 decimalnih mesta. Vrednosti tipa long double se smetaju u 80 bitova. Za vrlo velike i vrlo male brojeve

    moe se koristiti eksponencijalni zapis, koji se sastoji iz sledeih delova: celobrojnog dela - niz cifara,

    decimalne take, razlomljenog dela - niz cifara, znaka za eksponent e ili E, eksponenta koji je zadat

    celobrojnom konstantom.

    27. Tip char

    Tip char je jedan od fundamentalnih tipova podataka u jeziku C. Konstante i promenljive ovog tipa se koriste

    za reprezentaciju karaktera. Znakovni tip (tip char) definie ureen skup osnovnih znakova jezika C. Takav

    skup obrazuje skup ASCII znakova. To znai da znakovnom tipu pripadaju i znaci koji nemaju grafiku

    interpretaciju. Svaki karakter se smeta u raunaru u jednom bajtu memorije. Ako je bajt izgraen od 8

    bitova, on moe da pamti 28=256 razliitih vrednosti. Promenlijve i konstante tipa char uzimaju za svoje

    vrednosti karaktere odnosno cele brojeve duine jednog bajta. To znai da se znak u memoriji registruje u

    jednom bajtu. Promenljive ovog tipa se deklariu pomou kljune rei char. Ako ispred deklaracije char stoji

    rezervisana re signed, tada se specificira interval kodnih vrednosti [-128,127]; ako je ispred char navedeno

    unsigned, tada se specificira kodni interval [0,255].

    28. Konverzija tipova podataka i kast operator

    Svaki aritmetiki izraz poseduje vrednost i tip. Tip rezultata aritmetikih izraza zavisi od tipova operanda.

    Ako su kod binarnih aritmetikih operatora oba operanda istog tipa, tada je tip rezultata jednak tipu

    operanada. Kada to nije ispunjeno, vri se automatska konverzija operanda nieg hijerarhijskog nivoa u tip

    operanda vieg nivoa. Osnovni tipovi podataka imaju sledei hijerarhijski nivo char

  • uvek se vrednost izraza sa desne strane konvertuje u vrednost prema tipu promenljive sa leve strane

    operatora dodeljivanja. Ako je promenljiva d tipa double, a izraz i tipa int, tada se pri dodeljivanju d=i

    vrednost promenljive i konvertuje u odgovarajuu vrednost tipa double. Ako je i promenljiva tipa int, a d je neki izraz tipa double, tada u izrazu i=d, prevodilac vrednost izraza d konvertuje u odgovarajuu vrednost tipa int, pri emu se gube vrednosti decimalnih pozicija. Osim ve pomenute automatske konverzije tipova podataka moe se izvriti i eksplicitna konverzija tipova. Eksplicitna konverzija se postie operatorom kast (cast), oblika (tip). Postoje situacije kada je konverzija tipova poeljna, iako se ne izvrava automatska konverzija. Takva situacija nastaje na primer pri deljenju dva cela broja. U takvim sluajevima programer mora eksplicitno da naznai potrebne konverzije. Takve konverzije su neophodne da bi se izraz tano izraunao.

    Primer. Ako je promenljiva i tipa int, tada se izrazom (double)i njena vrednost prevodi u odgovarajuu vrednost tipa double.

    Operator kast je istog prioriteta i asocijativnosti kao i ostali unarni operatori. Kast se moe primenjivati na izraze.

    Primer. (float)i+3 je ekvivalentno sa ((float)i)+3

    (double)x=77 je ekvivalentno sa ((double)x)=77

    Takoe, moemo pisati x=(float)((int)y+1)

    (double)(x=77)

    Posle izraza x=(int)2.3+(int)4.2 vrednost za x postaje 6.

    Vrste konverzije tipova Konverzija tipa moe biti:

    - standardna ugraena u jezik ili

    - korisnika definie je programer za svoje tipove. Standardne konverzije su, na primer:

    - konverzije iz tipa int u tip float, ili iz tipa char u tip int i slino. Konverzija tipa moe biti:

    - implicitna prevodilac je automatski vri, ako je dozvoljena,

    - eksplicitna zahteva programer. Jedan nain zahtevanja eksplicitne konverzije:

    - pomou C operatora kast (cast): (tip)izraz. Jezik C++ uvodi 4 specifina kast operatora. Postoji i drugi mehanizam konverzije (konverzioni konstruktor).

    29. Sizeof operator

    Unarni operator sizeof() daje za rezultat broj bajtova potrebnih za smetanje svog argumenta. Vrednost

    izraza sizeof(obj) se izraunava za vreme kompilovanja. Argument moe biti ime promenljive, ime tipa ili

    izraz. Ako je obj ime promenljive, tada je vrednost izraza sizeof(obj) broj bajtova potrebnih za registrovanje

    te promenljive u memoriji. Ako je operand obj ime tipa, tada je vrednost izraza sizeof(obj) duina tog tipa,

    odnosno broj bajtova potrebnih za registrovanje elemenata tog tipa. Ako je argument neki tip, ime tog tipa se

    mora navesti izmeu zagrada. Naredba sizeof se koristi kada se generie kd koji zavisi od veliine tipa.

    30. Osnovne aritmetike operacije u programskim jezicima

    Osnovne aritmetke operacije su:

    + sabiranje,

    - oduzimanje,

    * mnoenje,

    / deljenje,

    Ako su oba operanda operacije deljenja / celi brojevi tada se iz realnog broja koji predstavlja njihov kolinik odbacuje decimalna taka i razlomljeni deo. Operacija - moe biti i unarna, i tada se koristi za promenu znaka svog argumenta (unarni minus).

  • Sve operacije poseduju prioritet i redosled, kojima se determinie postupak evaluacije izraza. Ako u izrazu postoje operacije razliitog nivoa prioriteta, operacije se izvravaju po opadajuem nivou prioriteta. Prioritet se moe promeniti upotrebom zagrada. Asocijativnost odluuje o redosledu izvravanja operacija istog prioriteta.

    31. Matematike funkcije iz biblioteke math.h Deo C jezika jesu standardne biblioteke koje sadre esto koriene funkcije. Biblioteka math.h sadri deklaraciju funkcija iz matematike biblioteke. Sadraj ove datoteke se ukljuuje u program naredbom #include.

    Neke od funkcija iz ove biblioteke su date u nastavku.

    Poznate su funkcije sin(x), cos(x), tan(x), exp(x), log(x), log10(x), sqrt(x), fabs(x)=|x|. Sledi opis najvanijih funkcija iz ove bibilioteke.

    ceil(x), rezultat je najmanja celobrojna vrednost ne manja od x (plafon od x).

    Rezultat funkcije floor(x) je najvea celobrojna vrednost ne vea od x (pod od x). pow(x,y)=x^y. Ako je x=0 mora da bude y>0. Ako je x

  • Najvii prioritet ima operacija negacije; sledeeg nivoa prioriteta je operator konjunkcije, dok je najnieg

    nivoa prioriteta operator disjunkcije.

    34. Diskretni tipovi podataka u programskim jezicima

    Grupa diskretnih tipova obuhvata sve tipove podataka sa konanim, diskretnim skupom vrednosti. U takvom

    skupu vrednosti je definisana relacija poretka. Diskretnost i ureenost skupa vrednosti omoguava

    definisanje intervala i upotrebu nekih optih zajednikih funkcija i atributa u ovoj grupi tipova. U diskretne

    tipove podataka svrstavaju se svi celobrojni tipovi podataka, kao i svi drugi elementarni tipovi sa diskretnim

    skupom vrednosti kao to su znakovni i logiki tipovi. Posebno znaajni u grupi diskretnih tipova su tipovi

    nabrajanja (enumerated types) i intervalni tipovi nekih jezika.

    35. Nabrojiv tip u jeziku C

    U programskom jeziku C se u okviru definicija tipova nabrajanja eksplicitno koristi re enum. Gore datim

    tipovima podataka u ovom jeziku odgovaraju sledee definicije:

    enum BOJE {crvena,bela,zelena,plava};

    enum DANI {ponedeljak,utorak,sreda,cetvrtak,petak,subota,nedelja};

    enum MESECI {jan,feb,mar,apr,maj,jun,jul,avg,sep,okt,nov,dec};

    enum STATUS {ON,OFF};

    enum PRAVCI {sever,jug,istok,zapad};

    36. Upotreba typedef iskaza u C

    Kljuna re typedef dozvoljava dodeljivanje alternativnih imena postojeim tipovima podataka, kao i

    definisanje novih tipova podataka.

    37. Ulaz i izlaz podataka u jeziku C

    Funkcija printf() se koristi za formatizovani izlaz podataka, a scanf() za formatizovano uitavanje podataka.

    Ove funkcije se nalaze u standarnoj biblioteci stdio.h. Datoteka stdio.h sadri podake neophodne za pravilno

    funkcionisanje ulazno-izlaznih funkcija. Njen sadraj se ukljuuje u program naredbom #include.

    Funkcija printf() se poziva izrazom oblika

    printf(Upravljacki_string [, Arg1,Arg2,...]);

    Lista argumenata moe da se izostavi. Tada je jedini argument funkcije printf() upravljaki string koji se

    ispisuje na ekran. U optem sluaju, funkcija printf() se primenjuje na listu argumenata koja se sastoji iz dva

    dela. Prvi argument funkcije printf() je kontrolni ili konverzioni string (upravljaki string), a drugi je lista

    izlaznih podataka ije se vrednosti ispisuju. Konverzioni string odreuje format za tampanje liste izlaznih

    podataka. Najprostija specifikacija formata poinje karakterom '%', a zavrava se konverzionim karakterom

    (formatom ili konverzionom specifikacijom).

    Funkcija scanf() ima za prvi argument kontrolni string koji sadri formate koji odgovaraju ulaznim

    veliinama. Drugi argument jeste lista adresa ulaznih veliina.

    Upravljaki string sadri konverzione specifikacije koje odgovaraju ulaznim veliinama. Lista adresa sadri

    adrese promenljivih u koje se smetaju uitane i konvertovane vrednosti. Operator adrese se predstavlja

    simbolom &. Adresa promenljive se formira tako to se ispred imena promenljive pie operator adresiranja

    &.

    Za razdvajanje ulaznih polja u funkciji scanf() koriste se sledei znakovi: praznina (blank), tabulator (tab) i

    prelaz u novi red (enter) (tzv. beli znaci). Izuzetak se ini u sluaju ako neki od ulaznih znakova odgovara

    konverzionom karakteru %c, kojim se uitava sledei znak ak i kada je on nevidljiv.

    38. Opti oblik konverzione specifikacije

    printf()

    Opti oblik konverzione specifikacije je:

  • %[+|-

    gde:

    - konverzioni_karakter definie konverziju. - Znak - ukazuje da se argument poravnava na levoj strani zadate irine polja. - Znakom + se kod numerikih konverzija oznaava da ispred pozitivnih vrednosti treba da se napie predznak +.

    - Znak razmaka oznaava da je predznak praznina umesto +. Bez ovih parametara konverzije, pozitivne vrednosti se prikazuju bez predznaka.

    - Parametar sirina zadaje minimalnu irinu polja. Polje se proiruje za potreban broj pozicija ako izlazna vrednost zahteva vie pozicija nego to je specificirano parametrom sirina. Ako specifikacija irine polja poinje nulom, tada se polje umesto prazninama popunjava nulama u neiskorienim pozicijama ako je poravnanje po desnoj margini.

    - Parametar tacnost se koristi za realne brojeve (float ili double) i odreuje broj decimala iza decimalne

    take.

    konverzioni karakter konverzija izlaznog niza c karakter char

    d ceo broj int

    u ceo dekadni broj bez

    znaka

    o oktalni broj int

    x, X heksadekadni broj int

    ld dug ceo broj long int

    lo dug oktalni broj long int

    lx dug heksadekadni broj

    long int

    f fiksni zarez za float

    lf double

    e, E pokretni zarez za float i

    double

    g, G krai zapis za f ili e s string

    p vrednost pointera

    scanf()

    Opti oblik konverzione specifikacije je: %[*][sirina]konverzioni_karakter

    gde je:

    - znak * oznaava da se obeleeno ulazno polje preskae i ne dodeljuje odgovarajuoj promenljivoj. - sirina zadaje maksimalnu irinu polja. Ako je irina polja vea od navedene u konverzionoj specifikaciji, koristi se onoliko znakova koliko je zadato maksimalnom irinom. - konverzioni_karakter je jedan od konverzionih znakova iz sledee tabele: konverzioni karakter tip argumenta

    c pokaziva na char h pokaziva na short d pokaziva na int ld, D pokaziva na long o pokaziva na int lo, O pokaziva na long x pokaziva na int lx, X pokaziva na long f pokaziva na float lf, F pokaziva na double e pokaziva na float le, E pokaziva na double s pokaziva na string

  • 39. Direktive pretprocesora u C

    Simbolika konstanta je konstanta kojoj je pridruen identifikator. Simbolike konstante u jeziku C se

    definiu korienjem direktiva pretprocesora. Ovakva definicija poinje pretprocesorskom direktivom

    #define (sve pretprocesorske direktive poinju znakom #). Iza direktive pretprocesora se navodi simboliko

    ime konstante a zatim konstantna vrednost koja predstavlja vrednost te konstante. Vrednost konstante se

    moe zadati na sledei nain:

    - pomou imena ve definisane konstante; - konstantom (celobrojnom, realnom, znakovnom, logikom); - konstantnim izrazom.

    Iza ove direktive ne koristi se znak ';' jer pretprocesorske direktive ne pripadaju jeziku C. Pretprocesorske

    direktive se moraju navesti pre prvog korienja imena konstante u programu. U praksi se direktive najee piu na poetku programa. Direktive #define mora da se pie u posebnom redu. Jednom naredbom moe da se definie samo jedna

    konstanta. Zajedno sa nekom ovakvom direktivom ne smeju da budu druge naredbe. Jedino je dozvoljen

    komentar na kraju reda.

    40. Osnovne upravljake strukture u programskim jezicima

    Naredbe koje omoguavaju definisanje toka programa nazivaju se upravlajke naredbe.

    Upravlajke naredbe u prvom imperativnom programskom jeziku FORTRAN bile su izvedene iz osnovnih

    mainskih naredbi. Smatra se da je skup naredbi kojima se upravlja tokom programa dovoljan ako

    obezbeuje sledee tri osnovne upravlajke strukture:

    (1) Strukturu selekcije, koja omoguava izbor jedne od dve mogunosti. U Pascal-u se obino implementira

    izrazom oblika:

    If B then St else Sf ;

    Struktura selekcije odreena je if-then i if-then-else izrazima. (2) Strukturu viestruke selekcije, koja omoguava izbor jedne izmeu vie ponuenih grana. U Pascal-u se koristi case izraz oblika:

    case X of xa : Sa;

    xb : Sb;

    end;

    (3) Strukturu iteracije, koja omoguava viestruko izvravanje nekog bloka naredbi. U jeziku Pascal se koristi while do petlja oblika:

    while B do S;

    Upravljake strukture jednog proceduralnog jezika bi trebalo da ispunjavaju sledee osobine: smisao naredbi mora da bude jasan i jednoznaan; sintaksa naredbe treba da bude tako postavljena da dozvoljava hijerarhijsko ugraivanje drugih naredbi, to mora da bude jednoznano definisano i jasno iz samog teksta programa; potrebno je da postoji mogunost lake modifikacije naredbi.

    41. Naini predstavljanja algoritama

    Tekstualni

    Grafiki (pomou blok ema) Pseudo kodom

    Strukturogramom

    Tekstualni nain Koriste se precizne reenice govornog jezika Koristi se za lica koja se prvi put sreu sa pojmom algoritma Dobra osobina: razumljivost za iri krug ljudi

  • Loe: nepreciznost koja proistie iz nepreciznosti samog jezika

    Grafiko predstavljanje algoritma Koriste se odredjeni grafiki simboli za predstavljanje pojedinih aktivnosti u algoritmu Ideja je pozajmljena iz teorije grafova

    Algoritam se predstavlja usmerenim grafom

    vorovi grafa predstavljaju aktivnosti koje se obavljaju u algoritmu potezi ukazuju na sledeu aktivnost koja treba da se obavi

    Predstavljanje algoritma pomou pseudo koda Koristi se tekstualni nain dopunjen formalizmom svaka od osnovnih algorotamskih struktura se predstavlja na tano definisani nain: sekvenca se predstavlja kao niz naredbi dodeljivanja odvojenih simbolom ;

    Strukturogrami Kombinacija grafikog i pseudo koda; Koriste se kao prikladna dokumentacija za ve zavrene programe. Program se pie tako da se popunjavaju odreene geometrijske slike

    42. Grafiko predstavljanje Euklidovog algoritma za NZD dva broja Euklidov algoritam za nalaenje NZD dva prirodna broja, m i n 1. Podeliti m sa n i ostatak zapamtiti u r;

    2. Ako je r jednako 0, NZD je n i kraj, inae prei na korak 3;

    3. Zameniti m sa n, n sa r, i prei na korak 1;

    43. Grafiko predstavljanje osnovnih algoritamskih struktura

    Osnovne algoritamske strukture

    Kombinovanjem gradivnih blokova dobijaju se osnovne algoritamske strukture sekvenca

  • alternacija (selekcija)

    petlja (ciklus)

    Pomou osnovnih algoritamskih struktura moe se predstaviti svaki algoritam

    Sekvenca linijska struktura koja se dobija kaskadnim povezivanjem blokova obrade

    Alternacija (selekcija) Omoguava uslovno izvrenje niza algoritamskih koraka

    Petlja (ciklus) Omogava da se algoritamski koraci ponavljaju vie puta.

  • Pravila Ako petlja pone unutar then bloka ili else bloka, u tom bloku se mora i zavriti! Dozvoljene su paralelne (ugnjedjene) petlje. su dozvoljene petlje koje se seku!

    44. Predstavljanje algoritma pomou pseudo koda

    Predstavljanje algoritma pomou pseudo koda

    Koristi se tekstualni nain dopunjen formalizmom svaka od osnovnih algorotamskih struktura se predstavlja na tano definisani nain: sekvenca se predstavlja kao niz naredbi dodeljivanja odvojenih simbolom ;

    a:=5;

    b:=a*b;

    c:=b-a;

    Petlje pseudo kod

    45. Strukturogrami

    Strukturogrami

    Kombinacija grafikog i pseudo koda; Koriste se kao prikladna dokumentacija za ve zavrene programe. Program se pie tako da se popunjavaju odreene geometrijske slike

  • 46. Sekvenca naredbi i blok naredbi

    Sekvenca naredbi je jedan od osnovnih koncepata u strukturnim jezicima, uveden radi lake implementacije

    drugih upravljakih struktura. Prvi put se javlja u jeziku Algol 60, u kome se naziva i sloena naredba, a

    definisan je kao niz naredbi ogranien zagradama begin i end:

    begin naredba_1;

    . naredba_n

    end Sekvenca naredbi se u Algol-u 60 moe pojaviti svuda gde je sintaksom dozvoljena naredba. Time ovaj koncept postaje jako sredstvo apstrakcije naredbe.

    U Algol-u 60 se prvi put javlja i koncept bloka kao uoptenje koncepta sekvence naredbi. Blok je po definiciji upravljaka struktura koja sadri opise lokalnih promenljivih i sekvencu naredbi. Kao i sekvenca, zatvara se zagradama begin i end.

    begin deklaracija_1;

    . deklaracija_m;

    naredba_1;

    . naredba_n

    end

    47. Globalne i lokalne promenljive

    Globalna promenljiva (global variable) je takva promenljiva koja je deklarisana za upotrebu kroz ceo

    program. Trajanje globalne varijable je celokupno vreme izvrenja programa: varijabla se kreira kada

    program startuje, a unitava odmah po zavretku programa.

    Lokalna promenljiva (local variable) je takva promenljiva koja je deklarisana unutar nekog bloka, za

    upotrebu samo unutar tog bloka. Trajanje lokalne varijable je aktivacija bloka koji sadri deklaraciju te

    varijable: varijabla se kreira na ulasku u blok, i unitava se na izlasku iz bloka.

  • 48. If-then struktura selekcije

    If-then struktura

    Na sledeoj slici prikazan je dijagram toka koji ilustruje grafiki prikaz ove strukture na nivou algoritma.

    If-then struktura se obino implementira kao poseban, jednostavniji sluaj if-then-else strukture. Jedino kod nekih starijih jezika (BASIC, FOTRAN) ona postoji kao zasebna upravljaka struktura. U FORTRAN-u se if-then struktura naziva logikom IF naredbom i ima sledeu formu: IF (Iogiki izraz) naredba. Naredba koja sledi iza logikog izraza izvrava se samo ako je vrednost logikog izraza jednaka TRUE, inae se tok programa prenosi na sledeu naredbu. Jedan od problema u primeni if naredbe jeste implementacija sluaja kada se izvrava vei broj naredbi u jednoj ili then ili else grani. U programskim jezicima koji ne podravaju koncept sekvence naredbi, ova struktura se implementira koristei GOTO naredbu. Sekvenca naredbi, obuhvaena zagradama zagradama ili izmeu begin i end, sastavni je deo if naredbe. Ta sekvenca naredbi se izvrava za vrednost true logikog izraza. Za vrednost false sekvenca naredbi se preskae i program nastavlja sa prvom naredbom koja sledi iza zagrade end. If-then struktura se javlja u razliitim oblicima u mnogim jezicima iji su koreni u Algol-u 60, ukljuujui i FORTRAN 77 i FORTRAN 90.

    U FORTRAN-u se moe koristiti IF-THEN struktura, prema sledeoj sintaksi: IF(uslov)

    naredba

    END IF

    U jeziku Pascal je if-then struktura preuzeta iz Algol-a. U jeziku C se umesto rei begin i end koriste

    zagrade { i }, redom.

    49. If-then-else struktura selekcije

    Ova upravljaka struktura se prvi put javlja u Algol-u 60 i to u obliku: if (logiki_izraz) then naredba

    else naredba;

    Naredba koja sledi iza kljune rei then predstavlja then granu programa, a naredba iza else predstavlja njenu else granu. Kada je vrednost logikog izraza true izvrava se then grana, a kada je vrednost false - else grana programa.

    Ova upravljaka struktura postoji u svim proceduralnim jezicima sa odreenim varijacijama u sintaksi. U Pascal-u je prihvaena sintaksa iz Algol-a.

    Napomena: Jedna od najeih greaka je da se test za jednakost == zameni sa dodeljivanjem =.

  • 50. Operator uslovnog prelaza u jeziku C

    Operator uslovnog prelaza ?: je neobian. Pre svega, to je ternarni operator, jer uzima tri izraza za svoje

    argumente. Nain na koji se on primenjuje je takoe neobian: exp1 ? exp2 : exp3;

    Prvi argument je pre znaka pitanja '?'. Drugi argument je izmeu '?' i ':', a trei posle ':'. Semantika ovakvog

    izraza je sledea. Prvo se izraunava izraz exp1. Ako je njegova vrednost razliita od 0 (tj. ako je jednaka

    true), tada se evaluira izraz exp2, i njegova vrednost je vrednost celog izraza. Ako je vrednost izraza exp1

    nula (false), tada se evaluira izraz exp3, i njegova vrednost se vraa kao rezultat. Na taj nain, ovaj izraz

    predstavlja zamenu za if-then-else naredbu.

    51. Struktura viestruke selekcije

    Struktura viestruke selekcije omoguava izbor jedne od vie moguih naredbi ili grupa naredbi u zavisnosti

    od vrednosti odreenog uslova. Struktura viestruke selekcije se koristi kao zamena za komplikovane

    upravljake strukture sledeeg oblika, u kojima se funkcija if mnogo puta ponavlja.

    Graf na sledeoj slici ilustruje ovu upravljaku strukturu na nivou algoritma.

    Kako se svaka viestruka selekcija moe simulirati obinim if-then-else grananjem, na sledeoj slici prikazan

    je dijagram toka koji odgovara viestrukom grananju.

    Ova struktura koja je u svom razvoju pretrpela mnogo izmena do jednog modernog oblika koji se danas u

    manje-vie slinim varijantama javlja u svim programskim jezicima.

    52. Operator viestruke selekcije u jeziku C

    U programskom jeziku C naredba za viestruko grananje ima dosta zastarelu koncepciju. To je switch

    naredba koja u optem sluaju ima sledei oblik:

    switch(izraz)

    { case vrednost11: [case vrednost12: ] operator11

    ......

    break;

    case vrednost21: [case vrednost22: ] operator21

    ......

    break;

    ......

    case vrednostn1: [case vrednostn2: ] operatorn1

    ......

    break;

    default:

    operator01

    ......

    break;

  • }

    sledea naredba;

    Semantika ove naredbe je sledea: izraunava se vrednost izraza izraz, koji se naziva selektor. Vrednost

    izraza izraz mora da bude celobrojna (ili znakovna, koja se automatski konvertuje u odgovarajuu celobrojnu

    vrednost). Dobijena vrednost se uporeuje sa vrednostima vrednost11, vrednost12, ..., koji moraju da budu

    celobrojne konstante ili celobrojni konstantni izrazi. Ove vrednosti se mogu posmatrati kao obeleja za

    odreenu grupu operatora. Ako je pronaeno obeleje ija je vrednost jednaka vrednosti izraza izraz,

    izraunavaju se operatori koji odgovaraju toj vrednosti. Kljuna re break predstavlja kraj jedne case grane,

    odnosno kraj grupe operatora sadranih u nekoj case grani. Ako nije pronaena vrednost u case granama

    jednaka vrednosti izraza izraz, izraunavaju se iskazi u default grani; ako je izostavljena alternativa default,

    nee se izvriti ni jedna od alternativa operatora switch.

    Operator break se koristi u okviru switch operatora (kasnije i u while, do, for operatorima) da bi se obezbedio

    izlaz neposredno na naredbu iza switch strukture. Ukoliko se iza neke grupe operatora u switch operatoru

    ispusti break operator, tada se u sluaju izbora te grupe operatora izvravaju i sve preostale alternative do

    pojave break operatora ili do kraja switch operatora.

    53. Programske petlje podela

    U svakom programskom jeziku obino postoje upravljake strukture kojima moe da se definie viestruko

    ponavljanje odreene sekvence naredbi na istim ili razliitim podacima. To su programske petlje ili strukture

    iteracije. Ciklusi omoguavaju da se skupovi srodnih podataka koji se odnose na isti pojam obrauju na isti

    nain.

    Prema jednoj podeli, programske petlje se mogu podeliti na:

    brojake i

    iterativne. Prema drugoj podeli, programske petlje se dele na:

    petlje sa preduslovom i

    petlje sa postuslovom.

    Brojake petlje kod kojih postoji broja (indeks petlje) kojim se upravlja izvravanjem petlje.

    Sa prihvatanjem strukturnog programiranja u novijim jezicima se pojavljuje i logiki kontrolisana petlja

    kojom se realizuje while (while-do) struktura. Ova struktura predvia ponavljanje izvravanja tela petlje sve

    dok uslov u zaglavlju petlje ima vrednost true. Kod ovakvih petlji nije unapred poznat broj izvravanja tela

    petlje. Za ove petlje se esto koristi i termin pretest petlje, jer se ispitivanjeuslova vri pre svakog izvravanja

    petlje.

  • 54. While naredba u jeziku C

    Ovom naredbom se realizuju programski ciklusi sa nepoznatim brojem ponavljanja, zavisno od odreenog

    uslova. Operator while se koristi prema sledeoj sintaksi:

    while(izraz)

    operator

    Efekat ove naredbe je da se telo while ciklusa, oznaeno sa operator izvrava dok je vrednost izraza izraz jednaka true (nenula). Kada vrednost izraza izraz postane false (nula), kontrola se prenosi na sledeu naredbu. Telo ciklusa, oznaeno sa operator, izvrava se nula ili vie puta. Operator moe biti prost ili sloen. Svaki korak koji se sastoji iz provere uslova i izvrenja operatora naziva se ''iteracija''. Ako odmah po ulasku u ciklus izraz ima vrednost ''netano'' (nula), operator se nee izvriti.

    Primena while ciklusa u obradi teksta u C esto puta se pri radu sa tekstovima umesto funkcija scanf() i printf() koriste biblioteke funkcije getchar() i

    putchar(). Pre korienja ovih funkcija mora da se navede pretprocesorska direktiva #include. Ove

    funkcije se koriste za ulaz i izlaz samo jednog karaktera. Funkcija putchar() ima jedan znakovni argument.

    Pri njenom pozivu potrebno je da se unutar zagrada navede znakovna konstanta, znakovna promenljiva ili

    funkcija ija je vrednost znak. Ovaj znak se prikazuje na ekranu. Funkcija getchar() nema argumenata.

    Rezultat njenog poziva je znak preuzet iz tastaturnog bafera. Ovom funkcijom se ulazni znak unosi u

    program.

    55. Do-while naredba u jeziku C

    Do-while naredba je varijanta while naredbe. Razlikuje se od while naredbe po tome to je uslov na kraju

    ciklusa. Ovako ciklus izvrava naredbe unutar d-while ciklusa, bez obzira na tacnost uslova.

    56. For naredba u jeziku C

    U leziku C, naredba for je povezana sa while naredbom.

    Operator koji predstavlja telo ciklusa moe biti prost ili sloen. For ciklus oblika

    for(; uslov ;) operator

    ekvivalentan je while ciklusu

    while(uslov) operator

  • Takoe, ekvivalentni su sledei beskonani ciklusi: for(;;) operator

    i

    while(1) operator.

    Izrazi u zaglavlju petlje mogu da budu i izostavljeni. Na primer, petlja bez drugog izraza izvrava se kao da

    je njegova vrednost true, to znai kao beskonana petlja. Ako su izostavljeni prvi i trei izraz, telo ciklusa je

    prazno.

    57. Formalizacija repetitivnih iskaza (ovo je mnogo dugo i nznm sta da mu radim)

    Neka je B logiki izraz, a S iskaz. Tada:

    while B do S (1)

    oznaava ponavljanje radnje definisane iskazom S sve dok izraunavanje izraza B daje vrednost true. Ako je vrednost izraza B jednaka false na samom poetku procesa obavljanja radnje definisane sa (1), iskaz S nee biti uopte izvren. Iskaz (1) se grafiki predstavlja na sledei nain:

    (2)

    Efekat iskaza while B do S moe se rigorozno definisati tako to se kae da je on ekvivalentan efektu iskaza:

    if B then

    begin

    S;

    while B do S (3)

    end.

    (4)

    Ovakva definicija znai da dijagrami (2) i (4) opisuju ekvivalentne procese izvrenja (radnje).

    Drugi oblik repetitivnog iskaza je:

    repeat S until B, (5)

    gde je S niz iskaza a B logiki izraz. Iskaz (5) definie sledeu radnju: izvrava se iskaz S, a zatim se izraunava izraz B. Ako je rezultat izraunavanja izraza B jednak false, ponovo se izvrava iskaz S, i tako dalje. Proces ponavljanja radnje definisane sa S zavrava se kada izraunavanje izraza B da true. Struktura ovako definisanog repetitivnog iskaza predstavlja se sledeim dijagramom: (6)

    Poreenjem (2) i (6) zakljuujemo da se u (6) iskaz S mora izvriti bar jednom, dok se u (2) on ne mora uopte izvriti. Kako se u prvom sluaju B izraunava pre svakog izvrenja iskaza S, a u drugom nakon svakog izvrenja iskaza S, razlozi efikasnosti nalau da B bude u to je mogue prostijoj formi. Rigorozna definicija radnje odreene iskazom repeat S until B daje se na taj nain to se kae da je ona ekvivalentna radnji koju odreuje iskaz: begin

    S;

    if -B then

    repeat S until B

    end. (7)

    Ovo znai da dijagrami (6) i (8) opisuju ekvivalentne radnje. Kako se u (2) i (6) pojavljuju zatvorene putanje ili petlje, oba ova iskaza se esto i nazivaju petljama. U njima se S se naziva telom petlje.

  • Primer repeat iskaza dat je u programu (9), koji izraunava sumu h(n)=1+1/2+ . . .+ 1/n: var n: integer; h: real;

    h:=0;

    repeat

    h:= h+1/n; n:=n-1 (9)

    until not(n>0).

    Fundamentalni problem vezan za repetitivnu kompoziciju iskaza ilustrovaemo primerima (5) i (9). Proces

    izvrenja iskaza (9) je konaan samo ako u poetku vai n>0. Za n