algoritmi i programiranje hr

46
VII. ALGORITMI I PROGRAMIRANJE U drugoj glavi ove knjige razmatrani su računarski sistemi i ukazano je na to da se svaki računarski sistem sastoji od dve komponente: hardvera i softvera. Hardver čine delovi i uređaji od kojih je sastavljen računar, a softver programi koji upravljaju radom računara. U drugom poglavlju druge glave razmatrane su različite kategorije računarskog softvera. Neki aplikacioni programi razmotreni su u okviru četvrte glave (Calculator, Minesweeper, Notepad, Wordpad i Paint) a program za obradu teksta MS Word detaljno je razmotren u petoj glavi. Sve ove programe koje korisnici upotrebljavaju ne razmišljajući o tome kako ovi programi rade, napisali su ljudi pri čemu su precizno morali da predvide sve si- tuacije koje mogu da se dogode prilikom njihove primene. Ukoliko se dogodi situacija koja nije bila predviđena prilikom pisanja programa, računar će da ura- di nešto nepredviđeno ili će da prestane da reaguje (da se "zakuca") što dovodi do potrebe za njegovim restartovanjem. U ovoj glavi će u osnovnim crtama biti prikazan postupak programiranja računara. Šta je elektronski računar? U dnevnoj štampi i periodičnim časopisima za elektronski računar često se upotrebljavao i termin elektronski mozak. Uopšte, iz neznanja onih koji su pisali o tome u člancima u štampi moglo se (a može još uvek) pročitati mnogo netačnosti, pa i gluposti o računaru i njegovim moguć- nostima. Računar (odnosno računarski sistem) je mašina koja obrađuje ulazne podatke i iz njih proizvodi izlazne podatke ili informacije. Na primer, za razliku od mašine za pletenje u koju s jedne strane ulazi vuna, a s druge strane izlaze džemperi, u računar s jedne strane ulaze podaci, a s druge strane izlaze rezultati obrade tih podataka. Računar je mašina bez inteligencije ("glupa" mašina) jer on (kao i svaka druga mašina) doslovno izvršava samo ono što mu je zadato i na način kako mu je zadato. Za svaku akciju mora da se zada računaru posebna jasna naredba (instrukcija) koju računar izvršava doslovno, brzo i tačno. Računar izvršava ono što je zadato naredbom, a ne ono što je programer mislio. Da bi se rešio neki problem primenom računara mora da se zada računaru potpuni skup instrukcija u kome su precizno zadati svi potrebni koraci šta računar treba da uradi, jer računar nema sposobnost odlučivanja u nejasnim situacijama. Skup instrukcija za računar napisan za rešavanje jednog problema naziva se program. Proces pisanja instrukcija za računar naziva se programiranje. © Nikola Klem

Upload: dejan-radivojevic

Post on 01-Dec-2015

148 views

Category:

Documents


11 download

DESCRIPTION

Algoritmi i programiranje u C#

TRANSCRIPT

Page 1: Algoritmi i Programiranje Hr

VII. ALGORITMI I PROGRAMIRANJE

U drugoj glavi ove knjige razmatrani su računarski sistemi i ukazano je na to da se svaki računarski sistem sastoji od dve komponente: hardvera i softvera. Hardver čine delovi i uređaji od kojih je sastavljen računar, a softver programi koji upravljaju radom računara. U drugom poglavlju druge glave razmatrane su različite kategorije računarskog softvera. Neki aplikacioni programi razmotreni su u okviru četvrte glave (Calculator, Minesweeper, Notepad, Wordpad i Paint) a program za obradu teksta MS Word detaljno je razmotren u petoj glavi. Sve ove programe koje korisnici upotrebljavaju ne razmišljajući o tome kako ovi programi rade, napisali su ljudi pri čemu su precizno morali da predvide sve si-tuacije koje mogu da se dogode prilikom njihove primene. Ukoliko se dogodi situacija koja nije bila predviđena prilikom pisanja programa, računar će da ura-di nešto nepredviđeno ili će da prestane da reaguje (da se "zakuca") što dovodi do potrebe za njegovim restartovanjem. U ovoj glavi će u osnovnim crtama biti prikazan postupak programiranja računara.

Šta je elektronski računar? U dnevnoj štampi i periodičnim časopisima za elektronski računar često se upotrebljavao i termin elektronski mozak. Uopšte, iz neznanja onih koji su pisali o tome u člancima u štampi moglo se (a može još uvek) pročitati mnogo netačnosti, pa i gluposti o računaru i njegovim moguć-nostima. Računar (odnosno računarski sistem) je mašina koja obrađuje ulazne podatke i iz njih proizvodi izlazne podatke ili informacije. Na primer, za razliku od mašine za pletenje u koju s jedne strane ulazi vuna, a s druge strane izlaze džemperi, u računar s jedne strane ulaze podaci, a s druge strane izlaze rezultati obrade tih podataka.

Računar je mašina bez inteligencije ("glupa" mašina) jer on (kao i svaka druga mašina) doslovno izvršava samo ono što mu je zadato i na način kako mu je zadato. Za svaku akciju mora da se zada računaru posebna jasna naredba (instrukcija) koju računar izvršava doslovno, brzo i tačno. Računar izvršava ono što je zadato naredbom, a ne ono što je programer mislio. Da bi se rešio neki problem primenom računara mora da se zada računaru potpuni skup instrukcija u kome su precizno zadati svi potrebni koraci šta računar treba da uradi, jer računar nema sposobnost odlučivanja u nejasnim situacijama. Skup instrukcija za računar napisan za rešavanje jednog problema naziva se program. Proces pisanja instrukcija za računar naziva se programiranje.

© Nikola Klem

Page 2: Algoritmi i Programiranje Hr

Osnovi računarske pismenosti

© Nikola Klem 2

1. POJAM I OPIS ALGORITMA

Kao što je već pomenuto, da bi se rešio neki problem primenom računara mora da se zada računaru potpuni skup instrukcija u kome su precizno zadati svi potrebni koraci šta računar treba da uradi. Način kako računar rešava problem je potpuno isti kao i kada bi ga rešavao čovek bez računara. Jedina razlika je u tome što računar operacije izvodi brzo (nekoliko milijardi puta brže nego kada bi ih izvodio čovek) i tačno (bez grešenja). Osim toga, primenom različitih pro-grama računar može da rešava raznovrsne probleme. Prema tome, prednosti ko-rišćenja računara za rešavanje problema su: brzina, tačnost i raznovrsnost.

U nastavku je prikazan način pristupa rešavanju problema primenom raču-nara, njegovo razlaganje na jednostavnije probleme, algoritam za rešavanje pro-blema i osnovne algoritamske strukture.

1.1. Rešavanje problema primenom računara Postupak u kome se računar koristi za rešavanje problema sastoji se iz sle-

dećih koraka: 1. Izbor i formulacija problema, 2. Analiza problema, 3. Izbor postupka za rešavanje problema, 4. Projektovanje programa, 5. Pisanje programa u odgovarajućem programskom jeziku, 6. Testiranje programa, 7. Izrada dokumentacije, 8. Održavanje programa. Ovi koraci nisu strogo odvojeni i nezavisni, nego se prožimaju kroz ceo

tok razvoja i eksploatacije programa. Često se u nekom od ovih koraka otkrije da je potrebno izvršiti promene u koracima koji su mu prethodili i ovakvo vraćanje unazad mogućno je i više puta u toku pisanja programa.

Izbor i formulacija problema U ovom koraku razmatra se da li problem može i da li je opravdano da se

rešava primenom računara. Problem za čije je rešavanje potrebna primena računara mora da ima odgovarajuću težinu, budući da je za korišćenje računara potrebno uložiti ne mali napor i ako je problem dovoljno jednostavan da se može rešiti i bez pomoći računara, a ne ponavlja se više puta, pomoć računara može da bude skuplja od koristi. Ovo treba imati u vidu, jer su primeri koji se koriste u obuci uvek kratki i trivijalni, ali oni samo predstavljaju uvežbavanje da bi se moglo pristupiti rešavanju složenijih problema.

S druge strane, problem može biti suviše veliki (obiman) za korišćenje ras-položivog računara iz različitih razloga, kao na primer, memorijskog kapaciteta računara, potrebnog vremena rada računara, obima ulaznih podataka itd.

Page 3: Algoritmi i Programiranje Hr

Algoritmi i programiranje

Osim toga, primenom računara mogu se rešiti samo problemi koji su definisani vrlo precizno. Jednostavno rečeno, ne može se očekivati da računar izvede postupak koji ne bi mogao da izvede čovek kada bi imao dovoljno vremena. Računar samo dozvoljava ogromno povećanje u količini simbola sa kojima operiše, preciznosti i pouzdanosti sa kojom radi i brzini sa kojom se izvodi proces. Razlika u redu veličine, u obimu, brzini i pouzdanosti dovodi do stvaranja spektakularnih mogućnosti, ali osnovni proces je jednostavan i u osno-vi je isti kao onaj što ga izvodi čovek.

Prema tome, da bi se primenom računara rešio problem nije dovoljno imati samo maglovite ideje kako bi rešenje trebalo da izgleda, nego proces rešavanja mora biti definisan jasno i precizno sa svim detaljima.

Analiza problema Problem koji treba rešiti primenom računara obično nije zadat u takvom

obliku da se može neposredno preneti na računar. U opisu problema obično se koriste reči koje su uobičajene u području iz koga je problem. Na osnovu ovako zadanog problema treba prvo ustanoviti: koji su podaci zadani, šta treba da se izračuna kao rezultat, kao i da li je mogućno na osnovu zadanih podataka dobiti tražene rezultate.

U ovoj fazi moraju se precizno utvrditi svi zadani podaci i način na koji će biti predstavljeni u računaru, kao i u kom slučaju će, koji rezultati i na koji način biti prikazani.

Analizom se utvrđuje šta je sve obuhvaćeno rešavanjem problema, kao i da dati problem nije specijalan slučaj nekog opštijeg problema za čije rešavanje već postoji program.

Izbor postupka za rešavanje problema U ovoj fazi se na osnovu zadatih početnih podataka i traženih rezultata od-

ređuje način na koji se od početnih podataka dolazi do rešenja. Većina problema može da se reši na više načina od kojih svaki ima određene prednosti i nedostat-ke. Različiti faktori utiču na izbor određenog postupka kao, na primer, tačnost postupka, broj operacija za izvođenje postupka (i u vezi sa tim dužine rada raču-nara), potrebni računarski kapaciteti (memorija, disk), lakoća sa kojom se postupak programira itd. U ovoj fazi dolazi do izražaja veština i iskustvo prog-ramera, jer pogrešan izbor postupka može da dovede do velikih promašaja koji se manifestuju: pogrešnim rezultatima, nepotrebnom dužinom rada programa, preteranim utroškom vremana za programiranje itd.

Projektovanje programa Pisanje računarskog softvera je ozbiljan posao iako se njemu često pristupa

neozbiljno. Program je proizvod kao i svaki drugi (sekcija 2.5. druga glava) i proizvodnji programa treba posvetiti odgovarajuću pažnju. Kao što se zidanju zgrade ili proizvodnji neke mašine ne pristupa bez odgovarajućeg projekta, tako

© Nikola Klem 3

Page 4: Algoritmi i Programiranje Hr

Osnovi računarske pismenosti

© Nikola Klem 4

ni pisanju programa ne treba pristupiti bez odgovarajućeg projekta. Obim i veličina projekta su u srazmeri sa veličinom i važnošću programskog proizvoda. U poređenju sa građevinarstvom, jasno je da neće biti isti veličine i obima projekt za kućicu za psa, porodičnu kuću ili oblakoder sa sto spratova. U ovom slučaju projekti se razlikuju po nivoima detaljnosti (idejno rešenje, idejni projekt, glavni projekt, izvođački projekt). Tako će i kod proizvodnje softvera, u zavisnosti od veličine i značaja programa projekt biti različite veličine od skice, pa do više knjiga.

Kod svih problema bez obzira na njihovu veličinu i kompleksnost postup-ka potrebno je pre početka pisanja programa izvršiti sistematsku analizu postav-ljenih zahteva i na osnovu toga izvršiti projektovanje celokupne strukture prog-rama. Ima više pristupa projektovanju programa, ali najuspešniji je poznat pod imenom odozgo na dole ("top-down") Kod ovog pristupa programer razmatra ceo problem (tj. formulaciju problema) kao najviši nivo i deli ga na logičke celi-ne. Svaka celina se razmatra nezavisno i dalje deli na logičke delove. Ovaj pos-tupak se dalje nastavlja dok se ne dođe do nivoa koda (slika 7.1)

