32
Osnovi programiranja - priprema za usmeni ispit Goran Raki´ c jun 2005. godine 1. Uvodne napomene ”A popular saying is that C makes it easy to shoot oneself in the foot.” Beleˇ ske koje su pred Vama su nastale kao deo priprema pred polaganje usmenog ispita iz Osnova programiranja na Matematiˇ ckom fakultetu u Beogradu u junu 2005. godine kod profesora Duˇ ska Vitasa. Sadrˇ zaj je organizovan u skladu sa ispitnim pitanjima profesora koja su bila aktuelna u trenutku kreiranja ovih beleˇ ski (ispitna pitanja za 2001/2002 godinu). Kao izvor je koriˇ cena raznolika literatura (delom navedena u bibliografiji), ranije steˇ ceno znanje, neˇ sto beleˇ ski sa samih predavanja a jedan od znaˇ cajnijih izvora su i ranije sastavljene beleˇ ske kolege Danila ˇ Segana iz septembra 2002. godine koje moˇ zete prona´ ci na njegovoj stu- dentskoj stranici na adresi http://alas.matf.bg.ac.yu/mn01042/ odakle su preuzeti odgovori na neka pitanja, ˇ sto naroˇ cito vaˇ zi za ve´ cinu uvodnih pitanja. 1