NAJVI[ I NIVO (0)

NIVO 1

NIVO 2

NIVO 3

MODUL 1

MODUL 4 MODUL 5 MODUL 6 MODUL 7

MODUL 2

MOD 10 MOD 11MOD 9MOD 8

PROBLEM

MODUL 3

Slika 7.1. Projektovanje programa odozgo na dole

Ovakvim načinom projektovanja programa dobija se određeni broj logič-kih delova ili modula. Svaki modul je nezavisan od drugih modula i obrađuje specifične ulazne podatke i daje specifične rezultate, a da pri tome ne utiče na drugi modul ili podatke. Isti može biti zamenjen drugim modulom koji mu je funkcionalno ekvivalentan.

Održavanje ovakve modularnosti do nivoa koda omogućava bolje razume-vanje i lakše kasnije održavanje programa. Neki moduli mogu da se primene u više delova programa u kom slučaju se modul pojavljuje samo jednom u prog-ramu ali se koristi na različitim mestima. Pri programu treba se truditi da program bude što jednostavniji i pregledniji jer se time lakše uočavaju i otkla-njaju eventualne greške.

U fazi projektovanja programa treba izvršiti i izbor programskog jezika u kome će program biti napisan jer i taj izbor može da ima uticaj na postupak za rešavanje problema.

Page 5: Algoritmi i Programiranje Hr

Algoritmi i programiranje

Rezultat faze projektovanja programa je algoritam za rešavanje problema. S obzirom na nivo razlaganja on može da ima različite nivoe detaljnosti, ali na svakom nivou postoji potpuni algoritam za rešavanje problema.

Pisanje programa Kada je postupak za rešavanje problema određen pristupa se njegovom

programiranju (kodiranju). S obzirom da se u postupku projektovanja programa dolazi do nivoa koda, prevođenje algoritamskog opisa u programski jezik je relativno jednostavno, ali ipak mora da bude izvedeno sa velikom pažnjom. Po završetku ovog koraka dobija se program za rešavanje datog problema prime-nom računara.

Testiranje programa Potvrđivanje korektnosti programa zahteva demonstraciju da program

stvarno zadovoljava preciznim zahtevima problema. Kako se i kod najjedno-stavnijih problema prave greške u svakoj fazi, svako ko namerava da primenjuje računar za rešavanje nekog problema mora o tome da vodi računa i mora da pla-nira tokom procesa projektovanja programa i postupak za otkrivanje grešaka u njemu. Iako se tipično više od pola ukupnog vremena, napora i troškova raču-narskog procesa utroši na ispravljanje i testiranje programa, rezultati često nisu zadovoljavajući. Veliki delovi programa za koji autori tvrde da je korektan često sadrže skrivene greške. Ova situacija je toliko ozbiljna da mnogi misle o raču-narima kao o nečem vrlo nepouzdanom, a gotovo u svim slučajevima istina je u tome da program nije dobro projektovan i testiran.

Mnogi programeri gledaju na testiranje negativno, kao na jednu ekstra fazu procesa koja je potrebna samo ako se pojave greške. Međutim, testiranje je bitan deo programiranja. Njemu treba pristupiti pozitivno i pokušati da se otkriju sve skrivene greške. To ne može da se uradi samo jednostavnim primerima, nego smišljeno sastavljenim testovima koji će koristiti program sveobuhvatnije nego što će se on koristiti u stvarnoj primeni. Pravljenje ovakvih teških testova zahteva od programera posebno iskustvo.

Iako je testiranje navedeno kao posebna faza procesa programiranja ono se stvarno isprepliće sa celim procesom projektovanja i pisanja programa i ako se ostavi za završnu fazu rezultati su gotovo sigurno nezadovoljavajući. Bitno je da se potreba za potvrđivanjem korektnosti programa razmatra pri projektovanju celokupne strukture programa i da se pripreme za testiranje ugrade u program pri njegovom pisanju.

Izrada dokumentacije Kada je program napisan i testiran potrebno je za isti napraviti dokumen-

taciju. Ova dokumentacija opisuje šta program radi, kako se koristi, koja su nje-gova ograničenja, kako se modifikuje, koji je postupak primenjen za rešavanje problema, ko su autori i drugo. I ovaj korak bi u stvari trebalo da bude deo svih

© Nikola Klem 5

Page 6: Algoritmi i Programiranje Hr

Osnovi računarske pismenosti

© Nikola Klem 6

prethodnih koraka, a ne da se počne sa izradom dokumentacije tek kada je sve drugo završeno.

Održavanje programa Tokom korišćenja programa može da se u programu nađe greška ili da se

pojavi potreba da se program izmeni i proširi. Izmene i popravke programa u eksploataciji tokom njegovog životnog ciklusa (upotrebe), zovu se održavanje programa. Održavanje programa se često potcenjuje iako je ono bitno za uspeš-no korišćenje programa. Održavanje će biti lakše ukoliko je pripremljena dobra dokumentacija o programu, a program napisan jednostavno i čitljivo.

1.2. Algoritam Naziv algoritam potiče od imena persijskog matematičara Al-Khowarizmi-

ja1 koji je u svom udžbeniku matematike rešenja nekih aritmetičkih problema prikazao u obliku uputstava koja su se sastojala od tačno određenih osnovnih koraka. Ovakva uputstva su kasnije nazvana algoritmima. Razvojem računara algoritmi su postali samostalno i važno područje računarskih nauka.

Algoritam je u opštem slučaju konačni redosled operatora, elementarnih obrada i pravila o njihovoj primeni u cilju dobijanja rešenja nekog problema2. Izvođenje svakog operatora predstavlja jedan algoritamski korak.

Sa računarskog stanovišta ova definicija nije dovoljna pa se mora dopuniti sa sa još nekim uslovima koje algoritam mora da zadovolji. To su:

• definisanost, • konačnost i • rezultat. Definisanost. Svaka operacija ili pravilo mora imati definisano i samo

jedno značenje, tj. rezultat svake operacije mora biti jasno definisan. Konačnost. Svaki korak mora biti takav da bi ga, bar u prinicipu, mogao

izvesti čovek koristeći olovku i papir za konačno vreme. Naime, postoje jedno-stavni i jednoznačni postupci koji nisu algoritmi jer su beskonačni sa stanovišta broja koraka potrebnog za dobijanje rezultata. Algoritmi se moraju zaustaviti posle izvršenog konačnog broja koraka i u konačnom vremenu. U vezi sa primenom računara treba napomenuti da vreme rada računara potrebno za završetak algoritma treba biti razumno kratko.

Rezultat. Po završetku algoritma mora da postoji mogućnost da se ustanovi rezultat njegovog rada, odnosno da li je algoritam postigao svoj cilj ili nije.

Pojam algoritma ne mora biti vezan za primenu računara. Algoritmi se koriste u svakodnevnom životu za izvršavanje različitih aktivnosti. Odličan

1 Abu Ja'far Mohammed ibn Musa al Khowarizmi (oko 825. godine n.e.) 2 Obično je namena algoritma rešavanje nekog problema mada algoritmi postoje i nezavisno od problema.

Page 7: Algoritmi i Programiranje Hr

Algoritmi i programiranje

primer algoritma je kuvarski recept. Postupak pripremanja hrane rastavljen je na jednostavne i lako razumljive korake. Pri pripremanju jela koraci se izvršavaju jedan za drugim onim redosledom koji je propisan. Svaki korak mora da bude poznat, a celi recept nedvosmislen kako bi se posle konačnog niza radnji dobio željeni rezultat – pripremljeno jelo.

Postoje različite mogućnosti za predstavljanje algoritma, ali se on najčešće pretstavlja grafički pod imenom dijagram toka programa (flowchart). U ovom dijagramu pojedine akcije predstavljene su tačno određenim grafičkim simbo-lima čime se osigurava jednostavnost, preglednost i jednoznačnost zapisa algo-ritma. Najčešće korišćeni simboli prikazani su na slici 7.2. Ostali potrebni simboli biće uključivani prema potrebi tokom daljeg izlaganja.

Grafički simbol Značenje

Terminator

Unošenje podataka

Izdavanje podataka

Obrada podataka

Odluka

Povezivanje algoritamskih koraka

Slika 7.2. Grafički simboli algoritamskih koraka

Simbolom terminator označavaju se početna i završne tačke algoritma. Početne tačka algoritma može biti samo jedna, a završnih tačaka može biti onoliko koliko je logički opravdano. Tekstom unutar simbola definiše se koju tačku predstavlja simbol (početak, kraj).

Simboli za unošenje i izdavanje podataka označavaju komunikaciju raču-nara sa spoljnim svetom, tj. unošenje podataka spolja u memoriju računara i izdavanje podataka koji se nalaze u memoriji računara na uvid korisniku.

© Nikola Klem 7

Page 8: Algoritmi i Programiranje Hr

Osnovi računarske pismenosti

© Nikola Klem 8

Simbolom za obradu podataka označavaju se operacije koje računar izvodi nad podacima koje se nalaze u njegovoj memoriji.

Simbolom za odluku označava se korak u kome dolazi do grananja u algoritmu u zavisnosti od nekog uslova.

Algoritamski koraci su međusobno povezani linijama. U slučaju da nije na dijagramu očigledan redosled izvršavanja algoritamskih koraka na linije se stav-ljaju strelice kojima se označava smer kretanja u algoritmu. Ako nije drugačije označeno podrazumeva se kretanje odozgo nadole i sleva nadesno.

1.3. Algoritamske strukture Pod strukturom algoritma podrazumeva se redosled izvršavanja pojedinih

vrsta algoritamskih koraka u algortimu. Sa stanovišta ovog redosleda postoje tri osnovne algoritamske strukture: linijska, razgranata i ciklička.

Linijska struktura Kod ova strukture algoritamski koraci se izvršavaju jedan za drugim redo-

sledom kojim su napisani. Na slici 7.3. prikazan je algoritam za zamenu točka na automobilu.

POČETAK

KRAJ

1. Pripremi dizalicu 2. Pripremi rezervni točak 3. Olabavi šrafove na točku 4. Podigni auto 5. Odvrni šrafove na točku 6. Skini točak 7. Stavi rezervni točak 8 . Zavrni šrafove na točku 9. Spusti auto 10. Zategni šrafove 11. Spremi dizalicu 12. Spremi rezervni točak

POČETAK

KRAJ

1. Stani ispred kolovoza 2. Pogledaj semafor

Zeleno svetloDA NE

3. Pređi ulicu 3. Čekaj zeleno svetlo4. Pređi ulicu

Slika 7.3. Linijska struktura Slika 7.4. Razgranata struktura

Razgranata struktura Struktra algoritma u kojoj tok operacija zavisi od ispunjenosti nekih uslova

zove se razgranata struktura. Na slici 7.4. prikazan je algoritam za prelazak

Page 9: Algoritmi i Programiranje Hr

Algoritmi i programiranje

ulice sa semaforom. Kao što se vidi iz algoritma, redosled operacija, kao i same operacije zavise od odgovora na pitanje da li je na semforu zeleno svetlo.

Ciklička struktura Algoritam kod kog se određeni broj algoritamskih koraka ponavlja više

puta ima cikličku strukturu. Ako je broj ponavljanja dela algoritma poznat una-pred struktura je konstantna (brojački ciklus). Ako broj ponavljanja nije poznat unapred, nego zavisi od ispunjenosti nekog uslova struktura je promenljiva (uslovni ciklus).

2. Uzmi praznu bocu 3. Napuni je vodom 4. Zatvori je 5. Odloži punu bocu

KRAJ

6. Zatvori vodu

POČETAK

1. Otvori vodu

Ponovi 10 puta

4. Pređi ulicu 3. Sačekaj malo

KRAJ

POČETAK

1. Stani ispred kolovoza

Nema vozilaDA NE

2. Pogledaj levo i desno

Slika 7.5. Konstantna ciklička struktura Slika 7.6. Uslovna ciklička struktura

Na slici 7.5. prikazan je algoritam za punjenje deset boca sa vodom. U ovom algoritmu isti algoritamski koraci ponavljaju se za svaku bocu, znači deset puta. Na slici 7.6. prikazan je algoritam za prelazak ulice bez semafora.

Složene algoritamske strukture Složene algoritamske strukture sastoje se od proizvoljnog broja, proizvolj-

nih kombinacija osnovnih algoritamskih struktura.

© Nikola Klem 9

Page 10: Algoritmi i Programiranje Hr

Osnovi računarske pismenosti

2. TIPOVI PODATAKA

U poglavlju 1.1. druge glave objašnjen je princip uskladištavanja podataka u memoriju računara. Različiti tipovi podataka skladište se na različite načine u računaru pa shodno tome, računar sa njima radi na različite načine. Ovo se odra-žava i u programskim jezicima, pa i u njima postoje različiti tipovi podataka. Uobičajena je podela na numeričke, znakovne i logičke podatke. Numerički podaci se dalje prema načinu skladištenja dele u nove grupe. Uobičajene grupe koje postoje u svim programskim jezicima su:

• znakovni podaci, • celi brojevi, • realni brojevi u običnoj tačnosti, • realni brojevi u dvostrukoj tačnosti, • logički podaci. Pored ovih tipova podataka mogu postojati i drugi tipovi podataka (na

primer, kompleksni brojevi, kratki celi brojevi, itd.). U nastavku će se razmatrati samo znakovni podaci, celi brojevi i realni brojevi.

2.1. Znakovni podaci Kao što je već objašnjeno u poglavlju 1.1. druge glave, elektronska kola

koja imaju dva stanja (bitovi) grupisana su u bajtove. Jedan bajt se sastoji od osam bita. Ako se stanje svakog bita označi sa 0 ili 1 sa osam bita može da se napravi 256 različitih kombinacija. Na osnovu tabele koja se zove kod određuje se za svaku kombinaciju koji znak (slovo, cifru ili specijalni znak) predstavlja. Uobičajeni kod koji se danas primenjuje u praksi je ASCII kod. Svaki znak u znakovnom podatku zauzima po jedan bajt u memoriji računara.

2.2. Celi brojevi Sa matematičke strane celi brojevi su podskup skupa realnih brojeva.

Međutim, sa stanovišta primene računara, celi brojevi su poseban skup brojeva koje se predstavlja na određeni način u računaru i koji zbog takvog načina pred-stavljanja ima drugačije osobine od skupa računarskih realnih brojeva. Prema tome definicija celih i realnih brojeva nije ista u matematici i u računarstvu.

Pozicioni brojni sistemi U pozicionim brojnim sistemima brojevi se skraćeno predstavljaju nizom

cifara pri čemu vrednost cifre u nizu zavisi od njenog mesta (pozicije) u nizu. Na primer, u decimalnom brojnom sistemu koji je u opštoj upotrebi, baza broj-nog sistema je 10 a cifre su 0, 1, 2, 3, 4, 5, 6, 7, 8 i 9. Tako broj 2325 znači:

2325 = 2×103 + 3×102 + 2×101 + 5×100

pri čemu prva cifra 2 u nizu ima značenje 2000, a druga uokvirena znači 20.

© Nikola Klem 10

Page 11: Algoritmi i Programiranje Hr

Algoritmi i programiranje

Kod binarnih brojnih sistema baza brojnog sistema je 2 a cifre su 0 i 1. Tako se, na primer, broj 21 u binarnom obliku predstavlja 000101012 = 0×27 + 0×26 + 0×25 + 1×24 +0×23 + 1×22 + 0×21 + 1×20 = 2110

Predstavljanje celih brojeva u računaru Pošto elektronska kola u memoriji računara imaju dva stanja koja mogu da

se označe sa 0 ili 1 to se i celi brojevi u računaru predstavljaju njihovom binar-nom predstavom. Tako se već pomenuti broj 21 u računaru predstavlja sa 8 bita kao na slici 7.7.

7 6 5 4 3 2 1 0 stepen pozicije 0 0 0 1 0 1 0 1 binarni broj

Slika 7.7. Binarna predstava broja

Pošto sa 8 bita ima 256 kombinacija to sa 8 bita mogu da se predstave celi brojevi od 0 do 255. Ovaj opseg obuhvata samo pozitivne cele brojeve.

7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0

Slika 7.8. Pozitivan ceo broj Slika 7.9. Negativan ceo broj

Ako se želi predstavljanje i pozitivnih i negativnih brojeva onda se uvodi konvencija da su pozitivni brojevi oni koji imaju prvi bit 0 a negativni brojevi oni koji imaju prvi bit 1. U tom slučaju najveći pozitivan ceo broj je onaj kod kog su svi bitovi osim prvog jedinice (slika 7.8). Ovaj broj je za jedan manji od broja koji bi imao samo jedinicu na prvom mestu i sve ostalo nule (slika 7.9). Prema tome sa 8 bita mogu da se predstave pozitivni celi brojevi od 0 do 127 (27-1). Sa ostalih 128 kombinacija predstavljaju se negativni celi brojevi u opsegu od -128 (-27) do -1.

Negativni brojevi se u računaru predstavljaju pomoću komplementa odgo-varajućeg pozitivnog broja, tako što se prvo u binarnoj predstavi pozitivnog broja sve jedinice zamene nulama i nule jedinicama, a zatim na tako dobijeni binarni broj doda 1 (slika 7.10).

21 = 0 0 0 1 0 1 0 1 1 1 1 0 1 0 1 0+ 1-21 = 1 1 1 0 1 0 1 1

Slika 7.10. Binarna predstava broja -21

Za praktične primene opseg celih brojeva koji mogu da se predstave pomo-

ću jednog bajta je suviše mali. Zbog toga se u programskim jezicima za pred-stavljanje celog broja grupišu po dva, četiri a ponekad i 8 bajtova. Za dva bajta (16 bita) opseg celih brojeva je od –32768 do 32767. Za četiri bajta (32 bita) opseg celih brojeva je od –2.147,483.648 do 2.147,483.647.

© Nikola Klem 11

Page 12: Algoritmi i Programiranje Hr

Osnovi računarske pismenosti

Za cele brojeve važi: • u računaru se mogu uskladištiti samo brojevi unutar opsega, • uskladišteni brojevi se predstavljaju u računaru tačno, • rezultat arimetičke operacije sa celim brojevima je ceo broj, • ako je rezultat neke operacije izvan opsega celih brojeva dolazi do pre-

koračenja opsega (Integer Overflow) i prekida rada programa.

2.3. Realni brojevi U svim programskim jezicima pod realnim brojem se smatra broj koji ima

decimalnu tačku3, a iza nje može da ima i decimalni deo. Po ovoj definiciji ako se, na primer, broj pet napiše kao 5 – to je ceo broj (integer), a ako se napiše 5. to je realan broj (real) bez obzira što iza tačke nema decimalnog dela. Razlika je u načinu predstavljanja broja u računaru ako se napiše na jedan ili drugi način.

Svaki realni broje može da se predstavi u obliku proizvoda: broj = mantisa × bazaeksponent.

Na primer, broj 12.34 može da se prikaže u obliku proizvoda na sledeće načine:

12.34 = 12.34 × 100 12.34 = 123.4 × 10-1 12.34 = 1.234 × 101

12.34 = 1234. × 10-2 12.34 = 0.1234 × 102

12.34 = 12340. × 10-3 12.34 = 0.01234 × 103

Ako mantisa počinje sa 0.xx i prva cifra posle decimalne tačke nije nula takva se mantisa zove normalizovana mantisa. Brojevi 12.34 i 0.00147 zapi-sani sa normalizovanom mantisom su 0.1234 × 102 i 0.147 × 10-2. Cifre u nor-malizovanoj mantisi od prve cifre posle decimalne tačke pa do poslednje cifre koja nije 0 nazivaju se značajne cifre.

Za uskladištenje realnih brojeva u običnoj tačnosti koriste se četiri bajta. Logička struktura zapisa realnog broja u običnoj tačnosti4 prikazana je na slici 7.11.

1 8 bita 23 bita Z eksponent značajne cifre 1 2 9 10 32

Slika 7.11. Logička struktura skladištenja realnog broja u običnoj tačnosti

Četiri bajta imaju 32 bita. Realni broj se skladišti iz tri odvojena dela: znaka broja, eksponenta i značajnih cifara normalizovane mantise.

Znak broja se uskladištava u prvom bitu. Ako je broj pozitivan prvi bit je 0 a ako je negativan prvi bit je 1.

3 U anglosaksonskim zemljama se za razdvajanje celobrojnog i decimalnog dela umesto zapete koristi tačka. 4 ANSII/IEEE Standard 754-1985 for Binary Floating-Point Arithmetic.

© Nikola Klem 12

Page 13: Algoritmi i Programiranje Hr

Algoritmi i programiranje

Za eksponent broja određeno je 8 bita (2 do 9). S obzirom da je baza ista za sve realne brojeve i zavisi od arhitekture računara to nema potreba za njenim čuvanjem u okviru broja.

Za značajne cifre određeno je 23 bita (10 do 32). Sa ovim brojem bitova može da se uskladišti 6 do 8 značajnih cifara.

Posledice ovakve organizacije su: • Opseg realnih brojeva koji mogu biti predstavljeni u računaru je ogra-

ničen brojem bitova određenih za eksponent i obično je od 10-38 do 1038.

• Broj uskladištenih značajnih cifara je ograničen brojem bitova određe-nih za mantisu. Ako je broj značajnih cifara veći od broja koji može da se uskladišti višak cifara se odbacuje.

• Broj realnih brojeva koji mogu biti tačno uskladišteni u računar je ograničen i konačan.

• Brojevi koji ne mogu biti uskladišteni u računar tačno sa datim brojem bitova aproksimiraju se brojem koji im je najbliži na brojnoj pravoj.

• Brojevi nastali izvođenjem aritmetičkih operacija se takođe zamenjuju brojem koji im je najbliži.

3. PROGRAMSKI JEZICI

Za međusobnu komunikaciju ljudi koriste jezike. Ovi jezici se zovu pri-rodni jezici. Kod prirodnih jezika postoje brojne slabosti kao što su: zamršena izgradnja jezičkih konstrukcija (sinaksa), obimna i komplikovana gramatička pravila, pravilno određivanje značenja rečenica (semantika). Ove slabosti su posledica neplanskog razvoja jezika.

Jezik računara sastoji se od niza naredbi, koje da bi mogle da budu u-skladištene u računar moraju da budu (kao i podaci) predstavljene nizom je-dinica i nula. Ovaj jezik zove se ma-šinski jezik. Naredbe u ovom jeziku sastoje se najčešće iz dva dela: koda

operacije i adrese. Kod operacije je kombinacija vrednosti nekoliko bitova (obično četiri do šest). Svaka kombinacija jednoznačno definiše operaciju koju računar treba da izvrši. Adresa je kombinacija bitova kojom je određena loka-cija u memoriji na kojoj se nalazi podatak sa kojim treba da se izvrši tražena operacija. Broj bitova u naredbi mašinskog jezika, broj bitova u kodu operacije i adresi kao i značenja koda operacije određeni su arhitekturom računara i za računare različitih arhitektura su različiti.

Slika 7.12. Komunikacija čoveka i računara

1001100011101

Kod prvih računara programiralo se direktno u mašinskom jeziku. Ovo je zahtevalo dobro poznavanje načina rada određenog računara. To je bio mučan

© Nikola Klem 13

Page 14: Algoritmi i Programiranje Hr

Osnovi računarske pismenosti

© Nikola Klem 14

posao jer je svako dodavanje ili izbacivanje neke naredbe u programu povlačilo promenu adresa sa podacima. Za praćenje rada programa i programiranje treba-la je velika koncentracija jer je bilo vrlo lako da se napravi greška.

Da bi olakšali posao i smanjili baratanje velikom nizovima nula i jedinica programeri su, da bi lakše zapamtili, uveli nazive za kod operacije i lokacije podataka u memoriji i pisali programe koristeći te nazive. Tek po završetku pro-grama zamenjivali su nazive operacija njihovim kodom, a nazive memorijskih lokacija adresama. Tako su nastali simbolički jezici kod kojih je kod operacije označen njenim simbolom (na primer, A – sabiranje, M – množenje, S – oduzi-manje, itd.) a adresa imenom koje prema određenim pravilima formira sam programer.

Pošto se kod naredbi u simboličkom jeziku zamenom koda operacije i imena lokacije adresom, iz jedne naredbe u simboličkom jeziku dobijala odgo-varajuća (jedna) naredba u mašinskom jeziku, posao je automatizovan tako što je napisan program koji je kao ulazne podatke prihvatao program napisan u simboličkom jeziku a kao rezultat rada davao odgovarajući program preveden u mašinski jezik. Program koji je vršio prevođenje iz simboličkog jezika u mašin-ski dobio je naziv asembler. Po nazivu tog programa simbolički jezici se još zovu i asemblerski jezici. Ovi jezici su mašinski orijentisani jer se svaka nji-hova naredba direktno prevodi u odgovarajuću naredbu mašinskog jezika. Repertoar naredbi simboličkih jezika zavisi od arhitekture računara. Računari čije su arhitekture različite imaju različite naredbe. Zbog toga se program napi-san u simboličkom jeziku jednog računara ne može koristiti na računaru druge arhitekture, nego se ceo program mora ponovo napisati. Programiranje u simbo-ličkim jezicima je lakše od programiranja u mašinskom jeziku, ali još uvek zahteva dobro poznavanje i razumevanje arhitekture računara.

Daljim razvojem programskih jezika nastali su jezici višeg nivoa (procedu-ralno orijentisani jezici). Kod ovih jezika se jedna naredba u programu prevodi u više naredbi mašinskih jezika. Oni ne zavise od arhitekture računara i prog-rami napisani u ovakvom jeziku mogu da se prenose sa jednog računara na drugi i kada su računari različitih arhitektura. Za programiranje u ovakvim jezi-cima nije potrebno poznavanje arhitekture konkretnog računara. Programski jezici višeg nivoa su: FORTRAN, ALGOL, COBOL, PL/I, Pascal, itd.

Da bi program napisan u višem programskom jeziku mogao da se izvrši potrebno je da se prvo prevede u mašinski jezik. Program prevodilac koji vrši prevođenje iz višeg programskog jezika u mašinski jezik zove se kompajler (compiler) a sam postupak prevođenja često se naziva i kompilacija.

Jezik u kome se piše program naziva se izvorni jezik (source language). Program napisan u višem programskom jeziku naziva se izvorni kod (source code).

Program prevodilac učitava kao ulazne podatke program napisan u višem programskom jeziku i kao razultat rada daje prevedeni program (mašinski kod).

Page 15: Algoritmi i Programiranje Hr

Algoritmi i programiranje

Obrnuti postupak nije moguć, tj. iz mašinskog koda se ne može dobiti program u višem programskom jeziku.

Za svaki programski jezik postoji poseban program prevodilac za taj jezik. Isto tako za svaku arhitekturu računara treba da postoji odgovarajući program prevodilac za svaki programski jezik koji se želi koristiti na njoj.

Za neke jezike umesto programa prevodioca postoje interpreteri. Oni ne prevode program u mašinski kod nego svaku naredbu programa prepoznaju i odmah izvršavaju. Ovakvi programi su prostiji i zahtevaju manje mesta u memoriji od kompajlera, ali su programi izvršavani na ovaj način sporiji od prevedenih programa.

Programski jezici su veštački jezici, ali kao i prirodni jezici oni imaju svoju abecedu, reči, sintaksu (skup pravila kako se formiraju veće organizacione celine – naredbe) i semantiku (značenje svake naredbe).

Program prevodilac prilikom prevođenja vrši proveru da li je svaka nared-ba u programu napisana u saglasnosti sa pravilima jezika i ako nije prijavljuje grešku (sintaksne greške). Ako u programu ima sintaksnih grešaka one moraju da se otklone da bi program mogao da se prevede. Međutim, program prevodi-lac ne može da otkrije greške u logici programa (na primer, ako je na nekom mestu umesto znaka + stavljen znak * ili -).

Pored pomenutih grupa programskih jezika postoji i grupa problemski (ne-proceduralno) orijentisanih jezika. Ovi programski jezici su namenjeni za rešavanje problema u određenoj oblasti i pomoću njih se samo opisuje problem koji treba rešiti.

4. STRUKTURA PROGRAMA

Program je skup instrukcija (naredbi) za računar napisan za rešavanje jed-nog problema. Naredbe programskog jezika formiraju se koristeći reči iz reč-nika programskog jezika i nazive koje programer dodeljuje memorijskim loka-cijama u koje su uskladišteni podaci sa kojima se radi u programu, a prema pra-vilima sintakse jezika. Svaka naredba završava oznakom za kraj naredbe. U velikom broju programskih jezika oznaka za kraj naredbe je tačka-zapeta (;). Naredbe se izvršavaju redosledom kojim su napisane ukoliko taj redosled nije izmenjen posebnim naredbama za izmenu toka programa (grananje i ciklusi).

Naredbe programskog jezika mogu se podeliti u dve kategorije. Jednu ka-tegoriju čine naredbe koje računar treba da izvrši (izvršne naredbe) i one se u procesu prevođenja prevode u odgovarajući mašinski kod. Drugu kategoriju (neizvršne naredbe, deklaracije) čine naredbe kojima se daju uputstva prog-ramu prevodiocu neophodna za prevođenje programa (definisanje imena memo-rijskih lokacija, definisanje tipova podataka, opisi funkcija i procedura). S obzirom da su ove naredbe namenjene programu prevodiocu, one se koriste samo za prevođenje programa i ne prevode se u mašinski kod.

© Nikola Klem 15

Page 16: Algoritmi i Programiranje Hr

Osnovi računarske pismenosti

© Nikola Klem 16

U većini programskih jezika u programu se na početku pravi odeljak u kome su date neizvršne naredbe, a posle toga blok sa izvršnim naredbama. Tako se program prevodilac prvo upozna sa uputstvima za prevođenje programa, a zatim, sledeći ta uputstva i pravila sintakse jezika učitava naredbe iz bloka sa izvršnim naredbama i prevodi ih u mašinski kod. Međutim, postoje i jezici u kojima se i unutar bloka sa izvršnim naredbama mogu otvoriti odeljci sa dekla-racijama i podblokovi izvršnih naredbi.

U svim programskim jezicima znakovi koji se mogu koristiti za formiranje elemenata programskih jezika su:

• alfabetski znakovi (velika i mala5 slova engleske abecede), • numerički znakovi (cifre 0, 1, 2, 3, 4, 5, 6, 7, 8, 9), • specijalni znakovi (zavisno od jezika, . = ; + - zagrade itd.).

Znakovi iz prva dva skupa (alfbetskih i numeričkih) nazivaju se alfanumerički. Podaci sa kojima program radi moraju za vreme izvršavanja programa da

se nalaze u memoriji računara. U naredbama programa zadaju se memorijske lokacije na kojima se nalaze podaci sa kojima naredba radi. Kao što je već po-menuto, programer dodeljuje imena ovim lokacijama na osnovu pravila sinta-kse. Program prevodilac u postupku prevođenja povezuje ova imena sa memo-rijskim lokacijama (adresama) u kojima će biti uskladišteni ti podaci. Prilikom dodeljivanja imena lokacijama treba voditi računa da nas asociraju na podatak koji predstavljaju.

Postoje dve grupe memorijskih lokacija za podatke. Prvu grupu čine loka-cije u kojima se podaci postavljaju pre početka rada programa i ne menjaju tokom rada programa. Ove lokacije, odnosno podaci u njima, nazivaju se konstante. Drugu grupu čine lokacije kod kojih se sadržaj (podaci uskladišteni u njima) menjaju tokom rada programa. Ove lokacije, odnosno podaci u njima, nazivaju se promenljive (varijable).

Za imenovanje adresa lokacija, kao i drugih elemenata programa koriste se simbolička imena. Ova imena sastoje se od jednog ili više (6 do 30 u zavisnosti od programskog jezika) alfanumeričkih znakova (u nekim programskim jezici-ma mogu biti i neki specijalni znaci) od kojih prvi znak imena mora biti slovo. Ime promenljive je uvek formirano kao simboličko ime. Ime konstante može bi-ti simboličko ime ili vrednost uskladištena na lokaciji konstante (broj ili tekst).

5. RAZVOJNA OKRUŽENJA

Pisanje programa je (kao što je već prikazano u poglavalju 1.1. ove glave) samo jedna faza u postupku rešavanja problema primenom računara. Međutim, nije dovoljno samo napisati program. Da bi se napisani program i izvršio mora

5 Ograničenje na velika slova se već više od deset godina ne poštuje čak ni u jezicima kod kojih je standardom definisano.

Page 17: Algoritmi i Programiranje Hr

Algoritmi i programiranje

da se napravi više koraka. Ovi koraci povezuju fazu pisanja programa sa fazom njegovog testiranja.

Koraci u izvršenju programa su: 1. pisanje programa, 2. unošenje napisanog programa u računar ili pravljenje izmena u posto-

jećem programu, 3. prevođenje programa, 4. formiranje izvršnog programa, 5. čuvanje izvršnog programa, 6. izvršavanje programa, 7. traženje grešaka u programu. Za svaku od ovih faza koriste se odgovarajući sistemski programi.

5.1. Pisanje programa Pisanje programa predstavlja prevođenje algoritamskih koraka u naredbe

programskog jezika. Program napisan u nekom programskom jeziku naziva se izvorni kod.

Najčešće se program prvo napiše u odgovarajućim programskim obrasci-ma a zatim unese u neku datoteku. Razvojem personalnih računara i postoja-njem mogućnosti da sam programer unese program u datoteku sada se ova faza često preskače i program unosi u datoteku već prilikom pisanja.

5.2. Unošenje i editovanje programa Kao što je već ranije prikazano, za formiranje tekstualnih datoteka koriste

se programi koji se zovu editori. Jedan takav program (Notepad) obrađen je u poglavlju 5.15. četvrte glave. Editor se koristi i za početno unošenje programa u datoteku kao i za kasnije vršenje izmena u unetom programu. Datoteka u koju je unet program ima ime koje joj je dodelio programer i nastavak koji ukazuje na programski jezik u kome je program napisan (for ili f90 za FORTRAN, pas za Pascal, itd.)

5.3. Prevođenje programa Da bi se program preveo pokrene se program prevodilac (kompajler). Prili-

kom pokretanja prevodioca ili kasnije na njegovo traženje daje se naziv dato-teke u kojoj se program nalazi. Program prevodilac učitava naredbe programa iz datoteke i formira datoteku sa mašinskim kodom. Za vreme prevođenja program proverava pravila sintakse i ako ona nisu zadovoljena prijavljuje greške. Ako u programu postoje sintaksne greške ili nedostatak u deklaracijama (na primer, nešto nije definisano ili nije ispravno definisano) on se ne prevodi.

Programer koristeći editor popravalja greške u programu i ponovo prevodi program. Ovaj postupak se ponavlja dok sve sintaksne greške u programu ne

© Nikola Klem 17

Page 18: Algoritmi i Programiranje Hr

Osnovi računarske pismenosti

© Nikola Klem 18

budu otklonjene. U tom slučaju neki prevodioci daju poruku da u programu nema grešaka, a neki ne daju nikakvu poruku, ali pošto nema prijavljenih grešaka zna se da je program preveden. Ime datoteke sa prevedenim programom je isto (ako se na zada drugačije) kao i ime datoteke sa izvornim programom a nastavak je najčešće obj po čemu se i mašinski kod nekada naziva i objektni kod (object code).

Ovde treba još jednom napomenuti da kompajler otkriva samo sintaksne greške i da poruka posle prevođenja da u programu nema grešaka, kojoj se početnici najviše raduju, znači samo da u programu nema sintaksnih grešaka. Program prevodilac ne može da otkrije greške u logici programa koje mogu da postoje u programu i ako nema sintaksnih grešaka.

5.4. Formiranje izvršnog programa Kada je izvorni program preveden on još uvek nije spreman za izvršava-

nje. Za razne računarske operacije (kao na primer, ulazne i izlazne) potrebni su određeni sistemski programi. Osim toga, ako se program sastoji iz više delova (potprograma) potrebno je sve delove programa sastaviti. Program koji vrši po-vezivanje korisnikovih programskih delova i sistemskih programa i formiranje datoteke sa izvršnim programom naziva se povezivač (linker, loader) a sama operacija formiranja izvršnog programa povezivanje (linkovanje). Povezivač prvo unese sve potrebne programe u memoriju (korisnikove – obj i sistemske) i formira u memoriji sliku izvršnog programa (core image) a zatim snimi izvršni program u datoteku na disku. Ime datoteke sa izvršnim programom je jednako imenu datoteke sa korisnikovim programom koja je prva navedena u listi (ako nije drugačije zadano) a nastavak je exe.

5.5. Čuvanje izvršnog programa Kod većine operativnih sistema i programa poslednjih godina faze formira-

nja izvršnog koda i njegovog čuvanja spojene su u jednu. Kod nekih operativnih sistema mogućno je razdvojiti te dve faze tako da prva faza bude formiranje izvršnog koda u memoriji, a druga njegovo izvršavanje iz memorije ili zapisi-vanje u datoteku na disku.

5.6. Izvršavanje programa Ako su faze formiranja izvršnog programa i njegovog čuvanja razdvojene

onda je mogućno odmah po formiranju slike izvršnog koda u memoriji zadati i naredbu za njegovo izvršavanje.

Ako je izvršni program zapisan u datoteku na disku (tipa exe) onda se on izvršava posebnom naredbom. Ta naredba se obično sastoji ili samo od imena datoteke ili naredbe run iza koje se navodi ime datoteke.

Page 19: Algoritmi i Programiranje Hr

Algoritmi i programiranje

5.7. Traženje grešaka u programu Već je pomenuto da program prevodilac prilikom prevođenja daje poruke

o sintaksnim greškama tako da je njihovo otlanjanje relativno jednostavno. Me-đutim, traženje logičkih grešaka u programu je često vrlo težak posao. Da bi se taj posao koliko je mogućno olakšao, za savremene verzije programskih jezika postoje programi koji olakšavaju traženje ovih grešaka (debugging). Ovi progra-mi omogućavaju: pojedinačno izvršavanje naredbi, inspekciju memorijskih lo-kacija, trasiranje puta kroz program, promenu sadržaja memorijskih lokacija itd.

5.8. Integrisane radne sredine Opisani postupak po koracima za izvršavanje programa podrazumevao je

da se za svaki korak koristi poseban sistemski program. Za unošenje programa i ispravke u njemu može da se koristi bilo koji editor (kao, na primer, Notepad). Sistemski programi za ostale faze iako su nezavisni ipak se dobijaju zajedno sa programom prevodiocem.

Poslednje verzije prevodilaca uključuju i posebno, integrisano radno okruženje kod koga su u okviru jednog programa date mogućnosti: editovanja, prevođenja, linkovanja, čuvanja, izvršavanja i traženja grešaka u programu.

Pored integrisanih radnih okruženja za jedan programski jezik postoje i integrisana radna okruženja zajednička za više programskih jezika, kod kojih su ovi sistemski programi zajednički za sve jezike date u sastavu okruženja.

6. UVOD U PROGRAMIRANJE U PASCAL-U

Programski jezik Pascal razvio je švajcarski matematičar Niklaus Wirth 1974. godine. Jezik je razvijen po uzoru na ALGOL (algol-like) sa ciljem da bude pogodniji od ALGOL-a za učenje programiranja kao logične i sistematične discipline. Zahvaljujući razvoju dobrih programa prevodilaca, njegova primena je nadmašila prvobitnu namenu tako da se ovaj jezik dosta primenjivao i za pisanje programa za naučno-tehničke proračune i u sistemskom programiranju. Osim toga, poznavanje ovog jezika predstavlja dobru osnovu i za učenje drugih, složenijih programskih jezika.

U ovom poglavlju su principi izloženi u prethodnim poglavljima ove glave ilustrovani korišćenjem programskog jezika Pascal.

6.1. Elementi jezika Kao i svaki programski jezik i Pascal se sastoji od: znakova dozvoljenih u

jeziku, rečnika dozvoljenih reči, imena memorijskih lokacija i pravila po kojima se formiraju, različitih tipova podataka, pravila sintakse za formiranje program-skih naredbi itd. Osnovni elementi jezika su detaljnije ramotreni u nastavku.

© Nikola Klem 19

Page 20: Algoritmi i Programiranje Hr

Osnovi računarske pismenosti

© Nikola Klem 20

Znakovi programskog jezika Pascal Znakovi čije je korišćenje dozvoljeno u Pascal-u su: • Velika i mala slova engleske abecede (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), • Cifre: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, • Specijalni znaci su +, -, *, /, =, <, >, [, ], {, }, ^, (, ), ’, ., zapeta, ; , : i

neštampajući znaci: prazno mesto, nova linija itd.

Rečnik programskog jezika Pascal Rečnik programskog jezika Pascal se sastoji od ključnih reči koje imaju

utvrđeno značenje. Iako će u nastavku biti objašnjene samo neke od ovih reči sve navedene reči su rezervisane i ne smeju se koristiti izvan utvrđene namene: and, array, begin, case, const, div, downto, do, else, end, file, for, function, goto, if, in, label, mod, nil, not, of, or, procedure, program, record, repeat, set, then, to, type, until, var, while, with.

Tipovi podataka U Pascal-u postoji više tipova podataka. U nastavku će biti korišćena samo

dva tipa: celobrojni (integer) i realni (real). Ova dva tipa podataka detaljno su objašnjena u sekcijama 2.2. i 2.3. ove glave. Opseg celih i realnih brojeva zavisi od primenjenog programa prevodioca.

Simbolička imena Simbolička imena (identifikatori) se koriste za označavanje osnovnih obje-

kata jezika (promenljivih, konstanti, tipova, programa, procedura, funkcija). Ime je proizvoljan niz alfanumeričkih znakova koji počinje slovom. Ime može biti proizvoljne dužine ali Pascal prevodilac ignoriše sve znakove posle osmog. To znači da će program prevodilac sva imena koja imaju prvih osam znakova istih smatrati istim imenom.

Primer dozvoljenih simboličkih imena: Pera, Mika, Milica, PovršinaKruga, Pi, Alfa, a2b3, n4563. Primer neispravnih simboličkih imena: If (rezervisana reč), Površina-kruga (specijalni znak), 3dan (počinje cif-

rom), Težina (nedozvoljeno slovo), π, α2 ( grčka slova) .

Promenljive Promenljive (varijable) su simbolička imena kojima su označene lokacije

podataka u memoriji računara čiji sadržaj može da se menja tokom izvođenja programa. Prilikom formiranja ovih imena treba voditi računa da nas asociraju na podatke sa kojima se radi, na primer: PovrsinaTrougla, Temperatura, Brzina, Vreme itd. Da bi program prevodilac znao prilikom prevođenja da simboličko ime predstavlja ime promenljive to mora da mu se kaže odgovarajučom dekla-

Page 21: Algoritmi i Programiranje Hr

Algoritmi i programiranje

racijom. S obzirom da postoje različiti tipovi podataka uz ime promenljive mora da se navede i tip podatka koji ina predstavlja. Ako ima više promenljivih istog tipa navode se sva njihova imena a samo jednom deklaracija tipa.

Primer deklaracije: var PovrsinaTrougla, Brzina: real; Temperatura, Vreme: integer; U datom primeru var označava odeljak za deklaraciju promenljivih. Posle

navođenja imena svih realnih promenljivih koja su razdvojena zapetama su dve tačke (:) kao oznaka za završetak ove liste, a zatim sledi ključna reč real kojom se tip podataka navedenih u listi deklariše kao realne (u običnoj tačnosti) a zatim oznaka kraja naredbe (;). U sledećem redu data je lista imena celobrojnih promenljivih i deklaracija tipa integer. Podela deklaracije u tri reda data je zbog bolje čitljivosti programa (zbog lepote) a ne zbog stvarne potrebe.

Konstante Kao što je već ranije rečeno, konstantama su označene lokacije podataka u

memoriji računara čiji sadržaj se postavlja pre početka rada programa i ne može da se menja tokom izvođenja programa. Konstantama mogu kao i promenlji-vama da se dodele simbolička imena u kom slučaju moraju da budu deklarisane na isti način kao i promenljive.

Primer deklaracije konstante: const pi = 3.14159; nmax = 1000; Mnogo češći slučaj je da se konstante označavaju preko svojih vrednosti

koje su uskladištene u memoriju računara, odnosno da se u programu odmah pišu odgovarajući brojevi.

Celobrojna konstanta se piše kao niz cifara ispred koga može biti znak + ako je broj pozitivan, a mora biti znak minus ako je broj negativan. Treba uočiti u primeru da u celobrojnoj konstanti nisu dozvoljeni drugi znaci osim cifari i specijalnih znakova – i +.

Primer celobrojnih konstanti: 5 362 -23 24368 -31235 +23148 Realne konstante mogu da se zapišu na dva načina: u pozicionom zapisu

(fixed point) i eksponencijalnom zapisu (floating point). Realna konstanta u pozicionom zapisu se piše kao niz cifara (kao u celo-

brojnoj konstanti) iza koga stoji decimalna tačka, a iza tačke može da postoji i razlomljeni deo.

Primer realnih konstanti u pozicionom zapisu: 5. 362.43 -243.45 +0.00005 Primer neispravno napisanih realnih konstanti u pozicionom zapisu: 5 (nema decimalnu tačku) 362,43 (zapeta umesto tačke)

© Nikola Klem 21

Page 22: Algoritmi i Programiranje Hr

Osnovi računarske pismenosti

© Nikola Klem 22

Realna konstanta u eksponencijalnom zapisu se sastoji od celobrojne konstante ili realne konstante u pozicionom zapisu iza koje je napisano slovo E i eksponent baze 10. (poglavlje 2.3. ove glave).

Primer realnih konstanti u eksponencijalnom zapisu: 5E-5 ili 5.E-5 za 0.00005 (5*10-5), 32.54E0 ili 0.3254e2 ili 3254e-2 za 32.54 (32.54100), 1e9 za 1000000000. Primer neispravno napisanih realnih konstanti u E-zapisu: 32.54E E9 U primerima treba uočiti: • Da nije potrebno da korisnik normalizuje mantisu. On treba da napiše

broj u obliku koji je za njega najjednostavniji a računar će sam da izvrši konverziju.

• Iza slova E mora da piše ceo broj. Eko je eksponent nula i to mora da piše.

• Ispred slova E mora da piše broj i kada je broj stepen od 10. Uobičajen opseg realnih brojeva u praksi je [-10E38, 10E38], a preciznost

6 do 8 (može se smatrati 7) značajnih cifara.

6.2. Struktura Pascal programa Program napisan u programskom jeziku Pascal se sastoji iz dva bloka:

bloka sa deklaracijama i bloka sa izvršnim naredbama. Primer strukture Pascal programa: program .......... ........................ ⎫ ........................ ⎬ deklaracije ........................ ⎭ begin ........................ ; ⎫

........................ ; ⎬ izvršne naredbe

........................ {ovo je komentar} ⎭ end. Blok sa deklaracijama počinje sa zaglavljem programa (naredba program)

i u njemu je dato ime programa. Ime programa je simboličko ime koje formira korisnik kao ime programa. Svakom programu se pridružuju dve datoteke: input i output. Datoteka input se pridružuje standardnoj ulaznoj jedinici (tasta-tura), a output standardnoj izlaznoj izlaznoj jedinici (ekran). Naredba za formi-ranje zaglavlja programa (program) završava oznakom za kraj naredbe (;).

Primer zaglavlja programa: program Zbir (input,output) ;

Page 23: Algoritmi i Programiranje Hr

Algoritmi i programiranje

Ovaj blok je podeljen na odeljke. Odeljci za definisanje konstanti i pro-menljivih prikazani su u prethodnim primerima za deklaraciju konstante i promenljive.

Blok sa izvršnim naredbama počinje sa ključnom reči begin a završava sa ključnom reči end. Svaka naredba u Pascalu završava oznakom za kraj naredbe tačka-zapeta (;). Iza poslednje naredbe u programu end stavlja se tačka. Iza naredbe koja prethodi ovoj naredbi ne stavlja se oznaka završetka naredbe6 (;). Tekst sa komentarom se uključuje u program između vitičastih zagrada {}.

6.3. Komunikacija programa sa okolinom Za vreme rada program mora da komunicira sa okolinom. Programu mora-

ju da se saopšte podaci sa kojima će da radi i program mora da saopšti rezultate svoga rada. Za ovu komunikaciju postoje naredbe za učitavanje podataka i na-redbe za štampanje pri čemu se pod izrazom štampanje podrazumeva: prika-zivanje podataka na ekranu, upisivanje podataka u datoteku na disku i štampa-nje na nekoj izlaznoj jedinici koja pravi otisak na papiru. U ovom poglavlju raz-matraće se samo komunikacija sa standardnim ulaznim i izlaznim uređajima.

Naredbe za učitavanje Podaci mogu da se učitavaju u računar iz datoteke na disku ili sa tastature.

Oni se unose u datoteku na disku korišćenjem nekog editora. U datoteci podaci su organizovani po redovima. Svaki put kada sa pritisne na taster Enter na tastaturi prelazi se u novi red. Na isti način, kada se podaci ukucavaju sa tas-tature, pritisak na taster Enter znači završetak reda. U primerima učitavanja po-dataka, podaci će biti prikazani po redovima. To znači da kada se podaci zadaju preko tastature na kraju svakog reda treba pritisnuti na taster Enter.

Za učitavanje u Pascalu postoje dve naredbe: read i readln. Naredba read se sastoji od ključne reči read i liste promenljivih kojima se

dodeljuje vrednost, napisane u zagradama. Imena promenljivih u listi odvojena su zapetama. Ovom naredbom učitavanje se nastavlja posle poslednjeg podatka koji je prethodno učitan. Opšti oblik naredbe je

read (lista promenljivih); Primeri učitavanja naredbom read: read (a,b,c,d); Ovom naredbom se učitavaju četiri uzastopna numerička podatka. Na pri-

mer, ako promenljivoj a treba da se dodeli vrednost 5, promenljivoj b vrednost 8, promenljivoj c vrednost 3 i d vrednost 1. Ulazni podaci se mogu zadati u jednom, dva, tri ili četiri reda.

U jednom redu sledećim redosledom: 5 8 3 1. U dva reda: 5 8 3 i 1, ili 5 8 i 3 1 ili 5 i 8 3 1. U tri reda: 5 8 i 3 i 1 ili 5 i 8 3 i 1 ili 5 i 8 i 3 1. U četiri reda: u

6 Neke verzija Pascal prevodilaca (kao na primer Turbo Pascal) dozvoljavaju i na tom mestu oznaku ;

© Nikola Klem 23

Page 24: Algoritmi i Programiranje Hr

Osnovi računarske pismenosti

© Nikola Klem 24

svakom redu po jedan broj. Treba uočiti da se vrednost podataka dodeljuje promenljivama po redosledu: prvi podatak – prvoj promenljivoj, drugi podatak – drugoj, treći – trećoj itd. Pri tome nije bitno koliko praznih mesta ima među podacima niti u koliko redova su raspoređeni, ali je bitno da se uneti podatak po tipu slaže sa tipom podatka promenljive. Ako je promenljiva deklarisana kao realan broj, odgovarajući podatak se može ukucati kao ceo ili kao realan broj. Međutim, ako je promenljiva deklarisana kao ceo broj a kao podatak se ukuca broj sa decimalnom tačkom računar će prekinuti rad programa uz poruku da se ne slaže format podataka.

Iako se kaže da se prilikom učitavanja dodeljuju vrednosti promenljivama u suštini se radi o sledećem. Prvi podatak na ulazu se učitava i uskladištava u memoriju računara na adresu koju smo mi nazvali prvim imenom u listi. I tako svaki učitani podatak, prema redosledu uskladištava se u memorijsku lokaciju koja je označena imenom promenljive koje se nalazi na odgovarajućem red-osledu u listi.

Naredba readln se sastoji od ključne reči readln i liste promenljivih koji-ma se dodeljuje vrednost, napisane u zagradama. Funkcija ove naredba je ista kao i naredbe read – učitavanje ulaznih podataka. Ova naredba učitava podatke kako je specificirano u listi a zatim prelazi u novi red. Prilikom prelaska u novi red, ako je u prethodnom redu bilo još podataka posle podatka koji je poslednji učitan oni se ignorišu.

Primeri učitavanja naredbom readln: Ako su ulazni podaci dati u dva reda: 7 4 3 5 8 2 6 1 3 Naredbama read (a,b); readln (c,d);

dodeljuju se sledeće vrednosti: prva promenljiva u listi prve naredbe (read) – a dobija vrednost prvog broja u prvom redu (7), b dobija sledeću vrednost (4). Prva promenljiva u listi druge naredbe (readln) – c dobija sledeću vrednost koja je na redu za učitavanje (3), a d vrednost 5. Sledeći na redu za učitavanje je prvi podatak u drugom redu (2).

Naredbama readln (a,b); read (c,d);

dodeljuju se sledeće vrednosti: prva promenljiva u listi prve naredbe (readln) – a dobija vrednost prvog broja u prvom redu (7), b dobija sledeću vrednost (4). Pošto su učitane vrednosti za sve promenljive u listi ove naredbe, preostali podaci u ovom redu se ignorišu i prelazi se u novi red. Prva promenljiva u listi druge naredbe (read) – c dobija sledeću vrednost koja je na redu za učitavanje a

Page 25: Algoritmi i Programiranje Hr

Algoritmi i programiranje

to je prvi podatak u drugom redu (2), a d sledeću vrednost 6. Sledeći podatak po redu za učitavanje je 1.

Naredbe za štampanje Podaci za štampanje mogu da se šalju na izlazni jedinicu (ekran, datoteka

na disku, štampač) iz memorije ili iz liste u naredbi za štampanje. I za štampanje postoje dve naredbe write i writeln. Opšti oblik naredbe je write (lista); ili writeln (lista);

gde su write i writeln ključne reči zagrade elementi sintakse a ; oznaka za kraj naredbe. Lista se sastoji od elemenata liste međusobno odvojenih zapetama. Elementi liste mogu biti: konstante, promenljive i tekst.

Razlika između naredbi write i writeln je ista kao i kod odgovarajućih naredbi za čitanje. Posle štampanja vrednosti elemenata u naredbi write sledeća naredba za štampanje štampa podatke u istom redu u nastavku već odštampanih podatka. Posle štampanja vrednosti elemenata u naredbi writeln prelazi se u novi red tako da sledeća naredba za štampanje štampa podatke od početka no-vog reda.

Primeri naredbi za štampanje: Naredbom write (4, 3.2, 'tekst', abc)

štampa se redom: 4, 3.2, tekst, i vrednost promenljive abc (odnosno sadržaj lo-kacije u memoriji kojoj je dodeljeno ime abc). Broj elemenata u listi, kao i kom-binovanje različitih tipova elemenata nema ograničenja, već zavisi od progra-merskih potreba. Realni brojevi se štampaju u eksponencijalnom obliku. Širina polja sa jednim elementom liste zavisi od programa prevodioca. Ova širina polja može se podesiti programski tako što se iza elementa stave dve tačke (:) i broj kolika se želi širina polja želi. Ako je širina polja veća od broja potrebnih zna-kova podatak se štampa uz desnu ivicu polja. Ako je širina polja manja od broja znakova u podatku realni brojevi gube decimalna mesta u E-opisu dok je to mo-guće (do širine polja 8 mesta: znak, decimalna tačka, po jedan broj ispred i iza tačke, slovo E, znak eksponenta i dve cifre eksponenta). Kada je zadana širina polja za realne brojeve manja od 8, a kod ostalih podataka koji se štampaju manja od broja znakova koji treba da se odštampaju širina polja se automatski postavlja na najmanju potrebnu.

Kod realnih brojeva mogućno je i njihovo štampanje u pozicionom opisu. U tom slučaju se uz element liste u naredbi za štampanje koji predstavlja realan broj moraju zadati dva podatka: ukupna širina polja i broj decimalnih mesta u odštampanom broju. Broj decimalnih mesta koja treba da se odštampaju zadaje se posle ukupne širine polja na isti način kao i ona. Na primer, a u naredbi

writeln (3.14159:10:5, abc:12:4) prvi broj će biti odštampan u polju ukupne širine 10 mesta sa pet decimala, što znači da će biti 4 prazna mesta, pa broj 3 pa decimalna tačka i na kraju 14159.

© Nikola Klem 25

Page 26: Algoritmi i Programiranje Hr

Osnovi računarske pismenosti

© Nikola Klem 26

Drugi broj će biti odštampan u polju ukupne širine 12 mesta sa 4 decimale. Ne treba zaboraviti mesto za štampanje decimalne tačke. Ako je broj decimala koji se štampa manji od onog u broju, broj se zaokrugljuje, a ako je veći dopunjava nulama.

Primer štampanja sa naredbom writeln: write (1, 2, 3); writeln (1, 2, 3); write (4, 5, 6); write (4, 5, 6); Ako su date naredbe write (u primeru levo) svih šest brojeva biće odštam-

pano u jednom redu. Prema delu programa sa naredbom writeln (u primeru des-no) posle štampanja svih elemenata u listi ove naredbe (1, 2, 3) prelazi se u sledeći red i brojevi u listi naredbe write štampaju se u drugom redu.

6.4. Integrisano radno okruženje Turbo Pascal Turbo Pascal radi u DOS okruženju. U Windows-u 98 računar treba pokre-

nuti ili restartovati u MS DOS modu. Ako se razvojno okruženje pokrene iz prozora MS DOS-a dobija se upozorenje da svi drugi programi moraju da budu zatvoreni. Ako se izvršavanje nastavi operativni sistem iz Windows okruženja prelazi u DOS. U Windows-u 2000 nema DOS moda ali Turbo Pascal (verzije 6.0 i 7.0) mogu da rade u DOS prozoru.

Zadavanjem komande za pokretanje prevodioca dobija se glavni ekran razvojnog okruženja (slika 7.13.)

Slika 7.13. Glavni ekran razvojnog okruženja Turbo Pascal-a.

Page 27: Algoritmi i Programiranje Hr

Algoritmi i programiranje

Izvršni kod programa prevodioca se obično nalazi u datoteci turbo.exe u potkatalogu bin kataloga TP (TP60 ili TP70 za verzije 6.0 ili 7.0)

Pored ekrana razvojnog okruženja koji služi za unošenje, editovanje, pre-vođenje, izvršavanje i testiranje programa u radu se koristi još jedan, korisnički ekran (slika 7.14.) u kome se zadaju podaci koje program učitava i prikazuju rezultati rada programa. Na ovom ekranu vidi se celokupan tok rada sa progra-mom.

Slika 7.14. Korisnički ekran Turbo Pascal-a

Ekran razvojnog okruženja (slika 7.13) ima na vrhu prozora meni sličan menijima u Windows okruženju. U menijima File i Edit nalaze se komande koje su uobičajene za ove menije i opisane već ranije. Na slici 7.15. prikazani su otvoreni meniji: Compile, Run i Debug.

Slika 7.15. Meniji Compile, Run i Debug

© Nikola Klem 27

Page 28: Algoritmi i Programiranje Hr

Osnovi računarske pismenosti

© Nikola Klem 28

Unošenje programa u računar i izmene njemu rade se na način sličan onom koji je opisan kod editora Notepad (poglavlje 5.15. četvrte glave) pomoću editora ugrađenog u razvojnu sredinu. Ovaj editor se pokreće odmah pri pokre-tanju programa i uključen je sve vreme rada.

Prevođenje programa zadaje se komandom Compile iz menija Compile (slika 7.15. levo) ili kombinacijom Alt+F9 (F9 – funkcijski taster 9). Komande se zadaju na ranije prikazan načun za zadavanje komandi u grafičkim okruže-njima bez miša. Posle svake izmene u programu program se mora ponovo pre-vesti.

Izvršavanje programa zadaje se komandom Run iz menija Run (slika 7.15. sredina) ili kombinacijom Ctrl+F9.

Prelazak iz jednog ekrana u drugi. Iz ekrana razvojnog okruženja prelazi se u korisnički ekran da bi se zadali podaci koje korisnikov program treba da učita ili da bi se posle izvršenja pregledali rezultati rada programa. Prelazak u korisnički ekran da bi se zadali podaci programu odvija se automatski za vreme izvršenja programa svaki put kada je potrebno zadati podatke. Da bi se preg-ledali rezultati rada programa prelazak se izvodi komandom User Screen iz menija Debug (slika 7.15. desno) ili kombinacijom tastera Alt+F5.

Povratak iz korisničkog ekrana u ekran razvojnog okruženja može se obaviti: pritiskom na jedan od tastera: Backspace, Enter ili Escape ili kombina-cijom tastera Alt+F5.

Snimanje izvornog programa ili njegovo štampanje izvodi se odgovaraju-ćim, više puta opisanim naredbama u meniju File.

Vežba 1 (naredbe za učitavanje i štampanje) Za svaki zadatak napisati potpuni program koji je potreban za izvršenje za-

datka, prevesti ga, izvršiti i proučiti rezultate rada. Ako je u zadatku zadano više izvršavanja sa različitim podacima posle svakog izvršavanja proučiti rezultate rada programa.

1. Proveriti sve primere date u opisu naredbe za učitavanje podataka. 2. Proveriti sve primere date u opisu naredbe za štampanje podataka. 3. Data je naredba writeln (3.1415926535, ceobroj, rbroj) u kojoj je

promenljiva ceobroj ceo broj, a promenljiva rbroj realan broj. Vred-nosti ovih promenljivih se učitavaju sa ulazne jedinice naredbom readln (ceobroj, rbroj). Izvršiti program sa zadanim brojevima 5 i 3.25 Izvršiti program sa zadanim brojevima 5 i 3 Izvršiti program sa zadanim brojevima 5.25 i 3.25

4. Data je naredba writeln (3.1415926535:16, cbroj:4) u kojoj je pro-menljiva cbroj ceo broj. Vrednost promenljive se učitava sa ulazne jedinice.

Page 29: Algoritmi i Programiranje Hr

Algoritmi i programiranje

Izvršiti program 6 puta sa zadanim vrednostima za cbroj: 1,10, 100, 1000, 10000 i 100000.

Izvršiti program 12 puta. U svim izvršavanjima vrednost za cbroj je ista 10000. U prvom izvršavanju širina polja realnog polja je 16 a u svakom sledećem za jedan manja (u poslednjem izvršavanju 5).

5. Data je naredba writeln (3.1415926535:16:12, 1000:4) Izvršiti pro-gram 13 puta. U prvom izvršavanju broj decimalnih mesta koja se štampaju je 12 a u svakom sledećem za jedan manja (u poslednjem izvršavanju 0). Uočiti koje cifre su odštampane.

6.5. Naredba za dodeljivanje vrednosti Za promenljive definisane u programu prilikom prevođenja program pre-

vodilac samo rezerviše lokaciju, odnosno odredi adresu u memoriji u koju će biti uskladišten podatak, ali sadržaj te lokacije ostaje nepromenjen i nepoznat korisniku. Prema tome, podatak sa te adrese ne sme da se koristi pre nego što se tu ne uskladišti poznat podatak. Promenljiva kojoj nije dodeljena vrednost zove se nedefinisana promenljiva.

Vrednost se dodeljuje promenljivoj učitavanjem ili posebnom naredbom za dodeljivanje vrednosti. Ostali načini za dodeljivanje vrednosti promenljivoj iz-laze iz okvira ove knjige.

Naredba za dodeljivanje vrednosti ima oblik: promenljiva := aritmetički izraz

Sa leve strane znakova := (dve tačke i jednako)7 nalazi se ime promenljive kojoj se dodeljuje vrednost koja se dobija izračunavanjem aritmetičkog izraza napisanog sa desne strane znaka := . Ovom dodelom se poništava vrednost koju je promenljiva imala pre toga. U suštini radi se o sledećem. Izračunavanjem vrednosti aritmetičkog izraza napisanog sa desne strane znaka jednakosti dobija se jedan broj. Taj broj se uskladištava na memorijsku lokaciju čiju adresu pred-stavlja ime promenljive, pri čemu se poništava prethodni sadržaj te memorijske lokacije.

Promenljiva kojoj se dodeljuje vrednost i izračunata vrednost aritmetičkog izraza moraju biti istog tipa. Dozvoljen je izuzetak da izračunata vrednost bude ceo broj a promenljiva realni tip.

Aritmetički izraz može biti prost i složen. Prost aritmetički izraz sastoji se od samo jednog operanda. Složen aritmetički izraz sastoji se od dva ili više ope-ranada povezanih aritmetičkim operatorima.

Prost aritmetički izraz može biti celobrojna ili realna konstanta ili promen-ljiva (kojoj je prethodno definisana vrednost).

Primeri naredbe za dodeljivanje vrednosti sa prostim aritmetičkim izra-zom: 7 U nekim programskim jezicima u naredbi za dodeljivanje vrednosti koristi se samo znak jednakosti (=).

© Nikola Klem 29

Page 30: Algoritmi i Programiranje Hr

Osnovi računarske pismenosti

a := 325 b := 3.14159 c := a: Kod složenih aritmetičkih izraza treba prvo izraz zapisan u matematičkoj

notaciji prevesti u programski jezik. Pri tome treba voditi računa o sledećem. Svakom slovu koje se pojavljuje u matematičkoj notaciji treba u program-

skom jeziku dodeliti simboličko ime. Ime treba formirati tako da asocira na ono što predstavlja. Na primer, ako u matematičkom izrazu slovo v predstavlja brzi-nu njegovo simboličko ime može da bude brzina. Najčešče se koriste ista slova kao u matematičkom izrazu, a, b, x, y itd. Za grčka slova treba izabrati ime kako se čitaju. Na primer, za grčko slovo α može se izabrati proizvoljno simboličko ime. Najbolje je da to bude alfa, može i al, a je suviše jednostavno i može da se pomeša sa drugim oznakama. U principu, simboličko ime za slovo α može biti i g ili pera, ali to će samo zbuniti onog koji čita program, a i sam programer će posle kratkog vremena zaboraviti šta to ime predstavlja. Čestu zabunu unosi grčko slovo π. S obzirom da ono postoji na kalkulatorima i označava određenu numeričku vrednost većina početnika smatra da ono ima isto značenje i u pro-gramskom jeziku. Za njega je najbolje odabrati simboličko ime PI i definisati ga kao konstantu.

Prilikom prevođenja iz matematičke u programsku notaciju treba voditi ra-čuna da moraju da se pišu svi operandi, dok se u matematici znak za množenje često podrazumeva. Ako se prilikom prevođenja u programski jezik ovaj znak izostavi može da dođe do greške u sintaksi koju otkriva program prevodilac. Međutim, ako se ovaj znak izostavi između imena simboličke promenljive i otvorene zagrade program prevodilac neće da reaguje, već će se problem poja-viti tek prilikom linkovanja programa.

U programskom jeziku se sve piše u istom nivou. Zbog toga treba voditi računa da se upotrebom zagrada odredi pravilan redosled izvršavanja operacija.

U programskom jeziku Pascal postoje sledeći aritmetički operatori: + za sabiranje, - za oduzimanje i promenu znaka, * za množenje, / za deljenje, div za deljenje celih brojeva kod koga se kao rezultat dobija ceo broj, mod za deljenje celih brojeva kod koga se kao razultat dobija ostatak. Kod operacije div rezultat se dobija tako što se brojevi podele a zadrži se

samo celobrojni deo rezultata (na primer, 15 div 4 rezultat je 3, a 199 div 100 rezultat je 1). Kod operacije mod rezultat je broj koji se dobije kad se od deljenika oduzme delilac pomnožen sa celobrojnim delom rezultata (na primer, 15 mod 4 je 15-4*3 pa je rezultat 3).

Pored ovih operatora u programski jezik je ugrađen i veći broj funkcija od kojih su ovde pomenute samo neke:

© Nikola Klem 30

Page 31: Algoritmi i Programiranje Hr

Algoritmi i programiranje

abs (x) – apsolutna vrednost broja x, sqr (x) – x2, sqrt(x) – kvadratni koren iz broja x.

Ostale funkcije izlaze iz okvira ove knjige. Prioritet izvršavanja operacija je sledeći: • funkcije, • množenje i deljenje, • sabiranje i oduzimanje.

Ovaj redosled može se izmeniti upotrebom zagrada. Primeri prevođenja aritmetičkih izraza iz matematičke u programsku

notaciju: matematička notacija programska notacija x + y x + y x + y2 x + sqr(y)

yx + x + sqrt (y) a(b+c) a * (b + c) αx + βy alfa*x + beta*y

2πx + x + pi/2

d cb a

++

(a + b) / (c + d)

Naredba kojom bi se promenljivoj x dodelila vrednost poslednjeg razlom-ka u primerima piše se

x := (a + b) / (c + d); Primer programa sa linijskom strukturom: Sa do sada obređenim naredbama moguće je napisati kompletan program

sa linijskom strukturom. U ovom primeru razmatraće se program za sabiranje dva broja. Ovaj program treba da učita dva broja, izračuna njihov zbir i odštam-pa učitane brojeve i rezultat. Dijagram toka programa prikazan je na slici 7.16. levo a sam program u Pascal-u na ekranu razvojnog okruženja na istoj slici des-no. Prenošenje algoritamskih koraka u programski jezik prikazano je strelicama.

© Nikola Klem 31

Page 32: Algoritmi i Programiranje Hr

Osnovi računarske pismenosti

© Nikola Klem 32

POČETAK

Slika 7.16. Dijagram toka (levo) i program za sabiranje dva broja (desno)

Slika 7.17. Korisnički ekran programa sa slike 7.16

Na slici 7.17. prikazan je korisnički ekran po završetku rada programa. Posle zadavanja komande za izvršenje programa kada se izvršava naredba za učitavanje (read) umesto ekrana razvojnog okruženja na monitoru se pojavi korisnički ekran. Sada su ukucana dva broja, 5.2 i 3.7 i pritisnut taster Enter na tastaturi. Posle pritiska na taster Enter nestaje korisnički ekran u ponovo se po-javljuje ekran razvojnog okruženja. S obzirom da nema više naredbi za učita-vanje ovaj ekran ostaje do završetka rada programa. Pritiskom na kombinaciju tastera Alt+F5 na ekranu se dobija ponovo korisnički ekran čiji je izgled prika-zan na slici 7.17. Na njemu se sada vide učitani brojevi i rezultat odštampani u E-notaciji.

Slika 7.18. Izmenjeni program Zbir

Iako je program prikazan na slici 7.16. potpuno ispravan i dobro radi on ima tri značajna nedostatka. Kada program izvršava naredbu za učitavanje on

C := A + B

KRAJ

A, B, C

A, B

Page 33: Algoritmi i Programiranje Hr

Algoritmi i programiranje

prelazi u korisnički ekran na kome samo blinkuje kursor. Ako korisnik progra-ma ne zna o čemu se radi, ne zna da program očekuje podatke. Zbog toga treba pre učitavanja podataka odštampati na ekranu poruku korisniku šta treba da ura-di. Drugi nedostatak programa je što su učitani podaci i rezultat prikazani bez opisa, tako da se bez uvida u program ne zna šta oni predstavljaju. Osim toga, ovi podaci su prikazani u standardnom formatu prevodioca i nisu baš najpogod-niji za čitanje. Treći nedostatak koji nije od značaja kod ovako malih programa, ali je od velikog zančaja kod komplikovanijih programa, je što u programu nema komentara šta se radi.

Slika 7.19. Korisnički ekran po završetku rada izmenjenog programa Zbir

Izmenjeni program Zbir u kome su otklonjeni ovi nedostaci prikazan je na slici 7.18. a korisnički ekran po završetku ovog programa na slici 7.19. Treba obratiti pažnju da je u programu ime promenljive kojoj je dodeljena vrednost zbira c, dok je na ekranu uz vrednost zbira dat tekst zbir.

6.6. Naredba za grananje U linijskoj strukturi algoritma (slika 7.3) naredbe programa se izvršavaju

jedna za drugom redosledom kojim su napisane. Međutim, često se tok algorit-ma menja u zavisnosti od nekog uslova (slika 7.4) tako da i redosled izvršavanja naredbi mora da se menja na isti način. Uslov koji određuje šta će se izvršavati postavlja se u obliku logičkog upita na koji odgovor može biti samo DA ili NE.

Relacioni izrazi Relacioni izraz se sastoji od dva aritmetička izraza povezana relacionim

operatorom. Relacioni operatori dozvoljavaju ispitivanje odnosa dva aritmetička izraza. Rezultat relacionog izraza je uvek logička vrednost (DA ili NE). Relacioni operatori se iz tehničkih razloga različito pišu u matematičkoj i pro-gramskoj notaciji. Način zapisivanja ovih operatora u matematic i Pascal-u kao i njihovo značenje prikazani su u sledećoj tabeli.

U matematici U Pascal-u Značenje > > veće od ≥ >= veće od ili jednako < < manje od ≤ <= manje od ili jednako = = jednako # <> nije jednako

© Nikola Klem 33

Page 34: Algoritmi i Programiranje Hr

Osnovi računarske pismenosti

Primeri relacionih izraza: 5 > 3, a < b, x >= z, x+y < a+b, mika <= pera, y=z, x<>y. Treba uočiti da je odgovor na ova pitanja ili DA ili NE. Odgovor se može

izmeniti zamenom relacionog operatora. Na primer, ako je na relaciju a < b odgovor NE a iz programerskih razloga potrebno je da bude DA može se izmeniti relacijom a >= b.

Logički izrazi Logički izrazi se sastoje od dva ili više operanada povezanih logičkim

operatorima. U sledećoj tabeli dati su logički operatori i njihovo značenje.

Operator Naziv Značenje and I Odgovor je DA samo ako su oba logički operanda koje

povezuje DA. or ILI Odgovor je DA ako je bilo koji od operanada (ili oba) DA not NE Operator za pravljenje inverzije. Operacija not je najvišeg prioriteta a or najnižeg.

Primeri logičkih izraza: a > b and c > d, x + z > y + 3 or b < c, a<5 and a>0 or x < 0 and y > 0.

Blok naredba Grupa naredbi u Pascal-u koja počinje ključnom reči begin a završava sa

end zove se blok naredba. Naredba koja prethodi ključnoj reči end nema oznaku za kraj naredbe (;). Na primer:

begin {blok naredba} ........................ ;

........................ ;

........................ end

Jednograna naredba IF Opšti oblik ove naredbe je: if logički izraz then naredba ; Naredba u sastavu jednograne if naredbe može biti bilo koja prosta ili blok

naredba. Ako je logički izraz istinit (odgovor DA) izvršava se naredba u sastavu if naredbe pa se zatim prelazi na sledeću naredbu. Ako logički izraz nije istinit (odgovor NE) ne izvršava se naredba u sastavu if naredbe nego se odmah pre-lazi na sledeću naredbu. Način prikazivanja ove naredbe u dijagramu toka dat je na slici 7.20.

Primeri: if a < 5 then x := a ;

Slika 7.20. Jednograna if naredba

LOGIČKI IZRAZ

NAREDBA

DA

© Nikola Klem 34 NE

Page 35: Algoritmi i Programiranje Hr

Algoritmi i programiranje

if x > y then begin .......... ; .......... ; ........... end;

Dvograna naredba IF Opšti oblik ove naredbe je: if logički izraz then naredba1

else naredba2 ; Naredbe u sastavu dvograne if naredbe mogu biti bilo koje proste ili blok

naredbe. Ako je logički izraz istinit (odgovor DA) izvršava se naredba u sastavu if naredbe posle ključne reči then pa se zatim prelazi na sledeću naredbu. Ako logički izraz nije istinit (odgovor NE) izvršava se naredba u sastavu if naredbe posle ključne reči else pa se zatim prelazi na sledeću naredbu. Način prikaziva-nja ove naredbe u dijagramu toka dat je na slici 7.21.

Primeri: if a < 5 then x := a else y := b ;

if x > y then

Slika 7.21. Dvograna if naredba

LOGIČKI IZRAZ

NAREDBA1

DANE

NAREDBA2

begin .......... ; .......... ; {then blok} ........... end

else begin .......... ; {else blok} ........... end ;

Primer – jednograni if sa prostom naredbom: Kao primer programa sa jednogranim if-om sa prostom naredbom napisan

je program kojim se učitava jedan broj i štampa učitani broj i njegova apsolutna vrednost.

© Nikola Klem 35 A < 0

A := -A

DA

NE

POČETAK

A

PORUKA

A

KRAJ

A

Page 36: Algoritmi i Programiranje Hr

Osnovi računarske pismenosti

Slika 7.22. Program sa jednogranom if naredbom

Na slici 7.22. sa leve strane dat je dijagram toka ovog programa, sa desne

strane sam program a ispod programa korisnički ekran sa razultatima rada pro-grama. Ispravnost rada programa proverava se sa dva izvršavanja. Jedno izvrša-vanje sa zadanim pozitivnim brojem i jedno sa zadanim negativnim brojem.

Primer – jednograni if sa blok naredbom: Kao primer programa sa jednogranim if-om sa blok naredbom u prethod-

nom programu je samo dodato da se prilikom promene znaka promenljive a kod negativnih brojeva štampa poruka o promeni znaka. S obzirom da je dijagram toka programa sličan dijagramu prikazanom na slici 7.22. jer je samo u bočnoj grani if naredbe dodano još jedno štampanje, to on za ovaj program nije nacrtan.

© Nikola Klem 36

Page 37: Algoritmi i Programiranje Hr

Algoritmi i programiranje

Slika 7.23. Program sa blok naredbom u jednogranom if-u.

Sam program prikazan je na slici 7.23. U programu treba uočiti blok naredbu u bočnoj grani if-a .

Slika 7.24. Izgled korisničkog ekrana po završetku rada programa

Na slici 7.24. prikazan je izgled korisničkog ekrana po završetku dva izvr-šenja. Da bi se proverila ispravnost programa u prvom izvršenju zadan je pozi-tivan broj, a u drugom negativan.

Primer – program sa dvogranim if-om: Dvograna if naredba ilustrovana je programom koji učitava zadani ceo

broj, određuje da li je učitani broj paran ili neparan i štampa odgovarajuću poru-ku. Parnost broja određuje se time da li je ostatak kod celobrojnog delenja sa 2 (operacija mod) nula ili nije. Ako je ostatak nula štampa se poruka da je broj

© Nikola Klem 37

Page 38: Algoritmi i Programiranje Hr

Osnovi računarske pismenosti

© Nikola Klem 38

paran a ako nije poruka da je broj neparan. I za testiranje ovog programa potrebna su dva izvršenja (jedno sa parnim i drugo sa neparnim brojem).

Slika 7.25. Program za utvrđivanje parnosti brojeva

Izgled korisničkog ekrana posle dva izvršavanja ovog programa (sa parnim i neparnim brojem) prikazan je na slici 7.26.

Slika 7.26. Izgled korisničkog ekrana posle izvršavanja programa sa slike 7.25.

Vežba 2 (Linijske i razgranate strukture) 1. Učitati broj X. Uvećati njegovu vrednost za 1 i odštampati je. 2. Učitati dva realna broja A i B i izračunati sledeće veličine:

C = A + B D = A ⋅ B Odštampati učitane brojeve i dobijene rezultate.

POČETAK

PORUKA

X

X

KRAJ

--------

X mod 2= 0DA NE

paran neparan

Page 39: Algoritmi i Programiranje Hr

Algoritmi i programiranje

3. Učitati prirodan broj. Izračunati i odštampati njegov ostatak pri deljenju sa 3.

4. Učitati dvocifren broj. Izračunati i odštampati njegov zbir cifara. 5. Učitati dvocifren broj. Izračunati i odštampati broj zapisan istim ciframa u

obrnutom poretku. 6. Učitati dva broja, A i B. Zameniti im vrednosti i odštampati ih. 7. Učitati dva broja. Odštampati veći od njih. 8. Učitati tri broja. Odštampati najveći među njima. 9. Učitati brojeve A i B i u zavisnosti od njihovog odnosa izračunati C po

sledećoj formuli: A > B : C = A + B A ≤ B : C = A * B Odštampati učitane veličine i dobijene rezultate.

10. Učitati broj X i sračunati broj Y po sledećoj formuli:

2xx1y ++=

Odštampati učitane vrednosti i dobijeni rezultat. Ako je X = 0 umesto računanja veličine y odštampati tekst : "Za dato X vrednost Y nije defi-nisana".

11. Učitati broj X i sračunati broj Y po sledećoj formuli:

⎪⎪⎩

⎪⎪⎨

≥<≤+−<≤−+−<

=

5x85x03x4x0x12x2

1x0

y 2

6.7. Naredba za formiranje brojačkog ciklusa U sekciji 1.3. ove glave razmatrane su cikličke strukture. Ciklična

struktura kod koje je broj ponavljanja poznat unapred zove se brojački ciklus. Opšti oblik naredbe za formiranje ciklusa je:

for pr := pocvr to zavr do naredba ; gde su: pr – parametar ciklusa,

pocvr – početna vrednost parametra ciklusa, zavr – završna vrednost parametra ciklusa, naredba – blok naredba koja čini telo ciklusa.

for, to (downto), do – ključne reči jezika Pascal. Parametar ciklusa (pr) je ime celobrojne8 promenljive koja mora biti

deklarisana. Po započinjanju ciklusa ovoj promenljivoj se dodeljuje početna vrednost pocvr. Posle svakog prolaska kroz ciklus vrednost ove vrednost ove promenljive se povećava za 1. Ciklus se ponavlja sve dok vrednost parametra

8 Drugi tipovi parametra ciklusa izlaze iz okvira ove knjige.

© Nikola Klem 39

Page 40: Algoritmi i Programiranje Hr

Osnovi računarske pismenosti

© Nikola Klem 40

ciklusa ne postane veća od zavr. Ako je pocvr > zavr umesto ključne reči to koristi se downto i vrednost parametra ciklusa se smanjuje za jedan u svakom prolasku. Ako su pocvr i zavr aritmetički izrazi njihova vrednost se izračunava pre početka ciklusa i do kraja njegovog izvršavanja ne može da se menja. Para-metru ciklusa ne sme unutar ciklusa da se menja vrednost naredbom za dodelji-vanje vrednosit. Vrednost parametra ciklusa može da se koristi u aritmetičkim, relacionim i logičkim izrazima unutar ciklusa.

Primer brojačkog ciklusa – izračunavanje zbira brojeva: U ovom primeru napisan je program

za izračunavanje zbira proizvoljnog broja realnih brojeva. Prvo se učitava kao ceo broj podatak koliko brojeva treba sabrati, a zatim se učitavaju realni brojevi jedan po jedan i sabiru sa prethodnim parcijalnim zbirom.

POČETAK

Zbir se izračunava u promenljivoj zbir. Pre ulaska u ciklus ovoj promenljivoj se dodeli vrednost nula. U prvom prolasku kroz ciklus učita se jedan broj i on se sabere sa vrednošću promenljive zbir (koja je u tom trenutku 0). Vrednost rezultata se dodeli pro-menljivoj zbir i to je parcijalni zbir za prvi sabirak. U drugom prolazu se tom parcijalnom zbiru doda broj učitan u ovom prolazu i nova vrednost se ponovo dodeli promenljivoj zbir. Tako se u svakom prolasku kroz ciklus vrednost promenljive zbir poveća za broj koji je učitan u tom prolazu.

Slika 7.27. Dijagram toka programa za sabiranje više brojeva

Sam program za sabiranje više brojeva prikazan je na slici 7.28. a izgled

korisničkog ekrana sa rezultatima izvršenja programa na slici 7.29.

N

PORUKA

PORUKA

KRAJ

N, ZBIR

ZBIR := ZBIR + A

I := 1 TO N

A

ZBIR := 0

Page 41: Algoritmi i Programiranje Hr

Algoritmi i programiranje

Slika 7.28. Program za sabiranje više brojeva-

Slika 7.29. Korisnički ekran sa rezultatima rada programa sa slike 7.28.

Primer brojačkog ciklusa – tabelarno prikazivanje vrednosti funkcije: Program za tabelarno prikazivanje vrednosti funkcije y = 5.2x2 + 2.1

prikazan je na slici 7.30. Na osnovu učitanih vrednosti: broja tačaka u kojima se računa vrednost funkcije (n), početne vrednosti promenljive x (xpoc) i koraka za koji se ova vrednost menja u svakom prolazu (xkor), štampaju se u obliku tabele (slika 7.30. desno-dole) vrednosti promenljive x i odgovarajuće vrednosti funk-cije y. Tabela ima odgovarajuće zaglavlje. U programu treba uočiti da se zag-lavlje štampa pre ulaska u ciklus. I početna vrednost promenljive x postavlja se pre ulaska u ciklus, a u ciklusu se ona povećava za vrednost koraka. Ako se ona povećava pre računanja vrednosti funkcije y, onda je treba smanjiti za vrednost

© Nikola Klem 41

Page 42: Algoritmi i Programiranje Hr

Osnovi računarske pismenosti

© Nikola Klem 42

koraka kao što je to učinjeno u programu. Druga mogućnost je da se za početnu vrednost x uzme xpoc (x := xpoc;). U tom slučaju naredbu za povećavanje vred-nosti za korak (x := x + xkor;) treba staviti posle naredbi za računanje vrednosti funkcije i štampanje x i y.

POČETAK

N, XP,XK

PORUKA

ZAGLAVLJE

X := XPOC -XKOR

KRAJ

-------

X := XPOC + XKOR Y := 5.2 + X2 + 2.1

I := 1 TO N

X, Y

Slika 7.30. Program za tabelarni prikaz vrednosti funkcije

Na slici 7.30. prikazan je

dijagram toka programa (levo) izgled ekrana radnog okruženja sa programom (desno-gore) i korisnički ekran posle izvršenja progama (desno-dole).

Page 43: Algoritmi i Programiranje Hr

Algoritmi i programiranje

Vežba 3 (Brojački ciklus) 1. Učitati niz vrednosti promenljive x. Na osnovu učitanih vrednosti izračunati

vrednost 2xx1y ++= . Program prekinuti kada se za x učita 0. Odštampati

učitane vrednosti i dobijene rezultate. 2. Nacrtati algoritam i napisati program kojim se učitava niz vrednosti

promenljive x i izračunava vrednost y prema sledećoj formuli:

⎪⎪⎩

⎪⎪⎨

≥<≤+−<≤−+−<

=

5x85x03x4x0x12x2

1x0

y 2

Odštampati, u vidu tabele sa zaglavljem, učitane vrednosti i dobijene rezultate.

3. Nacrtati algoritam i napisati program kojim se za niz učitanih vrednosti promenljive x izračunava njihova suma i ukupan broj učitanih vrednosti. Program prekinuti kada se za x učita negativan broj. Odštampati učitane vrednosti, njihovu sumu i srednju vrednost.

4. Nacrtati algoritam i napisati program kojim se vrši štampanje u obrnutom poretku svih celih brojeva koji se nalaze između učitanih brojeva I i J. Prilikom štampanja ne treba štampati brojeve I i J.

5. Učitati prirodan broj N. N puta odštampati svoje ime. 6. Učitati prirodan broj N. Izračunati i odštampati zbir brojeva od 1 do N. 7. Učitati prirodan broj N. Izračunati i odštampati N!. 8. Nacrtati algoritam i napisati program kojim se učitava N vrednosti

promenljive x i nalazi njihov zbir. Odštampati učitane vrednosti i dobijeni rezultat.

9. Nacrtati algoritam i napisati program kojim se nalazi faktorijel prvih N brojeva. Rezultat prikazati u vidu sledeće tabele Tabela faktorijela prvih ....... brojeva i i! ............. .......... ............. ..........

10. Učitati prirodan broj N. Izračunati i odštampati ∑ . =

n

1ii/1

11. Učitati prirodan broj N. Izračunati i odštampati ∑ . =

−n

1i

i i/)1(

12. Učitati prirodan broj N. Izračunati i odštampati 11

/ !ii

n

=∑ .

© Nikola Klem 43

Page 44: Algoritmi i Programiranje Hr

Osnovi računarske pismenosti

© Nikola Klem 44

13. Nacrtati algoritam i napisati program kojim se učitava n vrednosti promen-ljive x i nalazi najveća (najmanja) vrednost. Odštampati učitane podatke, najmanju (najveću) vrednost i njen redni broj.

14. Učitati prirodne brojeve M i N. Odštampati cifre broja M pod pretpostavkom da je N-tocifren.

15. Učitati prirodan broj M. Odštampati sumu njegovih cifara. 16. Učitati prirodan broj M. Odštampati broj zapisan istim ciframa u obrnutom

poretku.

6.8. Složene programske strukture Izložene osnovne programske strukture mogu se na proizvoljan način kom-

binovati u skladu sa programskim zahtevima. Već u prethodnim primerima sa razgranatom strukturom mogu se uočiti kombinacije linijske i razgranate struk-ture. Kada se tome pridodaju i različite vrste ciklusa, broj kombinacija u dugač-kim programima koji mogu imati i po nekoliko stotina hiljada naredbi je neo-graničen. Naravno, prilikom ovih kombinovanja mora se dobro paziti da se ne naruše osnovna pravila za njihovo kombinovanje. Razmatranje ovih pravila izlazi iz okvira ove knjige tako da će ovde biti razmotren samo jedan jedno-stavan primer složene programske strukture.

Primer složene programske strukture: Složena programska struktura ilustrovana je programom koji učitava zadati

broj podataka. Podaci su celi brojevi. Program određuje i štampa koliko je uči-tano parnih brojeva, koliko neparnih i zbirove parnih i neparnih brojeva, kao i srednju vrednost svih učitanih brojeva. Za određivanje ovih podataka treba predvideti dve promenljive za brojače parnih (ipar) i neparnih (inep) brojeva i dve promenljive za zbirove parnih (spar) i zbirove neparnih (snep) brojeva. Vrednosti brojaca i zbirova se postavljaju na nulu pre ulaska u ciklus. Za zada-ni broj podataka u svakom prolasku kroz ciklus se prvo učitava jedan ceo broj (cbr), a zatim ispituje da li je učitani broj paran (ostatak pri deljenju sa 2 je nula) ili neparan (ostatak nije nula). U zavisnosti da li je broj paran ili neparan program prolazi kroz odgovarajuću granu (parnu ili neparnu). Brojač u grani kroz koju se prolazi se povećava za 1, a trenutna vrednost promenljive u kojoj se čuva zbir se sabira sa učitanim brojem (cbr) i dobijeni rezultat se uskladišta-va na mesto prethodnog zbira.

Po završetku ciklusa računa se srednja vrednost svih učitanih brojeva tako što se saberu zbirovi parnih i neparnih brojeva u podele sa zadanim brojem po-dataka.

U programu se pojavljuju u kombinaciji sve tri osnovne strukture: linijska u pripremnom delu programa, pre ciklusa, zatim brojački ciklus unutar koga je razgranata struktura u čijim granama su linijske strukture. Posle ciklusa, do kraja programa je linijska struktura.

Page 45: Algoritmi i Programiranje Hr

Algoritmi i programiranje

Dijagram toka ovog programa prikazan je na slici 7.31. Na slici 7.32. pri-kazan je izvorni kod programa u Pascal-u. Izgled korisničkog ekrana posle iz-vršavanja progama, sa zadanim podacima i rezultatima rada programa prikazan je na slici 7.33.

POČETAK

N

PORUKA

PORUKA

IPAR := 0 INEP := 0 SPAR := 0 SNEP := 0

I := 1 TO N

CBR

IPAR := IPAR + 1 SPAR := SPAR + CBR

CBR mod 2= 0DANE

INEP := INEP + 1 SNEP := SNEP + CBR

KRAJ

IPAR, SPAR

SVR := (SPAR + SNEP) / N

INEP, SNEP

N, SVR

Slika 7.31. Dijagram toka programa za izračunavanje zbirova parnih i neparnih brojeva

© Nikola Klem 45

Page 46: Algoritmi i Programiranje Hr

Osnovi računarske pismenosti

program parneparZbir ; var n, i, ipar, inep, cbr, spar, snep : integer ; svr : real ; begin write (' unesi broj podataka : ' ) ; readln (n) ; writeln (' podaci : ') ; {postavljanje pocetnih vrednosti} ipar := 0 ; inep := 0 ; {brojaci} spar := 0 ; snep := 0 ; {sume} for i := 1 to n do begin {pocetak ciklusa} read (cbr) ; {ucitavanje broja} if cbr mod 2 = 0 {ispitivanje uslova} then {parni brojevi} begin ipar := ipar + 1 ; {povecanje brojaca} spar := spar + cbr {povecanje zbira} end else {neparni brojevi} begin inep := inep + 1 ; snep := snep + cbr end; end ; {kraj ciklusa} writeln (' Zbir ',ipar:4,' parnih brojeva je ', spar:5) ; writeln (' Zbir ',inep:4,' neparnih brojeva je ', snep:5) ; svr := (spar + snep) / n ; {srednja vrednost svih brojeva} writeln (' Srednja vrednost', n:4, ' ucitanih brojeva je ', svr:6:2) end.

Slika 7.32. Program za izračunavanje zbirova parnih i neparnih brojeva

Slika 7.33. Korisnički ekran sa zadanim podacima i razultatima rada programa sa slike 7.32

© Nikola Klem 46