Osnovi programiranja - priprema za usmeni ispitmr04069/op/op_2.pdf · ovi delovi ˇcine raˇcunarski sistem. Pogledati i odgovor na 2. pitanje. 2.4. Funkcionisanje racunara (engl

Embed Size (px)

Citation preview

Page 1: Osnovi programiranja - priprema za usmeni ispitmr04069/op/op_2.pdf · ovi delovi ˇcine raˇcunarski sistem. Pogledati i odgovor na 2. pitanje. 2.4. Funkcionisanje racunara (engl

Osnovi programiranja - priprema za usmeni ispit

Goran Rakic

jun 2005. godine

1. Uvodne napomene

”A popular saying is that C makes it easy to shoot oneself in the foot.”

Beleske koje su pred Vama su nastale kao deo priprema pred polaganje usmenog ispita izOsnova programiranja na Matematickom fakultetu u Beogradu u junu 2005. godine kodprofesora Duska Vitasa. Sadrzaj je organizovan u skladu sa ispitnim pitanjima profesora kojasu bila aktuelna u trenutku kreiranja ovih beleski (ispitna pitanja za 2001/2002 godinu).

Kao izvor je koriscena raznolika literatura (delom navedena u bibliografiji), ranije stecenoznanje, nesto beleski sa samih predavanja a jedan od znacajnijih izvora su i ranije sastavljenebeleske kolege Danila Segana iz septembra 2002. godine koje mozete pronaci na njegovoj stu-dentskoj stranici na adresi http://alas.matf.bg.ac.yu/∼mn01042/ odakle su preuzeti odgovori naneka pitanja, sto narocito vazi za vecinu uvodnih pitanja.

1

Page 2: Osnovi programiranja - priprema za usmeni ispitmr04069/op/op_2.pdf · ovi delovi ˇcine raˇcunarski sistem. Pogledati i odgovor na 2. pitanje. 2.4. Funkcionisanje racunara (engl

2. Preliminarije

2.1. Istorija razvoja racunara (kalkulatori i automati)

Kao prvi korak u razvoju racunara se moze izdvojiti Abakus, pomocna masina za racunanjenastala oko 3000. godine pre nove ere. Sledece stepenice su svakako razvoj teorije pozicionihbrojnih sistema, algoritama, i ostalih preduslova za savremeni razvoj koji otpocinje u XVII veku:

1. Kalkulator

• 1642. Blaise Pascal kreira masinu koja moze da sabira i oduzima

• 1673. Leibnitz Paskalovoj masini dodaje mnozenje i deljenje

2. Automat

• 1801. Joseph Jacquard kreira masinu za tkanje koja saru ocitava sa busenih kartica

3. 1833. George Boole formulise Bulovu algebru, aritmetiku nad binarnim sistemom.

4. 1840. Charles Babbage kreira analiticku masinu opste namene koja ostaje nezavrsena.Ada Bajron kao operator na Bebidzovoj masini ima cast da postane prvi programer.

5. 1890. Herman Hollerith koristi Zakarovu ideju i kreira masinu za obradu podataka kojapodatke cita sa busenih kartica

6. 1935-1940. Alan Turing formira koncept apstraktne matematicke masine (program) iteorijski uredaj (Tjuringova masina) koji se koristi za odredivanje sta je izracunljivo.

7. 1945. John von Neumann formulise principe iz kojih je izveden savremeni racunar. For-mulise koncept smestenog programa (engl. stored program), gde se i naredbe (engl. in-structions) i podaci cuvaju u memoriji.

Razvoj modernih racunara delimo u nekoliko generacija, i to:

Prva generacija ?-1953 Mala pouzdanost, velika mogucnost greske, ogromna zapremina ipotrosnja energije, masinski nivo programiranja programiranja. Modeli poput IBM System700/7000, UNIVAC,...

Druga generacija 1953-1963 Bolje komponente (tranzistori, naprednije aritmeticke i kon-trolne jedinice), operativni sistemi, FORTRAN i COBOL jezici, eksterni uredaji poputmagnetne trake,... Modeli poput DEC PDP-1

2

Page 3: Osnovi programiranja - priprema za usmeni ispitmr04069/op/op_2.pdf · ovi delovi ˇcine raˇcunarski sistem. Pogledati i odgovor na 2. pitanje. 2.4. Funkcionisanje racunara (engl

Treca generacija 1963-1975 Integrisana kola: delovi jeftiniji, manji, brzi i pouzdaniji. Razvojoperativnih sistema, multiprogramiranje, time sharing, virtuelna memorija, umrezavanje.Pojava prve softverske krize (1968.) ciji je uzrok metodologija glomaznih velikih programa.Modeli poput IBM System/360

Cetvrta generacija 1975-... Mikroprocesori, poluprovodnicka memorija, razvoj RISC pro-cesora. Ideje o razvoju inteligentnih i kogitivnih racunara nove generacije, embeddedracunari

2.2. Arhitektura i funkcionisanje fon Nojmanove mašine

Slika 1: Arhitektura fon Nojmanove masine

Poput modernih racunara sastojise iz procesora i radne mem-orije. Jedna od glavnih karak-teristika je to da su i operacijei podaci zapamceni u memoriji.Masina koristi Bulovu binarnuaritmetiku. Racunar na cijemrazvoju je ucestvovao fon Noj-man je pravljen od 1945-1952.godine i sastojao se od osnovnememorije, aritmeticko-logicke je-dinice (sa akumulatorom za cu-vanje medurezultata) i kontrolnejedinice. Svaki od pojedinacnihobjekata memorije (bit) pamtidva razlicita stanja, a organizo-vani su u memorijske reci. Memorijske reci su bile 40-bitne. Sistem je posedovao 21 instrukcijui to: aritmeticke (+, −, ·, /, |x|), memorijske (dovedi, posalji), uslovno grananje i bezuslovnogrananje, i instrukcije za izmenu adresa.

Tok rada masine je izgledao ovako: Najpre se ucitavala instrukcija iz memorije, zatim su seucitavali svi podaci potrebni za izvrsavanje te instrukcije nakon cega se instrukcija izvrsavala,a njen rezultat se smesta u memoriju. Na kraju, masina je ucitavala sledecu instrukciju izmemorije i ceo proces se ponavljao.

2.3. Struktura racunara (engl. hardware). Racunarski sistem.

Procesor i radna memorija zajedno sa vezama izmedu ova dva dela cine racunar u uzem smislu.Uz ulazno izlazne jedinice kao sto su tastatura, stampac, disk, ekran i opet vezama izmedu njih

3

Page 4: Osnovi programiranja - priprema za usmeni ispitmr04069/op/op_2.pdf · ovi delovi ˇcine raˇcunarski sistem. Pogledati i odgovor na 2. pitanje. 2.4. Funkcionisanje racunara (engl

ovi delovi cine racunarski sistem. Pogledati i odgovor na 2. pitanje.

2.4. Funkcionisanje racunara (engl. software)

Sve racunarske programe (engl. software) mozemo podeliti na nekoliko nivoa. Na najnizemonivou su svakako programi koji direktno pristupaju procesoru i memoriji kao sto je recimo BIOS.Na sledecem nivou su programi koji koriste BIOS i kreiraju korisnicko okruzenje, odnosno op-erativni sistem u uzem smislu, odnosno formiraju sistem zaduzen za upravljanje procesima,memorijom i resursima. Treci nivo su aplikativni programi koji koriste usluge koje pruza op-erativni sistem poput programa koji kreiraju graficko korisnicko okruzenje, programa za unosteksta i slicno.

2.5. Bit, bajt, karakter. ASCII-skup karaktera. Standardi o karakterskim skupovima.

Kao sto je vec pomenuto u prikazu arhitekture fon Nojmanove masine, bit je aptraktna predstavadva razlicita stanja, ili memorijski prostor dovoljan za smestanje informacije o dva razlicitastanja. Bajt je osnovna jedinica memorije kojoj se moze pristupiti (adresirati).

Karakter je preslikavanje iz skupa nekih vrednosti (najcesce brojeva) u skup slova, cifarai drugih formi koje imaju apstraktan znacaj za coveka i konkretnu vizuelnu reprezentaciju.Medutim, sam karakter ne predstavlja ni jedan specifican izgled.

ASCII (Standardni Americki Kod za Razmenu Informacija) je kodna stranica koja definisejedno preslikavanje brojeva u skup slova, cifara i drugih formi, podrzano na vecini racunara.Sadrzi 128 razlicitih simbola (7bit) medu kojima su slova engleske abecede, cifre i simboli kojise cesto koriste u kucanju na engleskom jeziku kao i veci broj kontrolnih znakova (kao na primerkod za prekid reda).

Razliciti karakterni skupovi na druge nacine definisu gore pomenuto preslikavanje. Usledpotrebe da se podrze i slova van engleske abecede najpre se pojavila IRV ekstenzija ASCIIstandarda koja je definisala karaktere na pozicijama 128-255 i samim tim zauzimala jedan bitvise. Sledeci korak je pojava ISO-8859 standarda koji je standardizovao raspored dodatnihkaraktera. Za nas su znacajne ISO-8859-2 (latinica) i ISO-8859-5 (cirilica). Potreba za zapisomkaraktera iz razlicitih kodnih skupova ali i nemogucnost predstavljanja svih slova nekog jezikau 255 karaktera dovela je do pojave ISO-10646 i Unicode standarda.

Karakteri u Unicode kodnoj stranici zauzimaju fiksirano po 2 bajta tako da podaci zauzi-maju dva puta vise mesta nego kada bismo ih zapisali po ISO-8859 standardu. Takode, kada sekarakter iz ASCII skupa zapisuje po Unicode standardu drugi bajt je neiskoriscen, odnosno imavrednost 0 pa to predstavlja problem prilikom tumacenja kraja niske karaktera. Iako je jedan od

4

Page 5: Osnovi programiranja - priprema za usmeni ispitmr04069/op/op_2.pdf · ovi delovi ˇcine raˇcunarski sistem. Pogledati i odgovor na 2. pitanje. 2.4. Funkcionisanje racunara (engl

ciljeva Unicode-a jedinstvenost (uniformal - svi karakteri po 2 bajta, universal - dovoljno glifova,unique - svakom glifu jedan kod i obrnuto), ona ipak ne postoji kod nekih karaktera (primer:Latinicno Lj ⇔ L + J, L + j, LJ, Lj sto je 4 nacina zapisa)

Poput SGML-a i u Unicode-u svaki glif ima ime odredeno u 6-bitnom kodu. Na primer:A - ”GREEK CAPITAL LETTER A”, C - ”LATIN CAPITAL CHE” itd.

Za razliku od Unicode-a koji je industrijski standard, ISO10646 zauzima fiksirano 4 bajtapo karakteru tako da podrzava 232 razlicitih karaktera. Restrikcija ISO10646 na 2 bajta sepoklapa sa Unicode standardom.

Slika 2: UTF8 kodna stranica

UTF8 je karakterni skup ukome su karakteri promenljiveduzine i to 1, 2, 3 ili 4 bajta.Prednost skupa je sto ne postojivece zauzimanje memorije kada setekst kodiran ASCII karakternomstranicom zapisuje u UTF8 kod-noj strani. Ipak, cirilicni karakterizauzimaju 2 bajta, dok karakterikodirani ISO-8859-5 stranicom za-uzimaju 1 bajt.

Problem koji postoji i u Unicode-u, i u ISO10646 i u UTF8 kodnom skupu jeste sto oni neomogucavaju reprezentaciju pisma vec reprezentaciju glifova. Tako se recimo slova nase cirilicenalaze zajedno sa slovima ruske, bugarske,... Na taj nacin kodni skup ne definise dobru kolacionusekvencu a otezano je i prepoznavanje jezika na osnovu zapisa teksta u odredenoj kodnoj stranici.

2.6. Azbuka Σ , niska (rec), skup Σ∗, jezik nad Σ, operacije nad jezicima. Faktor ipodrec. Poredak nad Σ∗

Azbuka Σ je bilo koji neprazan konacan skup simbola koje nazivamo slovima azbuke. Rec(niska, string) je svaki konacan niz slova iz azbuke Σ. Obrazovanje reci mozemo posmatrati ikao funkciju koja n-torki brojeva iz N pridruzuje n-torku slova iz azbuke Σ:

ν : [1, n] → Σ× Σ× . . .× Σ

Duzina reci ν u oznaci |ν| je broj slova u toj reci, odnosno |ν| = n. Rec cija je duzina nulanazivamo praznom reci u oznaci ε. Nad recima azbuke Σ definisemo sledece operacije:

5

Page 6: Osnovi programiranja - priprema za usmeni ispitmr04069/op/op_2.pdf · ovi delovi ˇcine raˇcunarski sistem. Pogledati i odgovor na 2. pitanje. 2.4. Funkcionisanje racunara (engl

Dopisivanje: Neka su u i v reci nad azbukom Σ i neka vazi |u| = p, |v| = q. Tada definisemorec w := uv tako da:

w[i] ={

u[i] 1 ≤ i ≤ pv[i− p] p < i ≤ p + q

Ocigledno je da vazi |w| = p + q Operacija dopisivanja je asocijativna:

u(vw) = (uv)w

Uocimo takode da je prazna rec ε neutral dopisivanja, odnosno vazi:

(∀u)(uε = εu = u)

Sada mozemo reci da skup reci i operacija dopisivanja ima algebarsku strukturu monoida. Inverzdopisivanja ne postoji.

Faktor: Neka su u, u1, v i u2 reci nad azbukom Σ i neka vazi u = u1vu3. Tada v nazivamolevim faktorom reci u (prefiks reci u) akko je u1 = ε, desnim faktorom (sufiks) akko jeu2 = ε i pravim faktorom (infiks) akko je u1, u2 6= ε. Takode mozemo uvesti i operaciju brojapojavljivanja faktora u reci.

Podrec: Rec u je podrec (podniska, engl. substring) reci w ukoliko postoji podniz xn skupa[1..n] gde je n = |w| tako da vazi:

u[i] = w[xi], 1 ≤ i ≤ |u|

Primer: Σ = {a, b}, u = ”ababab”. Neke od podreci reci u su: u1 = ”aaa”, u2 = ”baba”, ...

Slika 3: Prebrojivost skupa Σ∗

Skup svih reci nad azbukom Σ oznacavamokao skup Σ∗, dok skup svih nepraznih reci oz-nacavamo kao Σ+. Primetimo da je skup svihreci Σ∗ je prebrojiv jer reci mozemo koristeciodgovarajuci poredak poredati u niz, a skupN je prebrojiv.

Posmatrajmo sada kako sve mozemouvesti poredak na skupu Σ∗. Jedan poredaksmo iskoristili prilikom redanja reci u niz kadasmo utvrdili da je ovaj skup prebrojiv. Ali imajos nacina da uvedemo poredak. Sada cemodefinisati prefiksni, leksikografski i hijerarhi-

jski poredak na skupu Σ∗.

6

Page 7: Osnovi programiranja - priprema za usmeni ispitmr04069/op/op_2.pdf · ovi delovi ˇcine raˇcunarski sistem. Pogledati i odgovor na 2. pitanje. 2.4. Funkcionisanje racunara (engl

Prefiksni poredak:u ≺ v ⇔ rec u je prefiks reci v

Primer: ”ab” ≺ ”abacd”. Ovako uveden poredak nije potpun.

Leksikografski poredak: Uslov da bismo mogli da definisemo leksikografski poredak jesteda je odreden poredak na skupu Σ : (Σ,≤Σ). Tada, za reci u i v definisemo:

u ≤ v ⇔ (u < v po prefiksnom poretku ako je u prefiks v) ∨(u = xyz..., v = xwt..., tako da y, w ∈ Σ, i x, z, t faktori i vazi y ≤Σ w)

Primeri:”ab” ≤ ”aba” jer je ”ab” prefiks ”aba””aaa” ≤ ”ab” jer a ≤Σ b

Hijerarhijski poredak: Kao i u slucaju leksikografskog poretka, (Σ,≤Σ) mora biti defin-isan.

u ≤ v ⇔ (u ≤ v po leksikografskom poretku ako |u| = |v|) ∨(|u| > |v| ako |u| 6= |v|)

Svaki podskup skupa Σ∗ nazivamo jednim jezikom na Σ. Na skupu svih jezika P (Σ∗)mozemo definisati sledece operacije: skupovne operacije (presek, unija, razlika, komplement),proizvod ili spajanje (L1 · L2 = {x1x2|x1 ∈ L1, x2 ∈ L2}), stepen (rekurzivna definicija prekoproizvoda sa samim sobom uz uslov L0 = {ε} i Ln = Ln−1·L za n ≥ 1) i iteracija (L] =

⋃i≥0 Li)

2.7. Sintaksa i semantika programskih jezika

Sintaksa jezika definise niz osnovnih pravila za pisanje programa na odredenom jeziku. Podizrazom ”sintaksa” najcesce se misli na gramatiku jezika nezavisnu od konteksta i tada se onamoze opisati pomocu BNF, EBNF,...

Semantika jezika odreduje smisao (znacenje) konstrukcija programskog jezika pri izvrsavanju.Pogledati i odgovor na sledece pitanje.

2.8. Veštacki i prirodni jezici. Formalna gramatika i njen opis. BNF, EBNF i sintaksnidijagrami. Primeri definicije identifikatora i celobrojne konstante

Za razliku od prirodnih jezika koji najcesce nisu jednoznacni i mogu se interpretirati na visenacina, vestacki kreirani jezici se prave tako da su potpuno jednoznacni kada se koriste zanamenu za koju su i kreirani poput matematickog ili svih programskih jezika.

7

Page 8: Osnovi programiranja - priprema za usmeni ispitmr04069/op/op_2.pdf · ovi delovi ˇcine raˇcunarski sistem. Pogledati i odgovor na 2. pitanje. 2.4. Funkcionisanje racunara (engl

Pojam formalne gramatike se odnosi na skup pravila za formiranje recenica, tj. izboruredenih n-torki iz jezika koji imaju neko znacenje. Formalna gramatika se posmatra kao uredenacetvorka G = (Σ, N, S, P ) gde je Σ skup nezavrsnih slova, N skup zavrsnih slova, (Σ∩N = φ), Spocetni ili recenicni simbol (S ∈ N) i P skup pravila izvodenja. Skup N mozemo jos oznaciti i kaoskup svih meta jezickih (lingvistickih) promenljivih. Recnik gramatike je skup koji definisemokao Σ ∪N .

Bakus-Naurova Forma (ili Bakus Normalna Forma) je prvi put upotrebljena 1960. godineza opis gramatike programskog jezika Algol 60. Pravila se definisu kao:

oznaka → definicija

cime se definise da oznaka proizvodi definicija. Skup N = {→, ::=}. Simboli iz Σ se pisudoslovno, a elementi iz N se pisu uokvireni sa viticastim zagradama ({ i }). Ukoliko je udefiniciji moguce vise opcija, kombinujemo ih i razdvajamo znakom ”|”.

Primer:{Celkon} ::= {Znak}{Ceobroj}{Ceobroj} ::= {Cifra}{Ceobroj}|{Cifra}{Znak} ::= +| − | ε{Cifra} ::= 0|1|2| . . . |9

Prosirena BNF (engl. Extended BNF) ili EBNF se koristi kako bi se smanjio broj pravilai povecala citljivost.

1. Umesto uokvirene sa {...}, zavrsna slova pisemo pocetnim velikim slovom.

2. Karaktere iz Σ pisemo uokvirene sa ”” i ””.

3. U prirucnicima umesto ’w’ ’h’ ... niske karaktera iz Σ pisemo while

4. Grupisanje na desnoj strani pomocu zagrada (...)

5. Viticaste zagrade ograduju deo koji se ponavlja 0 ili vise puta, uglaste za deo koji seponavlja jednom ili nijednom.

Primer:Celkon ::= [Znak]Cifra{Cifra}Znak ::= ” + ”|”− ”Cifra ::= ”0”|”1”| . . . |”9”

I ovaj i prethodni primer dozvoljavaju da broj pocne nulom. Ukoliko broj koji pocinjenulom ima specijalno znacenje (poput u C-u), potrebno je kreirati posebne oznake za cifru inenulacifru.

8

Page 9: Osnovi programiranja - priprema za usmeni ispitmr04069/op/op_2.pdf · ovi delovi ˇcine raˇcunarski sistem. Pogledati i odgovor na 2. pitanje. 2.4. Funkcionisanje racunara (engl

Slika 4: Sintaksni dijagram

Sintaksni dijagram je jos jedan nacin definisanja pravila, prvi put korisceni za definicijuPascal-a. Dijagramom se karakteri iz Σ pisu u krugu, a simboli iz N u pravougaoniku. Dvaprimera dela definicije aritmetickog izraza su prikazani na slici 4.

Potrebno je istaci da gramaticka pravila odreduju samo sintaksnu ispravnost. Definisanjesemanticke ispravnosti je moguce postici intuitivnim putem pomocu primera, prirucnika,... ilikoriscenjem aksiomatskog pristupa i programiranja po specifikaciji.

2.9. Jezicki procesori (kompilatori i interpretatori)

Programski jezici su jezici koji su blizi prirodnim jezicima od masinskog, ali koji su u dovoljnojmeri precizni da se jednoznacno mogu prevesti na masinski jezik. To je posao koji obavljajuprevodioci: kompilatori (kompajleri, engl. compiler) i interpretatori. Prvi prevode program beznjegovog izvrsavanja. Rezultat je masinski kod koji je moguce izvrsiti. Interpretatori izvrsavajuinstrukcije programa odmah po njihovom prevodu, poput interpretatora za Perl, Awk, Python,PHP,...

Interpretatori najcesce pruzaju neke prednosti poput brzeg ispravka gresaka (nije potrebnoprevoditi program po korekciji) i izvrsavanja istog koda na razlicitim platformama bez ponovnogprevodenja ali su obicno znatno sporiji jer se proces prevodenja ponavlja.

Teorija dizajna jezickih procesora (prevodioca) se bavi proucavanjem leksicke analize (pret-varanje ulazne datoteke u niz osnovnih jedinica programskog jezika, tzv. tokena), procesiranjem(engl. parsing) i konacno prevodom.

2.10. Pojam algoritma. Tjuringova mašina. Cercova hipoteza. Programski jezici

Algoritam oznacava matematicku proceduru za neko izracunavanje ili konstrukciju. Karakter-istika je da se on moze sprovesti ”mehanicki”, bez razmisljanja. Usled ove ”mehanicke” prirodealgoritma, cesto se umesto pojma algoritma uvodi pojam matematicke masine koja je u stanjuda izracuna neki izlaz na osnovu zadatog ulaza.

9

Page 10: Osnovi programiranja - priprema za usmeni ispitmr04069/op/op_2.pdf · ovi delovi ˇcine raˇcunarski sistem. Pogledati i odgovor na 2. pitanje. 2.4. Funkcionisanje racunara (engl

Tjuringova masina je model koji je engleski matematicar Alan Tjuring formulisao 1936.godine. Model se sastoji od ogranicenog centralnog dela koji ne zavisi od ulaza i beskonacnogniza celija za smestanje podataka. Centralni kontrolni deo je u stanju da sprovede proizvoljnelokalne izmene u skeniranoj memorijskoj celiji kao i da postepeno menja poziciju u memoriji.Ovaj model se cesto koristi u teorijskim razmatranjima jer se na njemu mogu sprovesti svaracunanja koja se mogu sprovesti i na bilo kom drugom modelu matematicke masine.

Formalnije, Tjuringova masina se sastoji od:

1. k ≥ 1 traka koje se prostiru beskonacno u oba pravca. Trake su podeljene na beskonacanbroj celija. Svaka traka ima obelezenu pocetnu celiju koju cemo zvati 0-tom (nultom)celijom. Na svakoj celiji svake trake moze se ispisati neki simbol iz konacne azbuke Σ. Saizuzetkom konacno mnogo celija, ispisani simbol mora biti simbol ”*”koji oznacava praznuceliju.

2. Glave za citanje i pisanje, po jedna na svakoj traci, u svakom koraku pozicionirane nadnekom celijom trake

3. Kontrolne jedinice sa skupom mogucih stanja iz konacnog skupa Γ. U skupu postoje dvaposebna stanja ”Pocetak” i ”Kraj”

U pocetnom trenutku kontrolna jedinica je u stanju ”Pocetak”, a glave se nalaze iznadpocetnih celija traka. U svakom koraku, svaka glava cita simbol iz odgovarajuce celije na traci.U zavisnosti od procitanih simbola i trenutnog stanja, kontrolna jedinica radi neku od sledecetri stvari:

1. prelazi u novo stanje (koje moze biti isto)

2. upucuje svaku glavu da upise novu vrednost u celiju koju trenutno obraduje (ili izdajekomandu da sadrzaj ostane isti)

3. upucuje svaku glavu da se pomeri jedan korak levo ili desno, ili da ostane na istom mestu.Masina se zaustavlja kada dostigne stanje ”Kraj”.

Tjuringova masina se moze shvatiti i kao T = (k, Σ, Γ, α, β, γ) gde je k ≥ 1 prirodan broj kojioznacava broj traka, Σ skup azbuke i Γ skup stanja. Uz to vazi ∗ ∈ Σ i Pocetak,Kraj ∈ Γ i

α : Γ× Σk → Γ,β : Γ× Σk → Σk,γ : Γ× Σk → {−1, 0, 1}k

su proizvoljne funkcije takve da α daje novo stanje, β simbole koje treba upisati na svaku odtraka, a γ pokazuje koliko treba pomeriti svaku glavu.

10

Page 11: Osnovi programiranja - priprema za usmeni ispitmr04069/op/op_2.pdf · ovi delovi ˇcine raˇcunarski sistem. Pogledati i odgovor na 2. pitanje. 2.4. Funkcionisanje racunara (engl

Cercova hipoteza se odnosi na njegov λ-racun koja konstatuje da je on ekvivalentan intu-itivnom pojmu algoritma (pa i Tjuringove masine). Opste je prihvacena, mada formalni dokazne postoji jer ne postoji ni formalna definicija algoritma.

Programski jezik je nacin zapisa algoritma na nacin koji se jednoznacno moze prevesti iizvrsiti na nekom racunaru. Karakteristika jednoznacnosti je i razlog uvodenja vestackog jezikajer ona ne postoji pri izrazavanju algoritma prirodnim jezicima.

2.11. Poredenje jezika: Paskal i C

I C i Pascal su proceduralni programski jezici visokog nivoa. C ima manje (sintaksnih) ogranicenjapa je nesto nekomforniji za programera (svasta moze proci proces prevodenja), dok Pascal imanesto jednostavniju i citljiviju sintaksu. Nijedan ne obezbeduje automatsku dealokaciju di-namicki alocirane memorije (engl. garbage colector). Oba jezika podrzavaju ogranicen skuposnovnih tipova podataka sa nekim izuzecima (recimo skupovski tip u Pascal-u ili podrska zakompleksne brojeve u C99).

Postoje automatski prevodioci Pascal koda na C kao i obrnuto, mada usled slobodnije sin-takse C-a i brojnih bocnih efekata malo je teza automatsko pretvaranje C koda na Pascal.

Podrska za strukturiano programiranje je podjednaka, podrzane su osnovne konstrukcijepoput uslovnog izvrsavanja, ciklusa,... ali se primecuju razlike u sintaksi.

2.12. Osnovna svojstva jezika C. Struktura programa u jeziku C. Odvojena kompilacija

Programski jezik C je nastao sedamdesetih godina. Prethodilo mu je nekoliko dosta slicnihprogramskih jezika, ali se u praksi samo on zadrzao. U toku razvoja bilo je postavljeno nekolikozahteva, a najbitniji su sledeci:

• razviti visi programski jezik koji raspolaze barem nekim mogucnostima masinskog jezika(direktan pristup memoriji, veci skup definisanih opeatora itd.)

• razviti programski jezik sa malim skupom naredbi i relativno velikom bibliotekom funkcija

Kao i kod svakog vestackog jezika, mozemo definisati azbuku od koje se sastoji. Azbukaprogramskog jezika C se sastoji od:

• velikih i malih slova engleske abecede

11

Page 12: Osnovi programiranja - priprema za usmeni ispitmr04069/op/op_2.pdf · ovi delovi ˇcine raˇcunarski sistem. Pogledati i odgovor na 2. pitanje. 2.4. Funkcionisanje racunara (engl

• cifara dekadnog brojnog sistema

• specijalnih znakova: ( ) + - * ∼ ! # % & | = ’ ” : ; > < , . / \ ? { }

Koristeci azbuku jezika mozemo kreirati reci jezika koje se dele na imena i konstante (prostereci) i izrazi, naredbe i funkcije (slozene reci). Iako se ove reci mogu opisati recimo EBNFnotacijom ovde to ovde ipak nece biti uradeno.

Ime u programskom jeziku C je odredeno tako da se sastoji od slova, cifara i specijalnogznaka ” ” uz uslov da prvi znak ne moze biti cifra i da ime moze imati najvise 31 znak. Ime sekoristi za indentifikaciju oznaka, promenljivih, simbolickih konstanti i funkcija.

U C-u postoji tri tipa konstanti: celobrojne, razlomljene i znakovne. Celbrojna konstantamoze biti zapisana u dekadnom, okadnom i heksadecimalnom brojnom sistemu sa ili bez znaka(+/−). Konstante u dekadnom sistemu se zapisuju klasicno, bez vodece nule. Vodeca nulaodreduje oktalnu konstantu dok su ostale cifre iz skupa {0 . . . 7}. Konstanta u heksadecimalnomzapisu ima prefiks 0x nakon cega sledi niz cifara iz skupa {0, . . . 9, A, B,C, D,E, F} pri cemuslova A do F imaju redom vrednost 10 do 15. Umesto velikih mogu se koristiti i mala slova saistim znacenjem.

Razlomljena (ili mesovita) konstanta se zapisuju u dekadnom sistemu sa ili bez vodecegznaka (+/−). Moze se pojaviti sa ili bez eksponenta. Razlomljena konstanta bez eksponenta sesastoji od niza cifara koji cini celobrojni deo, decimalne tacke (.) i niza cifara koji cini decimalnideo. Konstanta sa eksponentom se sastji od konstante bez eksponenta nakon cega sledi slovo e(ili E) i eksponent. Eksponent je celobrojna konstanta sa ili bez znaka u dekadnom sistemu.

1.2e3, 0.6E-2, 0.1e-5

Vrednost ovako zapisane konstante se dobija kada se izracuna vrednost broja 10 stepenovanogna celobrojnu konstantu iza slova e (ili E) i pomnozi sa razlomljenom konstantom ispred slova.

Znakovna konstanta u programskom jeziku C se zapisuje ogradena jednostrukim navod-nicima (poput ′a′ ili ′b′) kada treba zapisati nekontrolni karakter koji je moguce uneti u ASCIIkodnoj stranici izuzev specijalnih karaktera \, ”,′. Kontrolni karakteri se unose preko kontrolnesekvence i to:

’\n’ znak za novi red

’\t’ znak za horizontalni tabulator (pomeranje)

’\r’ znak za pozicioniranje na pocetak reda (vracanje)

’\a’ znak cijim se stampanjem proizvodi zvucni efekat

’\b’ znak za vracanje jedno mesto unazad

12

Page 13: Osnovi programiranja - priprema za usmeni ispitmr04069/op/op_2.pdf · ovi delovi ˇcine raˇcunarski sistem. Pogledati i odgovor na 2. pitanje. 2.4. Funkcionisanje racunara (engl

’\f’ znak koji proizvodi prelazak na sledecu stranu (engl. formfeed)

’\"’, ’\’’, ’\\’ dvostruki, jednostruki znak navoda i \

Drugi nacin zapisa znakovne konstante jeste u formi trocifrenog oktalnog broja (’\ooo’) ili uformi dvocifrenog heksadecimalnog broja (’\xhh’) tako da taj broj predstavlja ASCII kod znaka.

Izrazi se u programskom jeziku C kreiraju od konstanti, imena promenljivih, imena funkcijai operatora u programskom jeziku C. Pri tome se obraca paznja na prioritet i asocijativnostoperatora.

Naredba moze biti izraz, prazna naredba ili poziv funkcije. Svaka naredba se zavrsava sim-bolom tacka i zarez (;) koji sluzi kao znak za kraj naredbe. Naredba moze biti slozena, naredbagrananja, naredba ciklusa ili naredba za nasilnu promenu toka. Ispred naredbe moze stajatioznaka odojena simbolom dve tacke (:). Unutar tela jedne funkcije oznaka mora biti jedinstvenoime. Slozena naredba se sastoji od jedne ili vise naredbi omedenih viticastim zagradama kojenakon toga cine jednu naredbu. Izvrsavanje slozene naredbe tece po redosledu u kome su onenavedene unutar viticastih zagrada. Naredbe grananja su if i switch konstrukcije, naredbe cik-lusa su while, do ... while i for konstrukcije dok su naredbe za nasilnu promenu toka naredbebreak, return i goto. Za detalje o svakoj konstrukciji pogledati odgovore na kasnija pitanja.

Funkcija je jos jedan primer slozene leksicke konstrukcije u programskom jeziku C. Sastoji seod odredenog broja deklaracija promenljivih i niza naredbi koji cine telo funkcije. Izracunavanjetog niza naredbi proizvodi jedan rezultat ciji je tip unapred odreden. Tip rezultata je istovremenoi tip funkcije. Funkcija bez rezultata ima tip void. Kada je potrebno vise od jednog rezultata,onda se oni prenose preko liste argumenata prenosom adrese na koju treba upisati rezultat. Listaargumenata je mehanizam pomocu koga se funkciji dostavljaju parametri na osnovu kojih trebaizracunati rezultat. Broj argumenata moze biti 0 ili vise. U standardnoj biblioteci (zaglavljestdarg.h) postoje funkcije za rad sa funkcijama sa promenljivim brojem argumenata (poputfunkcija printf ili scanf). Na primer:

Program 1 Korisnicke funkcije u programskom jeziku Cint funkcija(int arg1, char arg2, int *arg3) { funkcija

naredba1;naredba2;

return izraz;

}

U vezi sa funkcijama, pogleadati i odgovore na pitanja iz istoimene celine.

13

Page 14: Osnovi programiranja - priprema za usmeni ispitmr04069/op/op_2.pdf · ovi delovi ˇcine raˇcunarski sistem. Pogledati i odgovor na 2. pitanje. 2.4. Funkcionisanje racunara (engl

Program na programskom jeziku C cini odredeni broj korisnickih funkcija. Program obaveznomora imati funkciju sa imenom main, glavnu funkciju. Izvrsavanje programa pocinje izvrsavan-jem funkcije main i prekida se dolaskom do kraja izvrsavanja funkcije main. Pored funkcijaprogram sadrzi i preprocesorske direktive koje nalazu preprocesoru kompajlera da u programukljuci neku drugu datoteku (zaglavlje), da primeni makro zamene i slicno. Na primer:

Program 2 Primer programa na programskom jeziku C#include <stdio.h> /* zaglavlje gde je deklarisana funkcija printf */#define NUM 3 /* pre prevodjenja svaka pojava NUM u programu ce

biti zamenjena brojem 3 */int main() { main

int i; /* lokalna varijabla main funkcije */for(i=0;i<NUM;i++) { /* ciklus: i uzima vrednost 0,1,2 */

printf("Primer programa\n"); /* stampanje poruke na standardni izlaz */}return 0; /* povratna vrednost funkcije main, signalizira

okruzenju da se program korektno izvrsio */ 10

}

2.13. Iskazi za kontrolu toka u programskom jeziku C (karakteristike njihove upotrebe)

Odgovor

14

Page 15: Osnovi programiranja - priprema za usmeni ispitmr04069/op/op_2.pdf · ovi delovi ˇcine raˇcunarski sistem. Pogledati i odgovor na 2. pitanje. 2.4. Funkcionisanje racunara (engl

3. HTML

3.1. Jezici za opis strukture teksta (HTML): graficki logicki izgled teksta. Pojam hipertek-sta i realizacija hiperteksta u HTML-u

Odgovor

3.2. Struktura dokumenta u HTML-u. Razlika izmedu word i html dokumenta? Etiketeu okviru etikete <head> i njihovi atributi

Odgovor

3.3. Principi strukturiranja sadržaja dokumenta. Etikete u okviru tela dokumenta <body>

i njihovi atributi

Odgovor

15

Page 16: Osnovi programiranja - priprema za usmeni ispitmr04069/op/op_2.pdf · ovi delovi ˇcine raˇcunarski sistem. Pogledati i odgovor na 2. pitanje. 2.4. Funkcionisanje racunara (engl

4. Specifikacija programa

4.1. Program - formalna (funkcionalna) specifikacija. Preduslov i pauslov. Završavanjeprograma. Primeri specifikacije za skip, swap, koren.

Odgovor

4.2. Iskaz dodele i kompozicija iskaza dodele, njihova specifikacija. Aksioma dodele.Primer "swap in place". Interpretacija u prostoru stanja

Odgovor

4.3. Uslovni iskaz, njegova specifikacija i aksioma uslovnog iskaza. Primer izvodenjaprograma za maksimum dva broja

Odgovor

4.4. Repetitivni iskaz. Njegova specifikacija i aksioma. Invarijanta. Primer - Euklidovalgoritam

Odgovor

4.5. Princip (teorema) linearnog pretraživanja. Specifikacija. Primer a = [√

N ] - odnosKnutovog i Dejsktrinog rešenja. Logaritamska redukcija

Odgovor

4.6. Specifikacija celobrojnog nizovskog tipa. Izvodenje programa za odredivanje mak-simalnog elementa niza iz funkcionalne specifikacije

Odgovor

16

Page 17: Osnovi programiranja - priprema za usmeni ispitmr04069/op/op_2.pdf · ovi delovi ˇcine raˇcunarski sistem. Pogledati i odgovor na 2. pitanje. 2.4. Funkcionisanje racunara (engl

4.7. Algoritmi nad nizovima. Specifikacija, izvodenje i analiza rešenja. Primer pro-grama za rotaciju niza. Primer "trobojke"

Odgovor

17

Page 18: Osnovi programiranja - priprema za usmeni ispitmr04069/op/op_2.pdf · ovi delovi ˇcine raˇcunarski sistem. Pogledati i odgovor na 2. pitanje. 2.4. Funkcionisanje racunara (engl

5. Tipovi podataka

5.1. Tipovi podataka. Klasifikacija. Konstrukcija tipova u C-u

Odgovor

5.2. Operacije na bitu. Primene

Odgovor

5.3. Relacijski operatori. Elementi sintakse logickog izraza. Izracunavanje logickogizraza

Odgovor

5.4. Celobrojni tip (int). Svojstva i operacije. Interna reprezentacija. Implementacije

Odgovor

5.5. Opis sintakse aritmetickog izraza. Aritmeticki operatori, prioritet i asocijativnost uC-u

Odgovor

5.6. Algoritmi za unos i ispis celih brojeva (niska karaktera u broj; dekadni u binarni iobratno)

Odgovor

5.7. Karakterski tip (char) podataka u jeziku C.

Odgovor

18

Page 19: Osnovi programiranja - priprema za usmeni ispitmr04069/op/op_2.pdf · ovi delovi ˇcine raˇcunarski sistem. Pogledati i odgovor na 2. pitanje. 2.4. Funkcionisanje racunara (engl

5.8. Realni tip (float). Svojstva i operacije. Interna reprezentacija.

Odgovor

5.9. Algoritmi za unos i ispis realnih brojeva.

Odgovor

5.10. Pokazivacki tip. Nizovi i pokazivaci. Primeri

Odgovor

5.11. Karakterske niske. Funkcije za rad sa karakterima.

Odgovor

5.12. Struktura i unija. Konstrukcija i svojstva. Primeri

Odgovor

5.13. Nizovski tip, njegova svojstva, operacije nad njim, nacin implementiranja

Odgovor

5.14. Pojam datoteke. Svojstva i operacije. Struktura FILE. Veza sa fizickom da-totekom. Funkcije za rad sa datotekama

Odgovor

19

Page 20: Osnovi programiranja - priprema za usmeni ispitmr04069/op/op_2.pdf · ovi delovi ˇcine raˇcunarski sistem. Pogledati i odgovor na 2. pitanje. 2.4. Funkcionisanje racunara (engl

5.15. Standardni ulaz i izlaz. Redirekcija (preusmeravanje). Povezivanje komandi

Odgovor

5.16. Opis i svojstva tekstuelne datoteke.

Odgovor

5.17. Kopiranje datoteke u datoteku. Poredenje mogucih rešenja u C-u

Odgovor

20

Page 21: Osnovi programiranja - priprema za usmeni ispitmr04069/op/op_2.pdf · ovi delovi ˇcine raˇcunarski sistem. Pogledati i odgovor na 2. pitanje. 2.4. Funkcionisanje racunara (engl

6. Funkcije

6.1. Pojam funkcije. Deklaracija i poziv. Argumenti komandne linije

Odgovor

6.2. Vrste prenosa parametara i nacin implementiranja u C-u

Odgovor

6.3. Promenljivi broj argumenata funkcije u C-u. Primer funkcije za sabiranje

Odgovor

6.4. Globalne i lokalne promenljive. Blok. Vidljivost promenljivih u C-u

Odgovor

6.5. Modularizacija programa. Problemi i metode testiranja programa

Odgovor

6.6. Citljivost programa. Uloga komentara. Pismeno programiranje (Knut)

Odgovor

6.7. Metodologija strukturnog programiranja. Pristupi u izgradnji programa. Odnospouzdanosti i efikasnosti programa

Odgovor

21

Page 22: Osnovi programiranja - priprema za usmeni ispitmr04069/op/op_2.pdf · ovi delovi ˇcine raˇcunarski sistem. Pogledati i odgovor na 2. pitanje. 2.4. Funkcionisanje racunara (engl

6.8. Rekurzivne funkcije. Izvršavanje rekurzivne funkcije. Glavni poziv. Primer rekurzivnefunkcije za množenje dva cela broja

Odgovor

6.9. Analiza rekurzivnih programa za Fibonacijev niz i binomni koeficijent. Problemi irešenja. Hanojske kule

Odgovor

6.10. Konstrukcija rekurzivnih procedura. Svodenje problema. Primer crtanje mustrekvadrata i mustre trouglova

Odgovor

6.11. Konstrukcija rekurzivnih procedura. Konstrukcija procedure za brzo sortiranje(quicksort). Analiza složenosti

Odgovor

6.12. Konstrukcija rekurzivnih procedura. Rekurzivna procedura za binarno pretraži-vanje. Složenost

Odgovor

6.13. Eliminacija repne rekurzije. Primeri

Odgovor

6.14. Bocni (uzgredni) efekat. Primeri u C-u

Odgovor

22

Page 23: Osnovi programiranja - priprema za usmeni ispitmr04069/op/op_2.pdf · ovi delovi ˇcine raˇcunarski sistem. Pogledati i odgovor na 2. pitanje. 2.4. Funkcionisanje racunara (engl

7. Apstraktni tipovi i algoritmi nad njima

7.1. Apstraktni tipovi (skupovi, polinomi). Svosjtva. Nacin implementacije

Odgovor

7.2. Metode sortiranja. Poredenje algoritama. Karakteristike implementacije

Odgovor

7.3. Linearno, binarno i interpolirano pretraživanje.

Odgovor

7.4. Linearne liste. Svojstva i operacije nad listama. Nacini implementacije liste.

Odgovor

7.5. Problem alokacije i oslobadanja memorije. Funkcije za alokaciju memorije

Odgovor

7.6. Primer sa ispisivanjem elemenata linearne liste u obrnutom redosledu. Analizamogucih rešenja

Odgovor

7.7. Strukture podataka: stek. Svojstva i operacije. Nacini implementacije. Primerizracunavanja aritmetickog izraza

Odgovor

23

Page 24: Osnovi programiranja - priprema za usmeni ispitmr04069/op/op_2.pdf · ovi delovi ˇcine raˇcunarski sistem. Pogledati i odgovor na 2. pitanje. 2.4. Funkcionisanje racunara (engl

7.8. Strukture podataka: red. Svojstva i operacije. Nacin implementacije. Primeri

Odgovor

7.9. Pojam drveta. Vrste drveta. Svojstva i implementacija drveta. Obilazak drveta udubinu. Binarizacija drveta

Odgovor

7.10. Binarno drvo. Svojstva i operacije nad binarnim drvetom. Obilazak drveta udubinu.

Odgovor

7.11. Prefiksni kodovi i kompresija. Hafmanovi kodovi

Odgovor

7.12. Pretraživanje binarnog drveta. Pretraživanje binarnog drveta sa umetanjem.Primer recnika

Odgovor

7.13. Pojam grafa. Predstavljanje i implementacija grafa. Vrste grafova. Primeri

Odgovor

7.14. Odredivanje najkraceg puta (Dejsktrin algoritam)

Odgovor

24

Page 25: Osnovi programiranja - priprema za usmeni ispitmr04069/op/op_2.pdf · ovi delovi ˇcine raˇcunarski sistem. Pogledati i odgovor na 2. pitanje. 2.4. Funkcionisanje racunara (engl

7.15. Obilazak aciklicnog grafa (odredivanje cvora maksimalne težine). Markiranje.Primene

Odgovor

7.16. Metode direktnog pretraživanja (hashing). Razrešenje kolizije. Otvoreno adresir-anje i dvostruko heširanje

Odgovor

7.17. Pretraživanje po osnovi (cifarsko pretraživanje, radix)

Odgovor

7.18. Problem poredenja niski. Gruba sila. KMP-algoritam. Pojam obrasca (engl.pattern)

Odgovor

25

Page 26: Osnovi programiranja - priprema za usmeni ispitmr04069/op/op_2.pdf · ovi delovi ˇcine raˇcunarski sistem. Pogledati i odgovor na 2. pitanje. 2.4. Funkcionisanje racunara (engl

Napomena Autor ne daje garancije za ovde iznesene informacije za koje se lakomoze ispostaviti da su potpuno netacne. Dokument je izraden koriscenjem paketaLATEX, a izvorni oblik mozete preuzeti sa studentske stranice autora koja se nalazi nalokaciji http://alas.matf.bg.ac.yu/ mr04069. Dokument je objavljen pod odredbamaGNU licence za slobodnu dokumentaciju (GNU Free Documentation License) i uskladu sa njima ga mozete koristiti. Izvori korisceni u dokumentu su popisani uspisku literature.

26

Page 27: Osnovi programiranja - priprema za usmeni ispitmr04069/op/op_2.pdf · ovi delovi ˇcine raˇcunarski sistem. Pogledati i odgovor na 2. pitanje. 2.4. Funkcionisanje racunara (engl

Literatura

27

Page 28: Osnovi programiranja - priprema za usmeni ispitmr04069/op/op_2.pdf · ovi delovi ˇcine raˇcunarski sistem. Pogledati i odgovor na 2. pitanje. 2.4. Funkcionisanje racunara (engl

Sadržaj

1 Uvodne napomene 1

2 Preliminarije 2

2.1 Istorija razvoja racunara (kalkulatori i automati) . . . . . . . . . . . . . . . . . . 2

2.2 Arhitektura i funkcionisanje fon Nojmanove masine . . . . . . . . . . . . . . . . . 3

2.3 Struktura racunara (engl. hardware). Racunarski sistem. . . . . . . . . . . . . . . 3

2.4 Funkcionisanje racunara (engl. software) . . . . . . . . . . . . . . . . . . . . . . . 4

2.5 Bit, bajt, karakter. ASCII-skup karaktera. Standardi o karakterskim skupovima. 4

2.6 Azbuka Σ , niska (rec), skup Σ∗, jezik nad Σ, operacije nad jezicima. Faktor ipodrec. Poredak nad Σ∗ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

2.7 Sintaksa i semantika programskih jezika . . . . . . . . . . . . . . . . . . . . . . . 7

2.8 Vestacki i prirodni jezici. Formalna gramatika i njen opis. BNF, EBNF i sintaksnidijagrami. Primeri definicije identifikatora i celobrojne konstante . . . . . . . . . 7

2.9 Jezicki procesori (kompilatori i interpretatori) . . . . . . . . . . . . . . . . . . . . 9

2.10 Pojam algoritma. Tjuringova masina. Cercova hipoteza. Programski jezici . . . . 9

2.11 Poredenje jezika: Paskal i C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

2.12 Osnovna svojstva jezika C. Struktura programa u jeziku C. Odvojena kompilacija 11

2.13 Iskazi za kontrolu toka u programskom jeziku C (karakteristike njihove upotrebe) 14

3 HTML 15

3.1 Jezici za opis strukture teksta (HTML): graficki logicki izgled teksta. Pojamhiperteksta i realizacija hiperteksta u HTML-u . . . . . . . . . . . . . . . . . . . 15

3.2 Struktura dokumenta u HTML-u. Razlika izmedu word i html dokumenta?Etikete u okviru etikete <head> i njihovi atributi . . . . . . . . . . . . . . . . . . 15

28

Page 29: Osnovi programiranja - priprema za usmeni ispitmr04069/op/op_2.pdf · ovi delovi ˇcine raˇcunarski sistem. Pogledati i odgovor na 2. pitanje. 2.4. Funkcionisanje racunara (engl

3.3 Principi strukturiranja sadrzaja dokumenta. Etikete u okviru tela dokumenta<body> i njihovi atributi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

4 Specifikacija programa 16

4.1 Program - formalna (funkcionalna) specifikacija. Preduslov i pauslov. Zavrsavanjeprograma. Primeri specifikacije za skip, swap, koren. . . . . . . . . . . . . . . . . 16

4.2 Iskaz dodele i kompozicija iskaza dodele, njihova specifikacija. Aksioma dodele.Primer ”swap in place”. Interpretacija u prostoru stanja . . . . . . . . . . . . . . 16

4.3 Uslovni iskaz, njegova specifikacija i aksioma uslovnog iskaza. Primer izvodenjaprograma za maksimum dva broja . . . . . . . . . . . . . . . . . . . . . . . . . . 16

4.4 Repetitivni iskaz. Njegova specifikacija i aksioma. Invarijanta. Primer - Euklidovalgoritam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

4.5 Princip (teorema) linearnog pretrazivanja. Specifikacija. Primer a = [√

N ] -odnos Knutovog i Dejsktrinog resenja. Logaritamska redukcija . . . . . . . . . . 16

4.6 Specifikacija celobrojnog nizovskog tipa. Izvodenje programa za odredivanje mak-simalnog elementa niza iz funkcionalne specifikacije . . . . . . . . . . . . . . . . . 16

4.7 Algoritmi nad nizovima. Specifikacija, izvodenje i analiza resenja. Primer pro-grama za rotaciju niza. Primer ”trobojke” . . . . . . . . . . . . . . . . . . . . . . 17

5 Tipovi podataka 18

5.1 Tipovi podataka. Klasifikacija. Konstrukcija tipova u C-u . . . . . . . . . . . . . 18

5.2 Operacije na bitu. Primene . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

5.3 Relacijski operatori. Elementi sintakse logickog izraza. Izracunavanje logickogizraza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

5.4 Celobrojni tip (int). Svojstva i operacije. Interna reprezentacija. Implementacije 18

5.5 Opis sintakse aritmetickog izraza. Aritmeticki operatori, prioritet i asocijativnostu C-u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

29

Page 30: Osnovi programiranja - priprema za usmeni ispitmr04069/op/op_2.pdf · ovi delovi ˇcine raˇcunarski sistem. Pogledati i odgovor na 2. pitanje. 2.4. Funkcionisanje racunara (engl

5.6 Algoritmi za unos i ispis celih brojeva (niska karaktera u broj; dekadni u binarnii obratno) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

5.7 Karakterski tip (char) podataka u jeziku C. . . . . . . . . . . . . . . . . . . . . . 18

5.8 Realni tip (float). Svojstva i operacije. Interna reprezentacija. . . . . . . . . . . 19

5.9 Algoritmi za unos i ispis realnih brojeva. . . . . . . . . . . . . . . . . . . . . . . . 19

5.10 Pokazivacki tip. Nizovi i pokazivaci. Primeri . . . . . . . . . . . . . . . . . . . . 19

5.11 Karakterske niske. Funkcije za rad sa karakterima. . . . . . . . . . . . . . . . . . 19

5.12 Struktura i unija. Konstrukcija i svojstva. Primeri . . . . . . . . . . . . . . . . . 19

5.13 Nizovski tip, njegova svojstva, operacije nad njim, nacin implementiranja . . . . 19

5.14 Pojam datoteke. Svojstva i operacije. Struktura FILE. Veza sa fizickom da-totekom. Funkcije za rad sa datotekama . . . . . . . . . . . . . . . . . . . . . . . 19

5.15 Standardni ulaz i izlaz. Redirekcija (preusmeravanje). Povezivanje komandi . . . 20

5.16 Opis i svojstva tekstuelne datoteke. . . . . . . . . . . . . . . . . . . . . . . . . . . 20

5.17 Kopiranje datoteke u datoteku. Poredenje mogucih resenja u C-u . . . . . . . . . 20

6 Funkcije 21

6.1 Pojam funkcije. Deklaracija i poziv. Argumenti komandne linije . . . . . . . . . 21

6.2 Vrste prenosa parametara i nacin implementiranja u C-u . . . . . . . . . . . . . . 21

6.3 Promenljivi broj argumenata funkcije u C-u. Primer funkcije za sabiranje . . . . 21

6.4 Globalne i lokalne promenljive. Blok. Vidljivost promenljivih u C-u . . . . . . . 21

6.5 Modularizacija programa. Problemi i metode testiranja programa . . . . . . . . . 21

6.6 Citljivost programa. Uloga komentara. Pismeno programiranje (Knut) . . . . . . 21

6.7 Metodologija strukturnog programiranja. Pristupi u izgradnji programa. Odnospouzdanosti i efikasnosti programa . . . . . . . . . . . . . . . . . . . . . . . . . . 21

30

Page 31: Osnovi programiranja - priprema za usmeni ispitmr04069/op/op_2.pdf · ovi delovi ˇcine raˇcunarski sistem. Pogledati i odgovor na 2. pitanje. 2.4. Funkcionisanje racunara (engl

6.8 Rekurzivne funkcije. Izvrsavanje rekurzivne funkcije. Glavni poziv. Primerrekurzivne funkcije za mnozenje dva cela broja . . . . . . . . . . . . . . . . . . . 22

6.9 Analiza rekurzivnih programa za Fibonacijev niz i binomni koeficijent. Problemii resenja. Hanojske kule . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

6.10 Konstrukcija rekurzivnih procedura. Svodenje problema. Primer crtanje mustrekvadrata i mustre trouglova . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

6.11 Konstrukcija rekurzivnih procedura. Konstrukcija procedure za brzo sortiranje(quicksort). Analiza slozenosti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

6.12 Konstrukcija rekurzivnih procedura. Rekurzivna procedura za binarno pretrazi-vanje. Slozenost . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

6.13 Eliminacija repne rekurzije. Primeri . . . . . . . . . . . . . . . . . . . . . . . . . 22

6.14 Bocni (uzgredni) efekat. Primeri u C-u . . . . . . . . . . . . . . . . . . . . . . . . 22

7 Apstraktni tipovi i algoritmi nad njima 23

7.1 Apstraktni tipovi (skupovi, polinomi). Svosjtva. Nacin implementacije . . . . . . 23

7.2 Metode sortiranja. Poredenje algoritama. Karakteristike implementacije . . . . . 23

7.3 Linearno, binarno i interpolirano pretrazivanje. . . . . . . . . . . . . . . . . . . . 23

7.4 Linearne liste. Svojstva i operacije nad listama. Nacini implementacije liste. . . . 23

7.5 Problem alokacije i oslobadanja memorije. Funkcije za alokaciju memorije . . . . 23

7.6 Primer sa ispisivanjem elemenata linearne liste u obrnutom redosledu. Analizamogucih resenja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

7.7 Strukture podataka: stek. Svojstva i operacije. Nacini implementacije. Primerizracunavanja aritmetickog izraza . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

7.8 Strukture podataka: red. Svojstva i operacije. Nacin implementacije. Primeri . . 24

7.9 Pojam drveta. Vrste drveta. Svojstva i implementacija drveta. Obilazak drvetau dubinu. Binarizacija drveta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

31

Page 32: Osnovi programiranja - priprema za usmeni ispitmr04069/op/op_2.pdf · ovi delovi ˇcine raˇcunarski sistem. Pogledati i odgovor na 2. pitanje. 2.4. Funkcionisanje racunara (engl

7.10 Binarno drvo. Svojstva i operacije nad binarnim drvetom. Obilazak drveta udubinu. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

7.11 Prefiksni kodovi i kompresija. Hafmanovi kodovi . . . . . . . . . . . . . . . . . . 24

7.12 Pretrazivanje binarnog drveta. Pretrazivanje binarnog drveta sa umetanjem.Primer recnika . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

7.13 Pojam grafa. Predstavljanje i implementacija grafa. Vrste grafova. Primeri . . . 24

7.14 Odredivanje najkraceg puta (Dejsktrin algoritam) . . . . . . . . . . . . . . . . . . 24

7.15 Obilazak aciklicnog grafa (odredivanje cvora maksimalne tezine). Markiranje.Primene . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

7.16 Metode direktnog pretrazivanja (hashing). Razresenje kolizije. Otvoreno adresir-anje i dvostruko hesiranje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

7.17 Pretrazivanje po osnovi (cifarsko pretrazivanje, radix) . . . . . . . . . . . . . . . 25

7.18 Problem poredenja niski. Gruba sila. KMP-algoritam. Pojam obrasca (engl.pattern) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

32