poglavlje09_algoritmi
TRANSCRIPT
9.
Algoritamski prikaz postupaka obrade podataka
U okviru ovog poglavlja, dat je formalizovani prikaz nekih postupaka za pro-gramsko rešavanje izabranih problema iz oblasti matematike i struktura podata-ka. Postupci su prikazani u formi algoritama, korišćenjem formalnog jezika, pod nazivom pseudokod.
Pseudokod predstavlja formalni proceduralno orijentisani jezik, konstruisan tako da bude u što manjoj meri zavisan od bilo kog realnog programskog jezika, a u što većoj meri prilagođen potrebama algoritamskog načina iskazivanja pos-tupaka za obradu podataka. Saglasno ovim činjenicama i iskazanom edukativ-nom karakteru samog priručnika, za službene reči pseudokoda su izabrane odgovarajuće reči srpskog jezika. Detaljniji opis sintakse pseudokoda izlazi izvan okvira ovog priručnika. U tom smislu, čitalac se upućuje na literaturu u kojoj takav opis postoji [Mo].
Izborom pseduokoda, kao sredstva za prikaz algoritama, stvaraju se osnove za njihovu relativno laku implementaciju u izabranom programskom okruženju i putem izabranog proceduralno orijentisanog programskog jezika.
Izabrani problemi i postupci za njihovo rešavanje, za koje je u ovom priručniku dat algoritamski prikaz, podeljeni su u pet grupa. Prvu grupu čine elementarni i logički vrlo jednostavni problemi, namenjeni da bi se na njima uvežbalo korišćenje osnovnih proceduralnih konstrukcija (selekcija, sekvenca i iteracija) i
236. Osnove računarskih tehnologija i programiranja - priručnik za vežbe
osnovnih tipova podataka. Drugu grupu čine problemi iz oblasti izgradnje i upotrebe struktura podataka. Obrađeni su neki postupci nad linearnim struktu-rama podataka sa sekvencijalnom i spregnutom reprezentacijom (rad sa struk-turama tipa jednodimenzionalnog niza, matrica, spregnutih lista i stekova). Treća grupa problema je posvećena rekurzivnom načinu iskazivanja postupaka obrade podataka. U četvrtoj grupi problema obrađeni su postupci za obavljanje nekih aritmetičkih i skupovnih operacija, kao i postupci za transformisanje zapisa broja iz jednog u drugi brojni sistem. Peta grupa je posvećena nekim nu-meričkim problemima i tehnici koričćenja iterativnih konstrukcija s uslovom koji se svodi na zadovoljenje zadate tačnosti izračunavanja.
9.1. Rad s operatorima i funkcijama
Algoritam 9.1.1. Određivanje idealne težine, na osnovu zadate visine
/* Zadatak: • Izračunati "idealnu" težinu osobe, na osnovu zadate visine. Polazne pretpostavke: • Izvršilac algoritma poznaje osnovne aritmetičke operacije. • Poznavanje formule za izračunavanje idealne težine, na osnovu zadate visine
osobe. */
TIP Visina_Tip = {d ∈ ℕ | d ≥ 110 ∧ ≤ 250}
TIP Težina_Tip = {d ∈ ℚ | d ≥ 10 ∧ ≤ 150.0} FUNKCIJA Idealna_težina ( UL Visina ∈ Visina_Tip ) VRAĆA Težina_tip POČETAK FUNKCIJE Idealna_težina Idealna_težina ← Visina - 100 KRAJ FUNKCIJE Idealna_težina
9. Algoritamski prikaz postupaka obrade podataka 237.
Algoritam 9.1.2. Zamena vrednosti argumenata procedure (swap)
/* Zadatak: • Zameniti vrednosti ulaznih argumenata procedure. */ PROCEDURA Zameni_argumente ( UI Arg1 ∈ Def_Tip, UI Arg2 ∈ Def_Tip ) Argp ∈ Def_Tip // Pomoćna promenljiva za zamenu vrednosti POČETAK PROCEDURE Zameni_argumente Argp ← Arg1 Arg1 ← Arg2 Arg2 ← Arg1 KRAJ PROCEDURE Zameni_argumente
Algoritam 9.1.3. Indikacija pranosti broja
/* Zadatak: • Indikovati da li je zadati ceo broj paran ili ne. Polazne pretpostavke: • Izvršilac algoritma poznaje operaciju celobrojnog deljenja (oznaka /). • Izvršilac algoritma poznaje operaciju poređenja =. • Izvršilac algoritma ne poznaje operaciju dobijanja ostatka pri celobrojnom
deljenju. */
FUNKCIJA Paran_broj ( UL Broj ∈ ℤ ) VRAĆA Boolean POČETAK FUNKCIJE Paran_broj Paran_broj ← (Broj - (Broj / 2) ∗ 2) = 0 KRAJ FUNKCIJE Paran_broj
238. Osnove računarskih tehnologija i programiranja - priručnik za vežbe
Algoritam 9.1.4. Indikacija znaka broja (sign)
/* Zadatak: • Indikovati da li je zadati realan broj pozitivan ili ne. Polazne pretpostavke: • Izvršilac algoritma poznaje operacije poređenja {<, >, =, ≤, ≥, ≠}. */
FUNKCIJA Pozitivan ( UL Broj ∈ ℝ ) VRAĆA Boolean POČETAK FUNKCIJE Pozitivan Pozitivan ← Broj > 0 KRAJ FUNKCIJE Pozitivan
Algoritam 9.1.5. Izbor veće vrednosti argumenta (max)
/* Zadatak: • Izabrati veću, od zadatih vrednosti dva argumenta. Polazne pretpostavke: • Izvršilac algoritma poznaje operacije poređenja {<, >, =, ≤, ≥, ≠} nad datim
tipom podatka. */ FUNKCIJA Maksimum ( UL Arg1 ∈ Def_Tip, UL Arg2 ∈ Def_Tip ) VRAĆA Def_Tip POČETAK FUNKCIJE Maksimum AKO JE Arg1 > Arg2 TADA Maksimum ← Arg1 INAČE Maksimum ← Arg2 KRAJ AKO KRAJ FUNKCIJE Maksimum
9. Algoritamski prikaz postupaka obrade podataka 239.
Algoritam 9.1.6. Određivanje znaka broja (sign)
/* Zadatak: • Izračunati vrednost funkcije f(x) = sgn(x), za realni argument x. */ TIP Znak_Tip = {-1, 0, 1}
FUNKCIJA Znak ( UL Arg ∈ ℝ ) VRAĆA Znak_Tip POČETAK FUNKCIJE Znak AKO JE Arg > 0 TADA Znak ← 1 INAČE AKO JE Arg = 0 TADA Znak ← 0 INAČE Znak ← -1 KRAJ AKO KRAJ FUNKCIJE Znak
Algoritam 9.1.7. Izračunavanje ostatka pri celobrojnom deljenju (mod)
/* Zadatak: • Izračunati ostatak pri celobrojnom deljenju dva cela broja. Polazne pretpostavke: • Izvršilac algoritma poznaje operaciju celobrojnog deljenja. • Izvršilac algoritma ne poznaje operaciju dobijanja ostatka pri celobrojnom
deljenju. */
FUNKCIJA Moduo ( UL Deljenik ∈ ℤ, UL Delilac ∈ ℤ ) VRAĆA ℤ POČETAK FUNKCIJE Moduo Moduo ← Deljenik - (Deljenik / Delilac) ∗ Delilac KRAJ FUNKCIJE Moduo
240. Osnove računarskih tehnologija i programiranja - priručnik za vežbe
Algoritam 9.1.8. Izračunavanje stepena broja u skupu celih brojeva (power)
/* Zadatak:
• Izračunati funkciju stepena broja f(x, n) = xn, za x ∈ ℤ i n ∈ ℕ0. Polazne pretpostavke: • Izvršilac algoritma poznaje osnovne aritmetičke operacije. • Izvršilac algoritma ne poznaje operaciju stepenovanja. */
FUNKCIJA CStepen ( UL x ∈ ℤ, UL n ∈ ℕ0 ) VRAĆA ℤ
z ∈ ℤ // Promenljiva za memorisanje međurezultata POČETAK FUNKCIJE CStepen z ← 1 RADI Množenje DOK JE n ≠ 0 z ← z ∗ x n ← n − 1 KRAJ RADI Množenje CStepen ← z KRAJ FUNKCIJE CStepen
Algoritam 9.1.9. Izračunavanje stepena broja u skupu realnih brojeva (power)
/* Zadatak:
• Izračunati funkciju stepena broja f(x, y) = xy, za x, y ∈ ℝ i x > 0. Polazne pretpostavke: • Izvršilac algoritma poznaje osnovne aritmetičke operacije. • Izvršilac algoritma poznaje funkcije f(x) = ln(x) i f(x) = ex (oznake funkcija
su: ln i exp). • Poznavanje načina prikaza funkcije f(x, y) = xy putem funkcija f(x) = ln(x) i
f(x) = ex. */
TIP ℝ+ = {d ∈ ℝ | d > 0}
FUNKCIJA RStepen ( UL x ∈ ℝ+, UL y ∈ ℝ ) VRAĆA ℝ POČETAK FUNKCIJE RStepen RStepen ← exp(y ∗ ln(x)) KRAJ FUNKCIJE RStepen
9. Algoritamski prikaz postupaka obrade podataka 241.
Algoritam 9.1.10. Odsecanje razlomljenog broja na zadatoj poziciji (trunc)
/* Zadatak:
• Odseći broj x ∈ ℝ na zadatoj decimalnoj, ili celobrojnoj poziciji n ∈ ℤ. • Vrednost n ≥ 1, znači da se broj odseca na zadatoj decimalnoj poziciji. • Vrednost n < 1, znači da se broj odseca na zadatoj celobrojnoj poziciji. Polazne pretpostavke: • Izvršilac algoritma poznaje osnovne aritmetičke operacije i funkciju f(x) =
abs(x). • Izvršilac algoritma poznaje automatsku konverziju podatka iz realnog u
celobrojni tip i obratno, prilikom dodele vrednosti.
• Izvršilac algoritma poznaje funkciju stepenovanja CStepen(x, n), za x ∈ ℤ i n ∈ ℕ0.
• Izvršilac algoritma ne poznaje funkciju odsecanja, ili zaokruživanja vrednosti broja.
*/
FUNKCIJA Odsecanje ( UL x ∈ ℝ,
UL n ∈ ℤ ) VRAĆA ℝ
p ∈ ℕ0 // Stepen 10n
z ∈ ℤ // Pomoćna promenljiva za konverziju tipa broja POČETAK FUNKCIJE Odsecanje p ← Cstepen(10, abs(n)) AKO JE n ≥ 1 TADA z ← x ∗ p x ← z Odsecanje ← x / p INAČE z ← x / p x ← z Odsecanje ← x ∗ p KRAJ AKO KRAJ FUNKCIJE Odsecanje
242. Osnove računarskih tehnologija i programiranja - priručnik za vežbe
Algoritam 9.1.11. Zaokruživanje razlomljenog broja na zadatoj poziciji (round)
/* Zadatak:
• Zaokružiti broj x ∈ ℝ na zadatoj decimalnoj, ili celobrojnoj poziciji n ∈ ℤ. Polazne pretpostavke: • Izvršilac algoritma poznaje osnovne aritmetičke operacije i funkciju f(x) =
abs(x). • Izvršilac algoritma poznaje automatsku konverziju podatka iz realnog u
celobrojni tip i obratno, prilikom dodele vrednosti.
• Izvršilac algoritma poznaje funkciju stepenovanja CStepen(x, n), za x ∈ ℤ i n ∈ ℕ0.
• Izvršilac algoritma ne poznaje funkciju odsecanja, ili zaokruživanja vrednosti broja.
*/
FUNKCIJA Zaokruživanje ( UL x ∈ ℝ,
UL n ∈ ℤ ) VRAĆA ℝ p ∈ ℕ0 // Stepen 10n
z ∈ ℤ // Pomoćna promenljiva za konverziju tipa broja POČETAK FUNKCIJE Zaokruživanje p ← Cstepen(10, abs(n)) AKO JE n ≥ 1 TADA z ← x ∗ p + 0.5 x ← z Zaokruživanje ← x / p INAČE z ← x / p + 0.5 x ← z Zaokruživanje ← x ∗ p KRAJ AKO KRAJ FUNKCIJE Zaokruživanje
9. Algoritamski prikaz postupaka obrade podataka 243.
Algoritam 9.1.12. Kosi hitac
/* Zadatak: • Prema formuli za parabolu kosog hica, algoritam simulira gađanje cilja na
zadatom odstojanju, lansiranjem projektila. • Odstojanje cilja (m) se zadaje u odnosu na mesto lansera projektila. Cilj se
smatra pogođenim, ako je projektil pao u tolerantno područje cilja, pri čemu se tolerancija - tačnost pogotka (m) zadaje na početku postupka.
• Svaki projektil se lansira pod zadatim uglom (0) u odnosu na zemljinu površinu i sa zadatom početnom brzinom (m/s).
• Postupak započinje lansiranjem prvog projektila. Ukoliko je cilj pogođen, postupak se završava. U protivnom, postupak se ponavlja lansiranjem sledećeg projektila.
Polazne pretpostavke: • Izvršilac algoritma poznaje osnovne aritmetičke operacije. • Izvršilac algoritma poznaje funkcije f(ϕ) = sin(ϕ) (ϕ - radijani) i f(x) = abs(x). • Poznavanje formule za izračunavanje mesta pada projektila na zemljinu
površinu, prema modelu kosog hica: D = v02 ⋅ sin2ϕ / g.
*/
TIP RealPozit_Tip = {d ∈ ℝ | d ≥ 0}
TIP Ugao_Tip = {d ∈ ℕ0 | d < 90} PROCEDURA Kosi_hitac ( UL Odstojanje ∈ RealPozit_Tip, // Odstojanje cilja od lansera UL Tolerancija ∈ RealPozit_Tip // Dozvoljena tolerancija pogotka ) FUNKCIJA Provera_pogotka ( UL Odstojanje ∈ RealPozit_Tip, UL Tolerancija ∈ RealPozit_Tip, UL PočBrzina ∈ RealPozit_Tip, UL Ugao ∈ Ugao_Tip ) VRAĆA Boolean // Funkcija proverava da li je lansirani projektil pogodio cilj ili ne. KONSTANTA π ∈ RealPozit_Tip ← 3.14 // Pi KONSTANTA g ∈ RealPozit_Tip ← 9.81 // Ubrzanje zemljine teže Mesto_pada ∈ RealPozit_Tip // Odstojanje mesta pada projektila od lansera
244. Osnove računarskih tehnologija i programiranja - priručnik za vežbe
POČETAK FUNKCIJE Provera_pogotka Mesto_pada ← PočBrzina ∗ PočBrzina ∗ sin(Ugao ∗ 2 ∗ π / 180) / g Provera_pogotka ← abs(Mesto_pada - Odstojanje) ≤ Tolerancija KRAJ FUNKCIJE Provera_pogotka PočBrzina ∈ RealPozit_Tip // Početna brzina projektila Ugao ∈ Ugao_Tip // Ugao lansiranja projektila POČETAK PROCEDURE Kosi_hitac RADI Lansiranje_projektila UČITAJ "Zadajte početnu brzinu projektila (m/s): " PočBrzina UČITAJ "Zadajte ugao lansiranja projektila (0): " Ugao KRAJ RADI Lansiranje_projektila
KAD BUDE Provera_pogotka (Odstojanje, Tolerancija, PočBrzina, Ugao) KRAJ PROCEDURE Kosi_hitac
9. Algoritamski prikaz postupaka obrade podataka 245.
Algoritam 9.1.13. Izdvajanje podstringa iz stringa (substr)
/* Zadatak: • Izdvojiti podstring stringa str od zadate pozicije m ∈ ℤ, zadate dužine n ∈ ℕ0, ili
kraćeg, ukoliko podstring dužine n nije moguće izdvojiti zbog ukupne dužine samog stringa.
• Ako je m ≥ 1, pozicija podstringa se izračunava od početka stringa. • Ako je m = 0, tada se uzima da je m = 1. • Ako je m < 0, pozicija podstringa se izračunava od kraja stringa. • Ako je n = 0, algoritam vraća prazan podstring. • Inicijalne vrednosti za m i n su: m = 1 i n = 1.
Polazne pretpostavke: • Izvršilac algoritma poznaje tip podatka String i ima mogućnost da pristupa
svakom elementu (znaku) stringa. • Izvršilac algoritma poznaje binarnu operaciju spajanja (konkatenacije) stringova
||. • Izvršilac algoritma poznaje funkciju izračunavanja dužine stringa Length(str). • Izvršilac algoritma poznaje funkcije nalaženja maksimalne i minimalne vrednosti:
Max(x, y) i Min(x, y). */ FUNKCIJA Podstring ( UL Str ∈ String ← '',
UL m ∈ ℤ ← 1
UL n ∈ ℕ0 ← 1 ) VRAĆA String
D_gran ∈ ℕ // Donja granica za izdvajanje podstringa
G_gran ∈ ℕ // Gornja granica za izdvajanje podstringa Podst ∈ String ← '' // Podstring koji se izdvaja
i ∈ ℕ // Brojač pozicija u ulaznom stringu POČETAK FUNKCIJE Podstring AKO JE m = 0 TADA m ← 1 KRAJ AKO AKO JE m > 0 TADA D_gran ← m INAČE D_gran ← Max(Length(str) + m + 1, 1) KRAJ AKO G_gran ← Min(D_gran + n - 1, Length(str)) i ← D_gran RADI izdvoj_podstring DOK JE i ≤ G_gran Podst ← Podst || Str[i] i ← i + 1 KRAJ RADI izdvoj_podstring Podstring ← Podst KRAJ FUNKCIJE Podstring
246. Osnove računarskih tehnologija i programiranja - priručnik za vežbe
Algoritam 9.1.14. Zamena podstringa drugim podstringom u stringu (replace)
/* Zadatak: • Zameniti svaku pojavu podstringa ukloni iz stringa str podstringom upiši. • Ukoliko se vrednost stringa za zamenu upiši ne navede, podrazumeva se da
je to prazan string ''. • Ukoliko je vrednost podstringa ukloni prazan string, ili nije sadržana u stringu
str, tada str treba da ostane nepromenjen. • Algoritam, kao izlazni podatak, vraća logičku vrednost true, ili false, u
zavisnosti od toga da li je polazni string str modifikovan, ili ne. Polazne pretpostavke: • Izvršilac algoritma poznaje tip podatka String i operaciju spajanja stringova
||. • Izvršilac algoritma poznaje funkciju izdvajanja podstringa Podstring(str, m,
n) i funkciju izračunavanja dužine stringa Length(str). */ PROCEDURA Zameni_podstr ( UI Str ∈ String ← '', // Polazni string UL Ukloni ∈ String, // Podstring koji se menja UL Upiši ∈ String ← '', // Podstring koji zamenjuje IZ Indikator ∈ Boolean // Indikator modifikacije stringa Str )
i ∈ ℕ // Brojač pozicija u ulaznom stringu
Duzstr ∈ ℕ // Dužina ulaznog stringa
Duzpods ∈ ℕ // Dužina podstringa za zamenu
Pomstr ∈ String ← '' // Pomoćni (novoformirani) string POČETAK PROCEDURE Zameni_podstr Indikator ← false // Polazni string, inicijalno, nije modifikovan AKO JE Ukloni != '' TADA Duzstr ← Length(Str) Duzpods ← Length(Ukoloni) i ← 1 RADI prolaz_stringa DOK JE i ≤ Duzstr AKO JE Ukloni = Podstring(Str, i, Duzpods) TADA Pomstr ← Pomstr || Upiši Indikator ← true // Polazni string se modifikuje i ← i + Duzpods INAČE Pomstr ← Pomstr || Str[i] i ← i + 1 KRAJ AKO
9. Algoritamski prikaz postupaka obrade podataka 247.
KRAJ RADI prolaz_stringa KRAJ AKO AKO JE Indikator TADA Str ← Pomstr KRAJ AKO KRAJ PROCEDURE Zameni_podstr
Algoritam 9.1.15. Datum poslednjeg dana u mesecu
/* Zadatak: • Za zadati datum, odrediti datum poslednjeg dana u mesecu kojem pripada
navedeni datum. Polazne pretpostavke: • Izvršilac algoritma poznaje datumski tip podatka Date, aritmetiku s
datumima, funkcije Day(Datum), Month(Datum), Year(Datum), koje vraćaju, redom, u obliku stringa, redni broj dana (DD), meseca (MM) i godine (GGGG), za zadati datum i funkciju To_Date(Str), koja datum, zadat u obliku stringa, konvertuje u datum, zadat putem datumskog tipa podatka.
• Pretpostaviti da se datum zapisuje u obliku 'DD.MM.GGGG'. • Izvršilac algoritma poznaje funkciju To_Number(str), koja broj, zadat u obliku
stringa, konvertuje u broj, zadat putem numeričkog tipa podatka. */ FUNKCIJA Poslednji_dan ( UL Datum ∈ Date ) VRAĆA Date POČETAK FUNKCIJE Poslednji_dan AKO JE Month(Datum) ∈ {'01', '03', '05', '07', '08', '10', '12'} TADA Poslednji_dan ← To_Date('31.' || Month(Datum) || '.' || Year(Datum)) INAČE AKO JE Month(Datum) ∈ {'04', '06', '09', '11'} TADA Poslednji_dan ← To_Date('30.' || Month(Datum) || '.' || Year(Datum)) INAČE AKO JE Moduo(To_Number(Year(Datum)), 4) = 0 TADA Poslednji_dan ← To_Date('29.02.' || Year(Datum)) INAČE Poslednji_dan ← To_Date('28.02.' || Year(Datum)) KRAJ AKO KRAJ FUNKCIJE Poslednji_dan
248. Osnove računarskih tehnologija i programiranja - priručnik za vežbe
9.2. Linearne strukture podataka
Algoritam 9.2.1. Linearno traženje u nizu
/* Zadatak: • Realizovati metodu linearnog traženja elementa u uređenom nizu od N
elemenata, na osnovu zadatog argumenta traženja. • Algoritam, kao izlazne podatke, vraća: indikator uspešnosti traženja (logičku
vrednost true, ili false) i indeks elementa (poziciju u nizu), na kojem je traženje završeno. Za neuspešno traženje, indeks ukazuje na poziciju prvog većeg elementa niza od traženog.
Polazne pretpostavke: • Izvršilac algoritma poznaje složeni tip podatka za deklaraciju niza elemenata
Array i obezbeđuje pristup i-tom elementu niza navođenjem njegovog indeksa, npr. Niz[i].
*/
KONSTANTA Q ∈ ℕ ← 100 // Maksimalna dužina niza
TIP Niz_celobElem = Array[1..Q] of ℤ // Tip niza celobrojnih elemenata PROCEDURA Lin_traženje ( UI Niz ∈ Niz_celobElem, // Niz u kojem se vrši traženje UL N ∈ {0,..., Q}, // Aktuelna dužina niza
UL Arg ∈ ℤ, // Argument traženja IZ Ind ∈ Boolean ← false, // Indikator uspešnosti traženja IZ Indeks ∈ {1,..., N+1} ← 1 // Indeks traženog elementa ) POČETAK PROCEDURE Lin_traženje RADI traži_element DOK JE Indeks ≤ N ∧ Arg > Niz[Indeks] Indeks ← Indeks + 1 // Traženje se nastavlja na sledećem elementu KRAJ RADI traži_element AKO JE Indeks ≤ N ∧ Arg = Niz[Indeks] TADA Ind ← true // Traženje se uspešno završava KRAJ AKO KRAJ PROCEDURE Lin_traženje
9. Algoritamski prikaz postupaka obrade podataka 249.
Algoritam9.2.2. Binarno traženje u nizu
/* Zadatak: • Realizovati metodu binarnog traženja elementa u uređenom nizu od N
elemenata, na osnovu zadatog argumenta traženja. • Algoritam, kao izlazne podatke, vraća: indikator uspešnosti traženja (logičku
vrednost true, ili false) i indeks elementa (poziciju u nizu), na kojem je traženje završeno. Za neuspešno traženje, indeks ukazuje na poziciju prvog većeg elementa niza od traženog.
Polazne pretpostavke: • Iste kao u prethodnom zadatku. • Izvršilac algoritma poznaje funkcije prvog ne manjeg celog broja od x: f(x) =
x i prvog ne većeg celog broja od x: f(x) = x, za x ∈ ℝ. */
KONSTANTA Q ∈ ℕ ← 100 // Maksimalna dužina niza
TIP Niz_celobElem = Array[1..Q] of ℤ // Tip niza celobrojnih elemenata PROCEDURA Bin_traženje ( UI Niz ∈ Niz_celobElem, // Niz u kojem se vrši traženje UL N ∈ {0,..., Q}, // Aktuelna dužina niza
UL Arg ∈ ℤ, // Argument traženja IZ Ind ∈ Boolean ← false, // Indikator uspešnosti traženja IZ Indeks ∈ {1,..., N+1} ← 1 // Indeks traženog elementa )
D_g ∈ {0,..., N} ← 0 // Donja granica podniza G_g ∈ {1,..., N+1} ← N+1 // Gornja granica podniza
POČETAK PROCEDURE Bin_traženje RADI traži_element DOK JE (G_g - D_g) ≥ 2 ∧ ¬Ind Indeks ← (G_g + D_g) / 2 // Nastavak traženja na "srednjem" elementu AKO JE Arg = Niz[Indeks] TADA Ind ← true // Traženje se uspešno završava INAČE AKO JE Arg < Niz[Indeks] TADA G_g ← Indeks // Traženje se nastavlja u "donjoj" polovini niza INAČE D_g ← Indeks // Traženje se nastavlja u "gornjoj" polovini niza KRAJ AKO KRAJ RADI traži_element AKO JE ¬Ind ∧ N ≠ 0 ∧ Arg > Niz[Indeks] TADA Indeks ← Indeks + 1 KRAJ AKO KRAJ PROCEDURE Bin_traženje
250. Osnove računarskih tehnologija i programiranja - priručnik za vežbe
Algoritam 9.2.3. Upis novog elementa u uređeni niz
/* Zadatak: • Realizovati upis novozadatog elementa u uređeni niz, ukoliko element sa
zadatom vrednošću ne postoji u nizu. • Algoritam, kao izlazne podatke, vraća: indikator uspešnosti upisa
ind ∈ {0, 1, 2}, 0 - uspešan upis, 1 - element već postoji u nizu i 2 - niz prelazi maksimalnu deklarisanu dužinu) i indeks elementa (poziciju u nizu), na kojem je pokušaj upisa završio.
Polazne pretpostavke: • Izvršilac algoritma poznaje proceduru binarnog traženja Bin_traženje(Niz, N,
Arg, Ind, Indeks). */
KONSTANTA Q ∈ ℕ ← 100 // Maksimalna dužina niza
TIP Niz_celobElem = Array[1..Q] of ℤ // Tip niza celobrojnih elemenata PROCEDURA Upis_u_niz ( UI Niz ∈ Niz_celobElem, // Niz u koji se upisuje element UI N ∈ {0,..., Q}, // Aktuelna dužina niza
UL Arg ∈ ℤ, // Vrednost elementa IZ Ind ∈ {0, 1, 2} ← 0, // Indikator uspešnosti upisa IZ Indeks ∈ {1,..., N+1} // Indeks mesta za pokušaj upisa )
IndTR ∈ Boolean // Indikator uspešnosti traženja Idx ∈ {1,..., N} ← N // Indeks za pomeranje elemenata
POČETAK PROCEDURE Upis_u_niz AKO JE N < Q TADA Bin_traženje(Niz, N, Arg, IndTR, Indeks) AKO JE ¬IndTR TADA RADI pomeranje_elemenata DOK JE Idx ≥ Indeks Niz[Idx+1] ← Niz[Idx] Idx ← Idx - 1 KRAJ RADI pomeranje_elemenata Niz[Indeks] ← Arg N ← N + 1 INAČE Ind ← 1 // Element, koji se želi upisati, već postoji u nizu KRAJ AKO INAČE Ind ← 2 // Niz prelazi maksimalnu deklarisanu dužinu KRAJ AKO KRAJ PROCEDURE Upis_u_niz
9. Algoritamski prikaz postupaka obrade podataka 251.
Algoritam 9.2.4. Fizičko brisanje elementa iz uređenog niza
/* Zadatak: • Realizovati fizičko brisanje elementa iz uređenog niza, ukoliko element sa
zadatom vrednošću već postoji u nizu. • Algoritam, kao izlazne podatke, vraća: indikator uspešnosti brisanja
ind ∈ {true, false} i indeks (poziciju u nizu) elementa, na kojem je pokušaj brisanja završio.
Polazne pretpostavke: • Izvršilac algoritma poznaje proceduru binarnog traženja Bin_traženje(Niz, N,
Arg, Ind, Indeks). */
KONSTANTA Q ∈ ℕ ← 100 // Maksimalna dužina niza
TIP Niz_celobElem = Array[1..Q] of ℤ // Tip niza celobrojnih elemenata PROCEDURA Brisanje_niz ( UI Niz ∈ Niz_celobElem, // Niz iz kojeg se briše UI N ∈ {0,..., Q}, // Aktuelna dužina niza
UL Arg ∈ ℤ, // Vrednost elementa IZ Ind ∈ Boolean ← true, // Indikator uspešnosti IZ Indeks ∈ {1,..., N+1} // Indeks mesta za brisanje ) IndTR ∈ Boolean // Indikator uspešnosti traženja Idx ∈ {1,..., N} // Indeks za pomeranje elemenata POČETAK PROCEDURE Brisanje_niz Bin_traženje(Niz, N, Arg, IndTR, Indeks) AKO JE IndTR TADA Idx ← Indeks RADI pomeranje_elemenata DOK JE Idx < N Niz[Idx] ← Niz[Idx+1] Idx ← Idx + 1 KRAJ RADI pomeranje_elemenata N ← N - 1 INAČE Ind ← false // Element, koji se želi brisati, ne postoji u nizu KRAJ AKO KRAJ PROCEDURE Brisanje_niz
252. Osnove računarskih tehnologija i programiranja - priručnik za vežbe
Algoritam 9.2.5. Uređivanje niza metodom direktnog izbora
/* Zadatak: • Realizovati uređivanje elemenata niza u neopadajući redosled, metodom
direktnog izbora.
Polazne pretpostavke: • Izvršilac algoritma poznaje proceduru Zameni_argumente(arg1, arg2). */
KONSTANTA Q ∈ ℕ ← 100 // Maksimalna dužina niza
TIP Niz_celobElem = Array[1..Q] of ℤ // Tip niza celobrojnih elemenata PROCEDURA Sort_niz_dz ( UI Niz ∈ Niz_celobElem, // Niz koji se uređuje UL N ∈ {0,..., Q} // Aktuelna dužina niza )
/* Zadatak funkcije je da pronađe indeks elementa koji ima najmanju vrednost u
podnizu čije su granice određene indeksima D_g i G_g. */ FUNKCIJA Najmanji_član ( UL Niz ∈ Niz_celobElem, // Niz u kojem se traži UL D_g ∈ {1,..., Q}, // Donja granica UL G_g ∈ {1,..., Q} // Gornja granica ) VRAĆA {1,..., Q} // Indeks najmanjeg elementa niza
Idx ∈ {1,..., Q} ← D_g // Indeks najmanjeg člana podniza
POČETAK FUNKCIJE Najmanji_član D_g ← D_g + 1 RADI traži_najmanji_element DOK JE D_g ≤ G_g AKO JE Niz[D_g] < Niz[Idx] TADA Idx ← D_g KRAJ AKO D_g ← D_g + 1 KRAJ RADI traži_najmanji_element Najmanji_član ← Idx KRAJ FUNKCIJE Najmanji_član
Idx ∈ {1,..., Q} // Indeks najmanjeg člana podniza
POČETAK PROCEDURE Sort_niz_dz RADI prolaz_kroz_niz ZA i ← 1 DO N - 1 Idx ← Najmanji_član(Niz, i, N) AKO JE Idx ≠ i TADA Zameni_argumente(Niz[i], Niz[Idx]) KRAJ AKO KRAJ RADI prolaz_kroz_niz KRAJ PROCEDURE Sort_niz_dz
9. Algoritamski prikaz postupaka obrade podataka 253.
Algoritam 9.2.6. Formiranje jednostruko spregnute liste slogova
/* Zadatak: • Realizovati formiranje jednostruko spregnute, uređene liste slogova, na
osnovu uređenog niza elemenata. Polazne pretpostavke: • Izvršilac algoritma poznaje složeni tip podatka za deklaraciju sloga Record.
Pristup elementu (promenljivoj) sloga je moguć navođenjem naziva promenljive slogovskog tipa, tačke i naziva promenljive, npr. Naziv_sloga.Naziv_prom.
• Izvršilac algoritma poznaje složeni tip podatka za deklaraciju niza elemenata varijabilne dužine Varrying Array. Pristup i-tom elementu niza je moguć kao i elementu niza fiksne dužine, npr Niz[i].
*/
KONSTANTA Q ∈ ℕ ← 100 // Maksimalna dužina niza
TIP Niz_celobElem = Array[1..Q] of ℤ // Tip niza celobrojnih elemenata
TIP Slog = Record ( Ključ ∈ ℤ, // Vrednost elementa strukture
Pok_Sledeći ∈ ℕ // Pokazivač na sledeći element u listi ) // Deklaracija tipa sloga TIP Niz_slog = Varrying Array of Slog // Tip niza slogova, varijabilne dužine PROCEDURA Formiraj_listu ( UL Niz ∈ Niz_celobElem, // Niz od kojeg se formira lista UL N ∈ {0,..., Q}, // Aktuelna dužina niza IZ SprLst ∈ Niz_slog, // Spregnuta lista slogova
IZ Pok_Početak ∈ ℕ ← Null // Pokazivač na početak liste ) POČETAK PROCEDURE Formiraj_listu AKO JE N ≠ 0 TADA Pok_Početak ← 1 SprLst[1].Ključ ← Niz[1] SprLst[1].Pok_Sledeći ← Null RADI prolaz_kroz_niz ZA i ← 2 DO N SprLst[i].Ključ ← Niz[i] SprLst[i].Pok_Sledeći ← Null SprLst[i-1].Pok_Sledeći ← i KRAJ RADI prolaz_kroz_niz KRAJ AKO KRAJ PROCEDURE Formiraj_listu
254. Osnove računarskih tehnologija i programiranja - priručnik za vežbe
Algoritam 9.2.7. Traženje u jednostruko spregnutoj listi, praćenjem pokazivača
/* Zadatak: • Realizovati traženje elementa u jednostruko spregnutoj, uređenoj listi
slogova, metodom praćenja pokazivača, na osnovu zadatog argumenta traženja.
• Algoritam, kao izlazne podatke, vraća: indikator uspešnosti traženja (logičku vrednost true, ili false) i dva indeksa elementa (pozicije u listi slogova), na kojem je traženje završeno.
• Za neuspešno traženje, prvi indeks ukazuje na poziciju neposredno prethodnog elementa liste od traženog, a drugi na poziciju neposredno narednog elementa u listi.
• Za uspešno traženje, prvi indeks ukazuje na poziciju neposredno prethodnog elementa liste od traženog, a drugi na poziciju nađenog elementa u listi.
Polazne pretpostavke: • Izvršilac algoritma poznaje složeni tip podatka za deklaraciju sloga Record. • Izvršilac algoritma poznaje složeni tip podatka za deklaraciju niza elemenata
varijabilne dužine Varrying Array. */
TIP Slog = Record ( Ključ ∈ ℤ,
Pok_Sledeći ∈ ℕ ) // Deklaracija tipa sloga TIP Niz_slog = Varrying Array of Slog // Tip niza slogova, varijabilne dužine
PROCEDURA Lista_Traženje ( UL SprLst ∈ Niz_slog, // Spregnuta lista slogova
UL Pok_Početak ∈ ℕ, // Pokazivač na početak liste
UL Arg ∈ ℤ, // Argument traženja IZ Ind ∈ Boolean ← false, // Indikator uspešnosti traženja
IZ Indeks_P ∈ ℕ ← Null // Indeks prethodnog elementa
IZ Indeks_N ∈ ℕ // Indeks traženog elementa )
POČETAK PROCEDURE Lista_Traženje Indeks_N ← Pok_Početak // Tekući element je, inicijalno, prvi element RADI traži_element DOK JE Indeks_N ≠ Null ∧ Arg > SprLst[Indeks_N].Ključ Indeks_P ← Indeks_ // Tekući element postaje prethodni element Indeks_N ← SprLst[Indeks_N].Pok_Sledeći // Prelazak na sledeći element KRAJ RADI traži_element AKO JE Indeks_N ≠ Null ∧ Arg = SprLst[Indeks_N].Ključ TADA Ind ← true // Traženje se uspešno završava KRAJ AKO KRAJ PROCEDURE Lista_Traženje
9. Algoritamski prikaz postupaka obrade podataka 255.
Algoritam 9.2.8. Upis elementa u jednostruko spregnutu listu
/* Zadatak: • Realizovati upis novog elementa u jednostruko spregnutu, uređenu listu
slogova, ukoliko takav element već ne postoji u listi. • Algoritam, kao izlazne podatke, vraća: indikator uspešnosti upisa (logičku
vrednost true, ili false) i indeks elementa (poziciju u listi slogova), na kojem je pokušaj upisa završio.
Polazne pretpostavke: • Izvršilac algoritma poznaje proceduru traženja Lista_Traženje(SprLst,
Pok_Početak, Arg, Ind, Indeks_P, Indeks_N). */
TIP Slog = Record ( Ključ ∈ ℤ,
Pok_Sledeći ∈ ℕ ) // Deklaracija tipa sloga TIP Niz_slog = Varrying Array of Slog // Tip niza slogova varijabilne dužine
PROCEDURA Lista_Upis ( UI SprLst ∈ Niz_slog, // Spregnuta lista slogova
UI Pok_Početak ∈ ℕ, // Pokazivač na početak liste
UI N ∈ ℕ0, // Aktuelna dužina liste slogova
UL Arg ∈ ℤ, // Vrednost elementa za upis IZ Ind ∈ Boolean ← false, // Indikator uspešnosti upisa
IZ Indeks_N ∈ ℕ ← Null // Indeks na kojem upis završava )
IndTR ∈ Boolean // Indikator uspešnosti traženja u listi
Indeks_P ∈ ℕ // Indeks prethodnog elementa nakon traženja
POČETAK PROCEDURE Lista_Upis Lista_Traženje(SprLst, Pok_Početak, Arg, IndTR, Indeks_P, Indeks_N) AKO JE ¬IndTR TADA // Element nije pronađen u listi N ← N + 1 SprLst[N].Ključ ← Arg AKO JE Indeks_P = Null TADA // Element se dodaje na početak liste SprLst[N].Pok_Sledeći ← Pok_Početak Pok_Početak ← N INAČE // Element se dodaje u sredinu ili na kraj liste SprLst[N].Pok_Sledeći ← SprLst[Indeks_P].Pok_Sledeći SprLst[Indeks_P].Pok_Sledeći ← N KRAJ AKO Ind ← true // Upis se uspešno završava Indeks_N ← N // Indeks (pozicija) novoupisanog elementa KRAJ AKO KRAJ PROCEDURE Lista_Upis
256. Osnove računarskih tehnologija i programiranja - priručnik za vežbe
Algoritam 9.2.9. Brisanje elementa iz jednostruko spregnute liste
/* Zadatak: • Realizovati brisanje postojećeg elementa iz jednostruko spregnute, uređene
liste slogova, ukoliko takav element postoji u listi. • Algoritam, kao izlazne podatke, vraća: indikator uspešnosti brisanja (logičku
vrednost true, ili false) i indeks elementa (poziciju u listi slogova), na kojem je pokušaj brisanja završio.
Polazne pretpostavke: • Izvršilac algoritma poznaje proceduru traženja Lista_Traženje(SprLst,
Pok_Početak, Arg, Ind, Indeks_P, Indeks_N). */
TIP Slog = Record ( Ključ ∈ ℤ,
Pok_Sledeći ∈ ℕ ) // Deklaracija tipa sloga TIP Niz_slog = Varrying Array of Slog // Tipa niza slogova, varijabilne dužine PROCEDURA Lista_Brisanje ( UI SprLst ∈ Niz_slog, // Spregnuta lista slogova
UI Pok_Početak ∈ ℕ, // Pokazivač na početak liste
UI N ∈ ℕ0, // Aktuelna dužina liste slogova
UL Arg ∈ ℤ, // Vrednost elementa za brisanje IZ Ind ∈ Boolean ← false, // Indikator uspešnosti brisanja
IZ Indeks_N ∈ ℕ ← Null // Indeks na završetku brisanja ) IndTR ∈ Boolean // Indikator uspešnosti traženja u listi Indeks_P ∈ // Indeks prethodnog elementa nakon traženja POČETAK PROCEDURE Lista_Brisanje Lista_Traženje(SprLst, Pok_Početak, Arg, IndTR, Indeks_P, Indeks_N) AKO JE IndTR TADA // Element je pronađen u listi AKO JE Indeks_N = Pok_Početak TADA // Element se briše s početka liste Pok_Početak ← SprLst[Pok_Početak].Pok_Sledeći INAČE // Element se briše iz sredine ili s kraja liste SprLst[Indeks_P].Pok_Sledeći ← SprLst[Indeks_N].Pok_Sledeći AKO JE Indeks_N = N TADA // Briše se poslednji element liste N ← N - 1 KRAJ AKO KRAJ AKO Ind ← true // Brisanje se uspešno završava KRAJ AKO KRAJ PROCEDURE Lista_Brisanje
9. Algoritamski prikaz postupaka obrade podataka 257.
Algoritam 9.2.10. Inicijalizacija steka
/* Zadatak: • Realizovati postupak inicijalizacije strukture steka, koja se organizuje putem
niza elemenata (stringova) varijabilne dužine. • Algoritam, pri inicijalizaciji, postavlja vrednost pokazivača (indeksa) na vrh
steka na 0. Polazne pretpostavke: • Izvršilac algoritma poznaje složeni tip podatka za deklaraciju niza elemenata
varijabilne dužine Varrying Array. */ TIP Niz_slog = Varrying Array of String // Tip niza slogova, varijabilne dužine FUNKCIJA Stek_Init ( UI Stek ∈ Niz_slog, // Niz varijabilne dužine - stek
) VRAĆA ℕ0 // Pokazivač na vrh (početak) steka POČETAK FUNKCIJE Stek_Init Dealociranje_var_niza(Stek) // Oslobađanje zauzetog memorijskog prostora Stek_Init ← 0 // Vrh (početak) steka se postavlja na 0 KRAJ FUNKCIJE Stek_Init
Algoritam 9.2.11. Upis elementa u stek
/* Zadatak: • Realizovati upis novog elementa u strukturu steka, koja se organizuje putem
niza elemenata (stringova) varijabilne dužine. • Algoritam, pri upisu, preuzima i modifikuje vrednost pokazivača (indeksa) na
vrh steka. Polazne pretpostavke: • Izvršilac algoritma poznaje složeni tip podatka za deklaraciju niza elemenata
varijabilne dužine Varrying Array. */ TIP Niz_slog = Varrying Array of String // Tip niza slogova, varijabilne dužine PROCEDURA Stek_Put ( UI Stek ∈ Niz_slog, // Niz varijabilne dužine - stek UL Arg ∈ String, // Vrednost elementa za upis
UI Vrh ∈ ℕ0 // Pokazivač na vrh (početak) ) POČETAK PROCEDURE Stek_Put Vrh ← Vrh + 1 Stek[Vrh] ← Arg KRAJ PROCEDURE Stek_Put
258. Osnove računarskih tehnologija i programiranja - priručnik za vežbe
Algoritam 9.2.12. Preuzimanje i brisanje elementa iz steka
/* Zadatak: • Realizovati preuzimanje i brisanje elementa iz strukture steka, koja se
organizuje putem niza elemenata (stringova) varijabilne dužine. • Algoritam, pri brisanju, preuzima i modifikuje vrednost pokazivača (indeksa)
na vrh steka. Kao izlazni podatak, algoritam vraća vrednost preuzetog i izbrisanog elementa. Ako je stek prazan, vrednost preuzetog elementa treba da bude Null.
Polazne pretpostavke: • Izvršilac algoritma poznaje složeni tip podatka za deklaraciju niza elemenata
varijabilne dužine Varrying Array. */ TIP Niz_slog = Varrying Array of String // Tip niza slogova, varijabilne dužine PROCEDURA Stek_Get ( UI Stek ∈ Niz_slog, // Niz varijabilne dužine – stek IZ Arg ∈ String ← Null, // Vrednost izbrisanog elementa iz steka
UI Vrh ∈ ℕ0 // Pokazivač na vrh (početak) steka ) POČETAK PROCEDURE Stek_Get AKO JE Vrh ≠ 0 TADA Arg ← Stek[Vrh] Vrh ← Vrh - 1 KRAJ AKO KRAJ PROCEDURE Stek_Get
9. Algoritamski prikaz postupaka obrade podataka 259.
Algoritam 9.2.13. Sabiranje dvodimenzionalnih matrica
/* Zadatak: • Realizovati postupak sabiranja dvodimenzionalnih matrica. Polazne pretpostavke: • Izvršilac algoritma poznaje složeni tip podatka za deklaraciju
višedimenzionalnog niza elemenata Array. */
KONSTANTA Q ∈ ℕ ← 100 // Maksimalna dužina jedne dimenzije niza
TIP 2DMatrica = Array[1..Q, 1..Q] of ℤ // Tip dvodimenzionalne matrice FUNKCIJA Mat_sabiranje ( UL A ∈ 2DMatrica, // 1. matrica - sabirak UL B ∈ 2DMatrica, // 2. matrica - sabirak UL N ∈ {0,..., Q}, // Aktuelni broj vrsta matrica UL M ∈ {0,..., Q} // Aktuelni broj kolona matrica ) VRAĆA 2DMatrica C ∈ 2DMatrica // matrica - rezultat sabiranja POČETAK FUNKCIJE Mat_sabiranje RADI prolaz_kroz_vrste ZA i ← 1 DO N RADI prolaz_kroz_kolone ZA j ← 1 DO M C[i, j] ← A[i, j] + B[i, j] KRAJ RADI prolaz_kroz_kolone KRAJ RADI prolaz_kroz_vrste Mat_sabiranje ← C KRAJ FUNKCIJE Mat_sabiranje
260. Osnove računarskih tehnologija i programiranja - priručnik za vežbe
Algoritam 9.2.14. Množenje dvodimenzionalnih matrica
/* Zadatak: • Realizovati postupak množenja kompatibilnih dvodimenzionalnih matrica. • Algoritam vraća, kao izlazni rezultat, proizvod dve matrice i indikator
uspešnosti sprovođenja množenja Ind ∈ {true, false}. Indikator uspešnosti vraća true ako i samo ako su matrice kompatibilne za množenje.
Polazne pretpostavke: • Izvršilac algoritma poznaje složeni tip podatka za deklaraciju
višedimenzionalnog niza elemenata Array. */
KONSTANTA Q ∈ ℕ ← 100 // Maksimalna dužina jedne dimenzije niza
TIP 2DMatrica = Array[1..Q, 1..Q] of ℤ // Tip dvodimenzionalne matrice */ FUNKCIJA Mat_množenje ( UL A ∈ 2DMatrica, // 1. matrica UL N ∈ {0,..., Q}, // Aktuelni broj vrsta matrice A UL M ∈ {0,..., Q}, // Aktuelni broj kolona matrice A UL B ∈ 2DMatrica, // 2. matrica UL P ∈ {0,..., Q}, // Aktuelni broj vrsta matrice B UL S ∈ {0,..., Q}, // Aktuelni broj kolona matrice B IZ Ind ∈ Boolean ← false // Inidkator uspešnosti množenja ) VRAĆA 2DMatrica C ∈ 2DMatrica // matrica - rezultat množenja POČETAK FUNKCIJE Mat_množenje AKO JE M = P TADA RADI prolaz_kroz_vrste_A ZA i ← 1 DO N RADI prolaz_kroz_kolone_B ZA k ← 1 DO S C[i, k] ← 0 RADI množenje_vektora ZA j ← 1 DO M C[i, k] ← C[i, k] + A[i, j] ∗ B[j, k] KRAJ RADI množenje_vektora KRAJ RADI prolaz_kroz_kolone_B KRAJ RADI prolaz_kroz_vrste_A Ind ← true Mat_množenje ← C KRAJ AKO KRAJ FUNKCIJE Mat_množenje
9. Algoritamski prikaz postupaka obrade podataka 261.
Algoritam 9.2.15. Transponovanje dvodimenzionalnih matrica
/* Zadatak: • Realizovati postupak transponovanja dvodimenzionalne matrice. Algoritam
vraća, kao izlazni rezultat, transponovanu matricu. Polazne pretpostavke: • Izvršilac algoritma poznaje složeni tip podatka za deklaraciju
višedimenzionalnog niza elemenata Array. */
KONSTANTA Q ∈ ℕ ← 100 // Maksimalna dužina jedne dimenzije niza
TIP 2DMatrica = Array[1..Q, 1..Q] of ℤ // Tip dvodimenzionalne matrice FUNKCIJA Mat_transpon ( UL A ∈ 2DMatrica, // Matrica koja se transponuje UL N ∈ {0,..., Q}, // Aktuelni broj vrsta matrice A UL M ∈ {0,..., Q} // Aktuelni broj kolona matrice A ) VRAĆA 2DMatrica C ∈ 2DMatrica // matrica - rezultat transponovanja POČETAK FUNKCIJE Mat_transpon RADI prolaz_kroz_vrste ZA i ← 1 DO N RADI prolaz_kroz_kolone ZA j ← 1 DO M C[j, i] ← A[i, j] KRAJ RADI prolaz_kroz_kolone KRAJ RADI prolaz_kroz_vrste Mat_transpon ← C KRAJ FUNKCIJE Mat_transpon
262. Osnove računarskih tehnologija i programiranja - priručnik za vežbe
Algoritam 9.2.16. Selekcija prostih brojeva iz zadatog skupa - Erastotenovo sito
/* Zadatak: • Realizovati postupak generisanja (selekcije) prostih brojeva iz zadatog skupa
prirodnih brojeva, od 1 do zadatog prirodnog broja N, prema algoritmu "Erastotenovo sito". Početni skup brojeva, kao i rezultujući skup prostih brojeva, treba da budu predstavljeni putem nizova. Niz prostih brojeva treba da bude uređen u rastućem redosledu.
Polazne pretpostavke: • Izvršilac algoritma poznaje složeni tip podatka za deklaraciju niza elemenata
Array. */
KONSTANTA Q ∈ ℕ ← 100 // Maksimalna dužina niza TIP Niz_Boolean = Array[1..Q] of Boolean // Tip niza logičkih konstanti
TIP Niz_PrirBroj = Array[1..Q] of ℕ // Tip niza od N prirodnih brojeva PROCEDURA Prosti_brojevi ( UL N ∈ {0,..., Q}, // Maksimalni prirodni broj IZ NizPrsB ∈ Niz_PrirBroj, // Niz prostih brojeva IZ M ∈ {0,..., Q} ← 0 // Aktuelna dužina izlaznog niza ) Sito ∈ Niz_Boolean // Niz u kojem element ukazuje da li je broj (indeks) prost Idx ∈ {0,..., Q} ← 2 // Indeks prolaska kroz sito Umn ∈ {0,..., Q} // Umnožak indeksa prostog broja POČETAK PROCEDURE Prosti_brojevi AKO JE N ≠ 0 TADA M ← 1 NizPrsB[1] ← 1 RADI inicijalizacija_sita ZA i ← 2 DO N Sito[i] ← true // Inicijalno, svi prirodni brojevi do N su prosti KRAJ RADI inicijalizacija_sita RADI prolazak_kroz_sito DOK JE Idx ≤ N RADI pronađi_sledeći_prost_broj DOK JE Idx ≤ N ∧ ¬Sito[Idx] Idx ← Idx + 1 KRAJ RADI pronađi_sledeći_prost_broj AKO JE Idx ≤ N TADA // Nađen je prost broj i važi Sito[Idx] = true M ← M + 1 NizPrsB[M] ← Idx // Prost broj se dodaje na kraj izlaznog niza Umn ← 2 ∗ Idx RADI elminacija_umnožaka DOK JE Umn ≤ N
9. Algoritamski prikaz postupaka obrade podataka 263.
Sito[Umn] ← false Umn ← Umn + Idx // Umnošci prostog broja se eliminišu iz sita KRAJ RADI elminacija_umnožaka Idx ← Idx + 1 KRAJ AKO KRAJ RADI prolazak_kroz_sito KRAJ AKO KRAJ PROCEDURE Prosti_brojevi
264. Osnove računarskih tehnologija i programiranja - priručnik za vežbe
9.3. Rekurzivni problemi
Algoritam 9.3.1. Izračunavanje faktorijela metodom rekurzije
/* Zadatak: • Realizovati postupak izračunavanja faktorijela prirodnog broja (funkcije
f(n) = n!) u rekurzivnom obliku. Polazne pretpostavke: • Izvršilac algoritma poznaje osnovne aritmetičke operacije. • Izvršilac algoritma poznaje koncept rekurzivnog poziva funkcije i procedure. */ FUNKCIJA Faktorijel (
UL n ∈ ℕ0 // Prirodni broj, za koji se izračunava faktorijel ) VRAĆA ℕ POČETAK FUNKCIJE Faktorijel AKO JE n ∈ {0, 1} TADA Faktorijel ← 1 INAČE Faktorijel ← n ∗ Faktorijel(n-1) KRAJ AKO KRAJ FUNKCIJE Faktorijel
9. Algoritamski prikaz postupaka obrade podataka 265.
Algoritam 9.3.2. Izračunavanje faktorijela nerekurzivno, pomoću steka
/* Zadatak: • Realizovati postupak izračunavanja faktorijela prirodnog broja (funkcije
f(n) = n!) u nerekurzivnom obliku, simulacijom rekurzije pomoću steka. Polazne pretpostavke: • Izvršilac algoritma poznaje osnovne aritmetičke operacije. • Izvršilac algoritma ne poznaje koncept rekurzivnog poziva funkcije i
procedure. */ FUNKCIJA Faktorijel (
UL n ∈ ℕ0 // Prirodni broj, za koji se izračunava faktorijel ) VRAĆA ℕ
TIP Niz_slog = Varrying Array of ℕ // Tip niza slogova, varijabilne dužine Stek ∈ Niz_slog // Pomoćni stek za smeštanje međurezultata
Vrh ∈ ℕ0 // Pokazivač na vrh (početak) steka
Arg1 ∈ ℕ // Argument za preuzimanje elementa sa steka Arg2 ∈ ℕ // Argument za preuzimanje elementa sa steka POČETAK FUNKCIJE Faktorijel Vrh ← Stek_Init(Stek) RADI prolaz_u_dubinu ZA i ← n DO 1 Stek_put(Stek, i, Vrh) KRAJ RADI prolaz_u_dubinu Stek_put(Stek, 1, Vrh) RADI povratak_iz_dubine DOK JE Vrh ≠ 1 Stek_get(Stek, Arg1, Vrh) Stek_get(Stek, Arg2, Vrh) Stek_put(Stek, Arg1 ∗ Arg2, Vrh) KRAJ RADI povratak_iz_dubine Stek_get(Stek, Arg1, Vrh) Faktorijel ← Arg1 KRAJ FUNKCIJE Faktorijel
266. Osnove računarskih tehnologija i programiranja - priručnik za vežbe
Algoritam 9.3.3. Rešavanje problema "Hanoiske kule" metodom rekurzije
/* Zadatak: • Realizovati postupak rešavanja problema hanoiskih kula u rekurzivnom
obliku. Potrebno je paket diskova prebaciti s osovine A na osovinu B, pri čemu se, pri prenošenju jednog diska, samo disk manjeg poluprečnika sme postavljati na disk većeg poluprečnika.
3
1 2
A B C
4
3
1 2
A B C
4
1.
2. 3.
Polazne pretpostavke: • Izvršilac algoritma poznaje koncept rekurzivnog poziva funkcije i procedure. */ TIP Slog = Record (
Rbr_diska ∈ ℕ, // Redni broj diska koji treba prebaciti Sa_osovine ∈ String, // Oznaka osovine, s koje se disk prebacuje Na_osovinu ∈ String // Oznaka osovine, na koju se disk prebacuje ) // Tip za prikaz prebacivanja diska TIP Šema_Tip = Varrying Array of Slog // Deklaracija tipa za šemu prebacivanja diskova PROCEDURA Hanoi (
UL n ∈ ℕ, // Ukupan broj diskova na osovini IZ Šema_prebac ∈ Šema_Tip, // Deklaracija šeme prebacivanja
IZ Broj_prebac ∈ ℕ0 ← 0 // Broj elemenata niza Šema_prebac ) PROCEDURA Prebacivanje (
UL n ∈ ℕ, // Trenutni broj diskova UL Sa_osovine ∈ String, // Sa koje osovine UL Na_osovinu ∈ String, // Na koju osovinu UL Pom_osovina ∈ String, // Pomoćna osovina UI Šema_prebac ∈ Šema_Tip, // Šema prebacivanja
UI Broj_prebac∈ ℕ0 // Broj prebacivanja )
9. Algoritamski prikaz postupaka obrade podataka 267.
POČETAK PROCEDURE Prebacivanje AKO JE n ≠ 1 TADA Prebacivanje(n-1, Sa_osovine, Pom_osovina, Na_osovinu,
Šema_prebac, Broj_prebac) Broj_prebac ← Broj_prebac + 1 Šema_prebac[Broj_prebac].Rbr_diska ← n // Uputstvo za prebacivanje Šema_prebac[Broj_prebac].Sa_osovine ← Sa_osovine Šema_prebac[Broj_prebac].Na_osovinu ← Na_osovinu Prebacivanje(n-1, Pom_osovina, Na_osovinu, Sa_osovine,
Šema_prebac, Broj_prebac) INAČE Broj_prebac ← Broj_prebac + 1 // Uputstvo za prebacivanje Šema_prebac[Broj_prebac].Rbr_diska ← n Šema_prebac[Broj_prebac].Sa_osovine ← Sa_osovine Šema_prebac[Broj_prebac].Na_osovinu ← Na_osovinu KRAJ AKO KRAJ PROCEDURE Prebacivanje POČETAK PROCEDURE Hanoi Prebacivanje(n, 'A', 'B', 'C', Šema_prebac, Broj_prebac) KRAJ PROCEDURE Hanoi
268. Osnove računarskih tehnologija i programiranja - priručnik za vežbe
Algoritam 9.3.4. Rešavanje problema "Hanoiske kule" u nerekurzivnoj formi
/* Zadatak: • Realizovati postupak rešavanja problema hanoiskih kula u nerekurzivnom
obliku. Potrebno je rekurzivnu strukturu implementirati putem strukture steka.
3
1 2
A B C
4
3
1 2
A B C
4
1.
2. 3.
Polazne pretpostavke: • Izvršilac algoritma ne poznaje koncept rekurzivnog poziva funkcije i
procedure. */ TIP Slog = Record (
Rbr_diska ∈ ℕ, // Redni broj diska koji treba prebaciti Sa_osovine ∈ String, // Oznaka osovine, s koje se disk prebacuje Na_osovinu ∈ String // Oznaka osovine, na koju se disk prebacuje ) // Tip za prikaz prebacivanja diska TIP Šema_Tip = Varrying Array of Slog // Deklaracija tipa za šemu prebacivanja diskova PROCEDURA Hanoi (
UL n ∈ ℕ, // Ukupan broj diskova na osovini IZ Šema_prebac ∈ Šema_Tip, // Deklaracija šeme prebacivanja
IZ Broj_prebac ∈ ℕ0 // Broj elemenata niza Šema_prebac ) PROCEDURA Prebacivanje (
UL n ∈ ℕ, // Trenutni broj diskova UL Sa_osovine ∈ String, // Sa koje osovine UL Na_osovinu ∈ String, // Na koju osovinu UL Pom_osovina ∈ String, // Pomoćna osovina IZ Šema_prebac ∈ Šema_Tip, // Šema prebacivanja
IZ Broj_prebac∈ ℕ0 ← 0 // Broj prebacivanja )
9. Algoritamski prikaz postupaka obrade podataka 269.
TIP Stek_slog = Record ( n ∈ ℕ, Sa_osovine ∈ String, Na_osovinu ∈ String, Pom_osovina ∈ String ) // Deklaracija jednog elementa steka
TIP Stek_Tip = Varrying Array of Stek_slog // Deklaracija tipa steka Stek ∈ Stek_Tip // Deklaracija steka za međurezultate
Vrh ∈ ℕ0 // Pokazivač na vrh (početak) steka Stel ∈ Stek_slog // Pomoćna promenljiva – element steka PROCEDURA Punjenje_steka_do_1 ( UI Stek ∈ Stek_Tip, UL Stel ∈ Stek_slog,
UI Vrh ∈ ℕ0 ) // Punjenje steka, prolazom u dubinu steka, od diska n, do diska 1
POČETAK PROCEDURE Punjenje_steka_do_1 Stek_put(Stek, Stel, Vrh) // Početni uslovi – punjenje za tekući disk RADI prolaz_u_dubinu ZA i ← n-1 DO 1 Stek_get(Stek, Stel, Vrh) Stek_put(Stek, Stel, Vrh) Stek_put(Stek, (i, Stel.Sa_osovine, Stel.Pom_osovina,
Stel.Na_osovinu), Vrh) KRAJ RADI prolaz_u_dubinu KRAJ PROCEDURE Punjenje_steka_do_1 POČETAK PROCEDURE Prebacivanje Vrh ← Stek_Init(Stek) // Inicijalizacija Punjenje_steka_do_1 (Stek,
(n, Sa_osovine, Na_osovinu, Pom_osovina), Vrh) RADI povratak_iz_dubine DOK JE Vrh ≠ 0 Stek_get(Stek, Stel, Vrh) // Obrada diska Broj_prebac ← Broj_prebac + 1 Šema_prebac[Broj_prebac].Rbr_diska ← Stel.n // Uputstvo Šema_prebac[Broj_prebac].Sa_osovine ← Stel.Sa_osovine Šema_prebac[Broj_prebac].Na_osovinu ← Stel.Na_osovinu AKO JE Stel.n ≠ 1 TADA Punjenje_steka_do_1 (Stek, (Stel.n - 1, Stel.Pom_osovina,
Stel.Na_osovinu, Stel.Sa_osovine), Vrh) KRAJ AKO KRAJ RADI povratak_iz_dubine KRAJ PROCEDURE Prebacivanje POČETAK PROCEDURE Hanoi Prebacivanje(n, 'A', 'B', 'C', Šema_prebac, Broj_prebac) KRAJ PROCEDURE Hanoi
270. Osnove računarskih tehnologija i programiranja - priručnik za vežbe
Algoritam 9.3.5. Formiranje binarnog stabla od uređenog niza, metodom rekurzije
/* Zadatak: • Realizovati postupak formiranja binarnog stabla traženja, prikazanog putem
spregnute liste slogova, na osnovu uređenog niza elemenata. Polazne pretpostavke: • Izvršilac algoritma poznaje složeni tip podatka za deklaraciju sloga Record. • Izvršilac algoritma poznaje složeni tip podatka za deklaraciju niza Varrying
Array. */
KONSTANTA Q ∈ ℕ ← 100 // Maksimalna dužina niza
TIP Niz_celobElem = Array[1..Q] of ℤ // Tip niza celobrojnih elemenata
TIP Slog = Record ( Ključ ∈ ℤ, // Vrednost elementa (čvora) stabla
Levi ∈ ℕ, // Pokazivač na levo podstablo Desni ∈ ℕ // Pokazivač na desno podstablo ) // Deklaracija tipa sloga TIP Stablo_tip = Varrying Array of Slog // Deklaracija tipa binarnog stabla PROCEDURA Formiraj_stablo ( UL Niz ∈ Niz_celobElem, // Niz od kojeg se formira stablo UL N ∈ {0,..., Q}, // Aktuelna dužina niza IZ BinStb ∈ Niz_slog, // Binarno stablo traženja
IZ Koren ∈ ℕ ← Null // Pokazivač na koren stabla )
Idx_Sr ∈ ℕ // Indeks srednjeg elementa niza
Idx_max ∈ ℕ // Indeks poslednjeg sloga u varijabilnom nizu PROCEDURA Poveži_podstablo ( UL Niz ∈ Niz_celobElem, // Niz UI BinStb ∈ Niz_slog, // Binarno stablo traženja
UI Idx_max ∈ ℕ, // Indeks poslednjeg sloga UL D_g ∈ {0,..., Q}, // Donja granica podniza UL G_g ∈ {0,..., Q}, // Gornja granica podniza IZ Indeks ← Null // Indeks korena podstabla )
Idx_Sr ∈ ℕ // Indeks srednjeg elementa niza
9. Algoritamski prikaz postupaka obrade podataka 271.
POČETAK PROCEDURE Poveži_podstablo AKO JE (G_g - D_g) > 1 TADA Idx_sr ← (D_g + G_g) / 2 Idx_max ← Idx_max + 1 BinStb[Idx_max].Ključ ← Niz[Idx_sr] Indeks ← Idx_max Poveži_podstablo(Niz, BinStb, Idx_max, D_g, Idx_sr,
BinStb[Idx_max].Levi) Poveži_podstablo(Niz, BinStb, Idx_max, Idx_sr, G_g,
BinStb[Idx_max].Desni) KRAJ AKO KRAJ PROCEDURE Poveži_podstablo POČETAK PROCEDURE Formiraj_stablo AKO JE N ≠ 0 TADA Idx_sr ← (N + 1) / 2 Idx_max ← 1 Koren ← 1 BinStb[1].Ključ ← Niz[Idx_sr] Poveži_podstablo(Niz, BinStb, Idx_max, 0, Idx_sr, BinStb[1].Levi) Poveži_podstablo(Niz, BinStb, Idx_max, Idx_sr, N + 1, BinStb[1].Desni) KRAJ AKO KRAJ PROCEDURE Formiraj_stablo
272. Osnove računarskih tehnologija i programiranja - priručnik za vežbe
9.4. Matematičke operacije
Algoritam 9.4.1. Određivanje sledećeg prirodnog broja
/* Zadatak: • Generisati sledeći prirodan broj, na osnovu zadatog prirodnog broja u obliku
stringa. • Pretpostavka je da tip podatka string može imati maksimalnu dužinu od 255
znakova. Polazne pretpostavke: • Izvršilac algoritma poznaje osnovne operatore i funkcije za manipulaciju
stringovima. */ FUNKCIJA inkrement ( UL broj ∈ String ) VRAĆA String
maxZnakova ∈ ℕ ← 255 // Pretpostavljeni maksimalni broj znakova tipa String
i ∈ ℕ // Indeks iteracije cifra ∈ String[1] // Jedna cifra broja inkCifra ∈ String[1] // Inkrementirana cifra broja inkBroj ∈ String ← '' // Broj nakon inkrementacije POČETAK FUNKCIJE inkrement AKO JE length(broj) < maxZnakova TADA broj ← '0' || broj // Na maksimalnom broju znakova algoritam "resetuje" broj na 0 KRAJ AKO i ← 1 RADI inkrementiranje cifra ← podstring(broj, length(broj) + 1 – i, 1) AKO JE cifra = ‘0’ TADA inkCifra = ‘1’ INAČE AKO JE cifra = ‘1’ TADA inkCifra = ‘2’ INAČE AKO JE cifra = ‘2’ TADA inkCifra = ‘3’ INAČE AKO JE cifra = ‘3’ TADA inkCifra = ‘4’
INAČE AKO JE cifra = ‘4’ TADA inkCifra = ‘5’ INAČE AKO JE cifra = ‘5’ TADA
9. Algoritamski prikaz postupaka obrade podataka 273.
inkCifra = ‘6’ INAČE AKO JE cifra = ‘6’ TADA inkCifra = ‘7’ INAČE AKO JE cifra = ‘7’ TADA inkCifra = ‘8’ INAČE AKO JE cifra = ‘8’ TADA inkCifra = ‘9’ INAČE inkCifra ← ‘0’ i ← i + 1 KRAJ AKO inkBroj ← inkCifra || inkBroj KRAJ RADI inkrementiranje KAD BUDE (inkCifra ≠ '0' ILI i > length(broj)) inkBroj ← podstring(broj, 1, length(broj) - i) || inkBroj AKO JE podstring(inkBroj, 1, 1) = 0 TADA inkBroj ← podstring(inkBroj, 2, length(inkBroj) – 1) KRAJ AKO inkrement ← inkBroj KRAJ FUNKCIJE inkrement
274. Osnove računarskih tehnologija i programiranja - priručnik za vežbe
Algoritam 9.4.2. Sabiranje dva prirodna broja
/* Zadatak: • Sabrati dva prirodna broja sa n cifara u binarnom brojnom sistemu. Brojevi
se zadaju u obliku stringova.
Polazne pretpostavke: • Izvršilac algoritma poznaje osnovne operatore i funkcije za manipulaciju
stringovima. • Izvršilac algoritma poznaje funkciju dopunjavanja stringa str znakom z, do dužine
n: lpad(str, z, n) i funkciju izdvajanja podstringa podstring(str, pos, duž). */
PROCEDURA binSumN (
UL n ∈ ℕ, // Broj cifara sabiraka UL binString1 ∈ String, // Prvi sabirak UL binString2 ∈ String, // Drugi sabirak IZ sumString ∈ String, // Zbir IZ overflow ∈ Boolean ← false // Indikacija prekoračenja )
i ∈ ℕ // Indeks iteracije p ∈ String // Prenosi pri sabiranju
POČETAK PROCEDURE binSumN p ← lpad('', '0', n + 1) // Inicijalno, prenosi ne postoje // Dopunjavanje nevažećim nulama binString1 ← lpad(podstring(binString1, 1, n), '0', n) binString2 ← lpad(podstring(binString2, 1, n), '0', n) sumString ← lpad('', '0', n) // Inicijalizovanje zbira RADI sabiranje ZA i ← n DO 1 KORAK -1 AKO JE ( (binString1[i] = '0' ∧ binString2[i] = '0') ∧ p[i+1] = '1') ∨ ( (binString1[i] = '1' ∨ binString2[i] = '1') ∧ p[i+1] = '0') ∨ ( (binString1[i] = '1' ∧ binString2[i] = '1') ∧ p[i+1] = '1')
TADA sumString[i] ← '1' KRAJ AKO AKO JE ( binString1[i] = '1' ∧ binString2[i] = '1') ∨ ( (binString1[i] = '1' ∨ binString2[i] = '1') ∧ p[i+1] = '1')
TADA p[i] ← '1' KRAJ AKO KRAJ RADI sabiranje AKO JE p[1] = '1' TADA // Indikacija prekoračenja pri sabiranju overflow ← true KRAJ AKO KRAJ PROCEDURE binSumN
9. Algoritamski prikaz postupaka obrade podataka 275.
Algoritam 9.4.3. Sabiranje dva cela broja
/* Zadatak: • Sabrati dva cela broja sa n cifara u binarnom brojnom sistemu. Brojevi se
zadaju u obliku stringova.
Polazne pretpostavke: • Izvršilac algoritma poznaje osnovne operatore i funkcije za manipulaciju
stringovima. • Izvršilac algoritma poznaje funkciju dopunjavanja stringa str znakom z, do dužine
n: lpad(str, z, n) i funkciju izdvajanja podstringa podstring(str, pos, duž). • Negativni brojevi su predstavljeni pomoću potpunog komplementa. */
PROCEDURA binSumZ (
UL n ∈ ℕ, // Broj cifara sabiraka UL binString1 ∈ String, // Prvi sabirak UL binString2 ∈ String, // Drugi sabirak IZ sumString ∈ String, // Zbir IZ overflow ∈ Boolean ← false // Indikacija prekoračenja )
i ∈ ℕ // Indeks iteracije p ∈ String // Prenosi pri sabiranju
POČETAK PROCEDURE binSumZ p ← lpad('', '0', n + 1) // Inicijalno, prenosi ne postoje // Dopunjavanje nevažećim nulama binString1 ← lpad(podstring(binString1, 1, n), '0', n) binString2 ← lpad(podstring(binString2, 1, n), '0', n) sumString ← lpad('', '0', n) // Inicijalizovanje zbira RADI sabiranje ZA i ← n DO 1 KORAK -1 AKO JE ( (binString1[i] = '0' ∧ binString2[i] = '0') ∧ p[i+1] = '1') ∨ ( (binString1[i] = '1' ∨ binString2[i] = '1') ∧ p[i+1] = '0') ∨ ( (binString1[i] = '1' ∧ binString2[i] = '1') ∧ p[i+1] = '1')
TADA sumString[i] ← '1' KRAJ AKO AKO JE ( binString1[i] = '1' ∧ binString2[i] = '1') ∨ ( (binString1[i] = '1' ∨ binString2[i] = '1') ∧ p[i+1] = '1')
TADA p[i] ← '1' KRAJ AKO KRAJ RADI sabiranje AKO JE p[1] = '1' ∨ p[2] = '1' TADA // Indikacija prekoračenja za PK brojeve overflow ← true KRAJ AKO KRAJ PROCEDURE binSumZ
276. Osnove računarskih tehnologija i programiranja - priručnik za vežbe
Algoritam 9.4.4. Transformisanje zapisa prirodnog broja iz dekadskog u brojni sistem sa zadatom osnovom
/* Zadatak: • Transformisati zapis prirodnog broja iz dekadskog u brojni sistem sa
osnovom b. Polazne pretpostavke: • Izvršilac algoritma poznaje osnovne operatore i funkcije za manipulaciju
stringovima. • Izvršilac algoritma poznaje operator celobrojnog deljenja / i funkciju
određivanja ostatka pri deljenju moduo(x, y). • Izvršilac algoritma poznaje funkciju konverzije stringa str u numeričku
vrednost number(str, ind), pri čemu ind ∈ Boolean predstavlja indikator uspešnosti konverzije.
• Na ulazu, zadaje se tabela koja za svaku dekadsku vrednost iz skupa {0,..., b-1}, sadrži oznaku odgovarajuće cifre sistema s osnovom b.
*/ FUNKCIJA dek2b ( UL dekString ∈ String, // Polazni string
UL b ∈ ℕ, // Brojna osnova UL TabCif ∈ String, // Tabela oznaka cifara u ciljnom sistemu IZ Ind ∈ Boolean // Indikator uspešnosti konverzije ) VRAĆA String
dekNum ∈ ℕ0 // Numerička vrednost zadatog stringa cifara bString ∈ String ← '' // Ekvivalent dekadskog zapisa broja POČETAK FUNKCIJE dek2b dekNum ← number(dekString, ind) AKO JE ind TADA RADI konverzija bString ← TabCif[Moduo(dekNum, b) + 1] || bString dekNum ← dekNum / b KRAJ RADI konverzija KAD BUDE dekNum = 0 KRAJ AKO dek2b ← bString KRAJ FUNKCIJE dek2b
9. Algoritamski prikaz postupaka obrade podataka 277.
Algoritam 9.4.5. Transformisanje zapisa prirodnog broja iz brojnog sistema sa zadatom osnovom u dekadski brojni sistem
/* Zadatak: • Transformisati zapis prirodnog broja iz brojnog sistema sa osnovom b u
dekadski brojni sistem. Polazne pretpostavke: • Izvršilac algoritma poznaje osnovne operatore i funkcije za manipulaciju
stringovima. • Izvršilac algoritma poznaje osnovne aritmetičke operacije. • Izvršilac algoritma poznaje implicitnu konverziju numeričke vrednosti u
string. • Na ulazu, zadaje se tabela koja za svaku dekadsku vrednost iz skupa {0,...,
b-1}, sadrži oznaku odgovarajuće cifre sistema s osnovom b. */ FUNKCIJA b2dek ( UL bString ∈ String, // Polazni string
UL b ∈ ℕ, // Brojna osnova UL TabCif ∈ String, // Tabela oznaka cifara u ciljnom sistemu IZ Ind ∈ Boolean ← true // Indikator uspešnosti konverzije ) VRAĆA String
dekNum ∈ ℕ0 ← 0 // Numerička vrednost zadatog stringa cifara
idx ∈ ℕ // Brojač cifara polaznog stringa
dCifra ∈ ℕ0 // Dekadska vrednost cifre polaznog sistema IndC ∈ Boolean // Indikator uspešnosti konverzije cifre FUNKCIJA dvrednostCifre (
UL b ∈ ℕ, // Osnova brojnog sistema UL TabCif ∈ String, // Tabela oznaka cifara UL OznCifre ∈ String[1], // Simbol cifre IZ Ind ∈ Boolean ← false, // Indikator uspešnosti traženja
) VRAĆA ℕ0
idx ∈ ℕ0 ← 1
278. Osnove računarskih tehnologija i programiranja - priručnik za vežbe
POČETAK FUNKCIJE dvrednostCifre // Pronalaženje dekadskog ekvivalenta cifre RADI traži_dekadski_ekvivalent_cifre DOK JE idx ≤ b ∧ ¬Ind AKO JE OznCifre = TabCif[idx] TADA Ind ← true INAČE idx ← idx + 1 KRAJ AKO KRAJ RADI traži_dekadski_ekvivalent_cifre dvrednostCifre ← idx - 1 KRAJ FUNKCIJE dvrednostCifre POČETAK FUNKCIJE b2dek idx ← 1 RADI konverzija DOK JE idx ≤ length(bString) AND Ind dCifra ← dvrednostCifre(b, TabCif, bString[idx], IndC) AKO JE IndC TADA // Kumuliranje dekadske vrednosti broja dekNum ← dekNum ∗ b + dCifra idx ← idx + 1 INAČE Ind ← false // Neuspešna konverzija cifre u dekadski ekvivalent KRAJ AKO KRAJ RADI konverzija b2dek ← dekNum KRAJ FUNKCIJE b2dek
9. Algoritamski prikaz postupaka obrade podataka 279.
Algoritam 9.4.6. Transformisanje zapisa prirodnog broja iz brojnog sistema sa osnovom 2 u brojni sistem sa osnovom 16
/* Zadatak: • Transformisati zapis prirodnog broja iz brojnog sistema sa osnovom 2 u
brojni sistem sa osnovom 16. Polazne pretpostavke: • Izvršilac algoritma poznaje osnovne operatore i funkcije za manipulaciju
stringovima. • Pretpostavlja se da je ulazni string (binarni zapis) zadat korektno, na skupu
cifara {0, 1}. */ FUNKCIJA bin2hex ( UL binString ∈ String // Binarni zapis prirodnog broja ) VRAĆA String bin2hexString ∈ String ← '' // Heksadekadski ekvivalent binarne cifre POČETAK FUNKCIJE bin2hex AKO JE Moduo(length(binString), 4) = 1 TADA binString ← '000' || binString INAČE AKO JE Moduo(length(binString), 4) = 2 TADA binString ← '00' || binString INAČE AKO JE Moduo(length(binString), 4) = 3 TADA binString ← '0' || binString KRAJ AKO RADI konverzija ZA i ← 1 DO length(binString) KORAK 4 AKO JE Podstring(binString, i, 4) = '0000' TADA bin2hexString ← bin2hexString || '0' INAČE AKO JE Podstring(binString, i, 4) = '0001' TADA bin2hexString ← bin2hexString || '1' INAČE AKO JE Podstring(binString, i, 4) = '0010' TADA bin2hexString ← bin2hexString || '2' INAČE AKO JE Podstring(binString, i, 4) = '0011' TADA bin2hexString ← bin2hexString || '3' INAČE AKO JE Podstring(binString, i, 4) = '0100' TADA bin2hexString ← bin2hexString || '4' INAČE AKO JE Podstring(binString, i, 4) = '0101' TADA bin2hexString ← bin2hexString || '5' INAČE AKO JE Podstring(binString, i, 4) = '0110' TADA bin2hexString ← bin2hexString || '6' INAČE AKO JE Podstring(binString, i, 4) = '0111' TADA bin2hexString ← bin2hexString || '7' INAČE AKO JE Podstring(binString, i, 4) = '1000' TADA
280. Osnove računarskih tehnologija i programiranja - priručnik za vežbe
bin2hexString ← bin2hexString || '8' INAČE AKO JE Podstring(binString, i, 4) = '1001' TADA bin2hexString ← bin2hexString || '9' INAČE AKO JE Podstring(binString, i, 4) = '1010' TADA bin2hexString ← bin2hexString || 'A' INAČE AKO JE Podstring(binString, i, 4) = '1011' TADA bin2hexString ← bin2hexString || 'B' INAČE AKO JE Podstring(binString, i, 4) = '1100' TADA bin2hexString ← bin2hexString || 'C' INAČE AKO JE Podstring(binString, i, 4) = '1101' TADA bin2hexString ← bin2hexString || 'D' INAČE AKO JE Podstring(binString, i, 4) = '1110' TADA bin2hexString ← bin2hexString || 'E' INAČE bin2hexString ← bin2hexString || 'F' KRAJ AKO KRAJ RADI konverzija bin2hex ← bin2hexString KRAJ FUNKCIJE bin2hex
9. Algoritamski prikaz postupaka obrade podataka 281.
Algoritam 9.4.7. Transformisanje zapisa prirodnog broja iz brojnog sistema sa osnovom 16 u brojni sistem sa osnovom 2
/* Zadatak: • Transformisati zapis prirodnog broja iz brojnog sistema sa osnovom 16 u
brojni sistem sa osnovom 2. Polazne pretpostavke: • Izvršilac algoritma poznaje osnovne operatore i funkcije za manipulaciju
stringovima. • Pretpostavlja se da je ulazni string (heksadecimalni zapis broja) zadat
korektno, na skupu cifara {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F}. */ FUNKCIJA hex2bin ( UL hexString ∈ String // Heksadecimalni zapis broja ) VRAĆA String hex2binString ∈ String ← '' // Binarni ekvivalent heksadekadse cifre POČETAK FUNKCIJE hex2bin RADI konverzija ZA i ← 1 DO length(hexString) AKO JE Podstring(hexString, i, 1) = '0' TADA hex2binString ← hex2binString || '0000' INAČE AKO JE Podstring(hexString, i, 1) = '1' TADA hex2binString ← hex2binString || '0001' INAČE AKO JE Podstring(hexString, i, 1) = '2' TADA hex2binString ← hex2binString || '0010' INAČE AKO JE Podstring(hexString, i, 1) = '3' TADA hex2binString ← hex2binString || '0011' INAČE AKO JE Podstring(hexString, i, 1) = '4' TADA hex2binString ← hex2binString || '0100' INAČE AKO JE Podstring(hexString, i, 1) = '5' TADA hex2binString ← hex2binString || '0101' INAČE AKO JE Podstring(hexString, i, 1) = '6' TADA hex2binString ← hex2binString || '0110' INAČE AKO JE Podstring(hexString, i, 1) = '7' TADA hex2binString ← hex2binString || '0111' INAČE AKO JE Podstring(hexString, i, 1) = '8' TADA hex2binString ← hex2binString || '1000' INAČE AKO JE Podstring(hexString, i, 1) = '9' TADA hex2binString ← hex2binString || '1001' INAČE AKO JE Podstring(hexString, i, 1) = 'A' TADA hex2binString ← hex2binString || '1010' INAČE AKO JE Podstring(hexString, i, 1) = 'B' TADA hex2binString ← hex2binString || '1011'
282. Osnove računarskih tehnologija i programiranja - priručnik za vežbe
INAČE AKO JE Podstring(hexString, i, 1) = 'C' TADA hex2binString ← hex2binString || '1100' INAČE AKO JE Podstring(hexString, i, 1) = 'D' TADA hex2binString ← hex2binString || '1101' INAČE AKO JE Podstring(hexString, i, 1) = 'E' TADA hex2binString ← hex2binString || '1110' INAČE hex2binString ← hex2binString || '1111' KRAJ AKO KRAJ RADI konverzija hex2bin ← hex2binString KRAJ FUNKCIJE hex2bin
9. Algoritamski prikaz postupaka obrade podataka 283.
Algoritam 9.4.8. Izračunavanje unije skupova
/* Zadatak: • Izračunati uniju dva skupa. Polazne pretpostavke: • Skupovi su zadati u formi stringova. • Pretpostavlja se da u skupovima nema ponavljanja istih elemenata. */ FUNKCIJA unija ( UL skup1 ∈ String, // Skup 1. UL skup2 ∈ String // Skup 2. ) VRAĆA String postoji ∈ Boolean // Indikator postojanja elementa iz prvog skupa u drugom
j ∈ ℕ // Brojač iteracija pomUnija ∈ String ← '' // Pomoćni string za memorisanje međurezultata POČETAK FUNKCIJE unija RADI prebacivanjePrvog ZA i ← 1 DO length(skup1) pomUnija[i] ← skup1[i] KRAJ RADI prebacivanjePrvog RADI dodavanjeRazlike ZA i ← 1 DO length(skup2) postoji ← false j ← 1 RADI proveraPostojanja DOK JE ¬postoji ∧ j ≤ length(skup1) AKO JE skup2[i] =pomUnija[j] TADA postoji ← true INAČE j ← j + 1 KRAJ AKO KRAJ RADI proveraPostojanja AKO JE ¬postoji TADA pomUnija ← pomUnija || skup2[i] KRAJ AKO KRAJ RADI dodavanjeRazlike unija ← pomUnija KRAJ FUNKCIJE unija
284. Osnove računarskih tehnologija i programiranja - priručnik za vežbe
Algoritam 9.4.9. Izračunavanje preseka skupova
/* Zadatak: • Izračunati presek dva skupa. Polazne pretpostavke: • Skupovi su zadati u formi stringova. • Pretpostavlja se da u skupovima nema ponavljanja istih elemenata. */ FUNKCIJA presek ( UL skup1 ∈ String, // Skup 1. UL skup2 ∈ String // Skup 2. ) VRAĆA String postoji ∈ Boolean // Indikator postojanja elementa iz prvog skupa u drugom
j ∈ ℕ // Brojač iteracije pomPresek ∈ String ← '' // Pomoćni string za memorisanje međurezultata POČETAK FUNKCIJE presek RADI dodavanje ZA i ← 1 DO length(skup1) postoji ← false j ← 1 RADI proveraPostojanja DOK JE ¬postoji ∧ j ≤ length(skup2) AKO JE skup2[j] = skup1[i] TADA postoji ← true INAČE j ← j + 1 KRAJ AKO KRAJ RADI proveraPostojanja AKO JE postoji TADA pomPresek ← pomPresek || skup1[i] KRAJ AKO KRAJ RADI dodavanje presek ← pomPresek KRAJ FUNKCIJE presek
9. Algoritamski prikaz postupaka obrade podataka 285.
Algoritam 9.4.10. Izračunavanje razlike skupova
/* Zadatak: • Izračunati razliku dva skupa. Polazne pretpostavke: • Skupovi su zadati u formi stringova. • Pretpostavlja se da u skupovima nema ponavljanja istih elemenata. */ FUNKCIJA razlika ( UL skup1 ∈ String, // Skup 1. UL skup2 ∈ String // Skup 2. ) VRAĆA String
j ∈ ℕ // Indeks iteracije postoji ∈ Boolean // Indikator postojanja elementa iz prvog skupa u drugom pomRazlika ∈ String ←'' // Pomoćni string za memorisanje međurezultata POČETAK FUNKCIJE razlika RADI dodavanjeRazlike ZA i ← 1 DO length(skup1) postoji ← false j ← 1 RADI proveraPostojanja DOK JE ¬postoji ∧ j ≤ length(skup2) AKO JE skup2[j] = skup1[i] TADA postoji ← true INAČE j ← j + 1 KRAJ AKO KRAJ RADI proveraPostojanja AKO JE ¬postoji TADA pomRazlika ← pomRazlika || skup1[i] KRAJ AKO KRAJ RADI dodavanjeRazlike razlika ← pomRazlika KRAJ FUNKCIJE razlika
286. Osnove računarskih tehnologija i programiranja - priručnik za vežbe
9.5. Numerički problemi
Algoritam 9.5.1. Izračunavanje vrednosti eksponencijalne fukcije (exp)
/* Zadatak: • Izračunati vrednost eksponencijalne funkcije f(x) = ex, do zadate tačnosti,
izračunavanjem parcijalne sume odgovarajućeg reda. Polazne pretpostavke: • Izvršilac algoritma poznaje osnovne aritmetičke operacije. • Poznavanje formule za izračunavanje parcijalne sume reda funkcije
∑∝
=
=0 !k
kx
kxe , za -∞ < x < ∞.
*/
TIP RealPozit_Tip = {d ∈ ℝ | d ≥ 0} FUNKCIJA exp (
UL x ∈ ℝ, // Eksponent (argument) funkcije UL eps ∈ RealPozit_Tip // Maksimalna greška (tačnost) izračunavanja ) VRAĆA RealPozit_Tip
df ∈ ℝ ← 1 // Doprinos vrednosti funkcije u jednoj iteraciji
f ∈ ℝ ← 1 // Trenutna vrednost funkcije
k ∈ ℝ ← 0 // Indeks (redni broj) iteracije POČETAK FUNKCIJE exp RADI računajVrednostFunkcije k ← k + 1 df ← df ∗ x / k f ← f + df KRAJ RADI računajVrednostFunkcije KAD BUDE abs(df) ≤ eps exp ← f KRAJ FUNKCIJE exp
9. Algoritamski prikaz postupaka obrade podataka 287.
Algoritam 9.5.2. Izračunavanje vrednosti funkcije prirodnog logaritma (ln)
/* Zadatak: • Izračunati vrednost funkcije prirodnog logaritma f(x) = ln(x), za 0 < x ≤ 2, do
zadate tačnosti, izračunavanjem parcijalne sume odgovarajućeg reda. Polazne pretpostavke: • Izvršilac algoritma poznaje osnovne aritmetičke operacije. • Poznavanje formule za izračunavanje parcijalne sume reda funkcije
∑∝
=
+−=+1
1)1()1(k
kk
kxxln , za -1 < x ≤ 1.
*/
TIP RealPozit_Tip = {d ∈ ℝ | d ≥ 0}
TIP ArgLn_Tip = {d ∈ ℝ | 0 < d ≤ 2} FUNKCIJA ln (
UL x ∈ ArgLn_Tip, // Argument funkcije UL eps ∈ RealPozit_Tip // Maksimalna greška (tačnost) izračunavanja
) VRAĆA ℝ
arg ∈ ℝ // Pomoćni argument za izračunavanje vrednosti
k ∈ ℝ ← 0 // Indeks (redni broj) iteracije
f ∈ ℝ ← 0 // Trenutna vrednost funkcije
df ∈ ℝ ← 0 // Doprinos vrednosti funkcije u jednoj iteraciji
brojilac ∈ ℝ ← 1 // Vrednost brojioca doprinosa funkcije - xk
znak ∈ {-1, 1} ← -1 // Znak doprinosa funkcije POČETAK FUNKCIJE ln arg ← x – 1 // Svođenje argumenta na oblik koji odgovara izrazu ln(x+1) RADI računajVrednostFunkcije k ← k + 1 znak ← -znak brojilac ← brojilac ∗ arg df ← brojilac / k f ← f + znak ∗ df KRAJ RADI računajVrednostFunkcije KAD BUDE abs(df) ≤ eps ln ← f KRAJ FUNKCIJE ln
288. Osnove računarskih tehnologija i programiranja - priručnik za vežbe
Algoritam 9.5.3. Izračunavanje vrednosti sinusne funkcije (sin)
/* Zadatak: • Izračunati vrednost sinusne funkcije f(x) = sin(x), za x zadat u radijanima,
do zadate tačnosti, izračunavanjem parcijalne sume odgovarajućeg reda. Polazne pretpostavke: • Izvršilac algoritma poznaje osnovne aritmetičke operacije. • Poznavanje formule za izračunavanje parcijalne sume reda funkcije
∑∝
=
++
+−=
0
121
)!12()1()(
k
kk
kxxins , za -∞ < x < ∞.
*/
TIP RealPozit_Tip = {d ∈ ℝ | d ≥ 0}
TIP TrigonFun_Tip = {d ∈ ℝ | -1 ≤ d ≤ 1} FUNKCIJA sin (
UL x ∈ ℝ, // Argument funkcije, zadat u radijanima UL eps ∈ RealPozit_Tip // Maksimalna greška (tačnost) izračunavanja ) VRAĆA TrigonFun_Tip
k ∈ ℝ ← 0 // Indeks (redni broj) iteracije
f ∈ ℝ ← -x // Trenutna vrednost funkcije
df ∈ ℝ ← x // Doprinos vrednosti funkcije u jednoj iteraciji znak ∈ {-1, 1} ← -1 // Znak doprinosa funkcije POČETAK FUNKCIJE sin RADI računajVrednostFje k ← k + 2 znak ← -znak df ← df ∗ x ∗ x / (k ∗ (k+1)) f ← f + znak ∗ df KRAJ RADI računajVrednostFje KAD BUDE abs(df) ≤ eps ∧ abs(f) ≤ 1 sin ← f KRAJ FUNKCIJE sin
9. Algoritamski prikaz postupaka obrade podataka 289.
Algoritam 9.5.4. Izračunavanje nule funkcije metodom sečice
/* Zadatak: • Izračunati nulu funkcije f(x) na zadatom intervalu [x1, x2], do zadate
tačnosti, metodom sečice. Prethodno, proveriti da li su granice intervala [x1, x2] korektno zadate u smislu zadovoljenja uslova sgn(f(x1)) ≠ sgn(f(x2)).
Polazne pretpostavke: • Izvršilac algoritma poznaje osnovne aritmetičke operacije. • Izvršilac algoritma poznaje funkciju određivanja znaka broja znak(arg) i
funkciju abs(x). • Izvršilac algoritma poznaje deklaraciju tipa funkcije. • Pretpostavlja se da je definisana funkcija za koju se računa nula. • Poznata je formula za definisanje prave kroz dve tačke sa zadatim
koordinatama, odnosno formula za izračunavanje vrednosti argumenta u tački u kojoj prava preseca x-osu.
*/
TIP RealPozit_Tip = {d ∈ ℝ | d ≥ 0}
TIP Fun1Arg_Tip = FUNKCIJA ( UL x ∈ ℝ ) VRAĆA ℝ FUNKCIJA nulaSečica (
UL x1 ∈ ℝ, // Donja granica zadatog intervala UL x2 ∈ ℝ, // Gornja granica zadatog intervala UL f ∈ Fun1Arg_Tip, // Funkcija čija se nula izračunava UL eps ∈ RealPozit_Tip // Maksimalna greška (tačnost)
) VRAĆA ℝ
y1 ∈ ℝ // Vrednost funkcije u tački donje granice: f(x1)
y2 ∈ ℝ // Vrednost funkcije u tački gornje granice: f(x2)
x ∈ ℝ // Vrednost argumenta u kojem sečica preseca x-osu
y ∈ ℝ // Vrednost funkcije u tački u kojoj sečica preseca x-osu POČETAK FUNKCIJE nulaSečica y1 ← f(x1) y2 ← f(x2)
290. Osnove računarskih tehnologija i programiranja - priručnik za vežbe
AKO JE znak(y1) ≠ znak(y2) TADA // Provera korektnosti intervala RADI traženjeNule // Koordinata u kojoj sečica preseca x osu x ← x1 – y1 ∗ (x2 – x1) / (y2 – y1) y ← f(x) AKO JE (znak(y) = znak(y2)) TADA // Interval se sužava s gornje strane x2 ← x y2 ← y INAČE // interval se sužava s donje strane x1 ← x y1 ← y KRAJ AKO KRAJ RADI traženjeNule KAD BUDE abs(f(x)) ≤ eps nulaSečica ← x INAČE // Interval za izolovanje nule funkcije nije korektno zadat nulaSečica ← Null KRAJ AKO KRAJ FUNKCIJE nulaSečica
9. Algoritamski prikaz postupaka obrade podataka 291.
Algoritam 9.5.5. Izračunavanje vrednosti funkcije metodom linearne interpolacije
/* Zadatak: • Izračunati vrednost funkcije f(x) za zadatu vrednost argumenta x, metodom
linearne interpolacije, na osnovu prethodno zadatog skupa vrednosti funkcije, koji je uređen u rastućem redosledu argumenata.
Polazne pretpostavke: • Izvršilac algoritma poznaje osnovne aritmetičke operacije. • Poznata je formula za definisanje prave kroz dve tačke sa zadatim
koordinatama. */
TIP Slog = Record ( x ∈ ℝ, // Vrednost argumenta funkcije
f ∈ ℝ // Vrednost funkcije za argument x ) // Deklaracija tipa sloga za jednu vrednost f-je
KONSTANTA Q ∈ ℕ ← 100 // Maksimalna dužina niza TIP NizVredFun_Tip = Array[1..Q] of Slog // Tip niza vrednosti funkcije FUNKCIJA interpolacija ( UL nizVredf ∈ NizVredFun_Tip, // Niz vrednosti funkcije UL N ∈ {0,..., Q}, // Aktuelna dužina niza
UL x ∈ ℝ // Argument za koji se interpolira
) VRAĆA ℝ
x1 ∈ ℝ ← Null // Donja granica intervala interpolacije x2 ∈ ℝ ← Null // Gornja granica intervala interpolacije y1 ∈ ℝ ← Null // Vrednost funkcije u donjoj granici y2 ∈ ℝ ← Null // Vrednost funkcije u gornjoj granici Indeks ∈ {1,..., N+1} ← 1 // Indeks traženog intervala interpolacije
POČETAK FUNKCIJE interpolacija RADI tražiInterval DOK JE Indeks ≤ N ∧ x > nizVredf[Indeks].x Indeks ← Indeks + 1 // Traženje se nastavlja na sledećem elementu KRAJ RADI tražiInterval // Linearno traženje intervala za interpolaciju AKO JE Indeks > 1 ∧ Indeks ≤ N TADA x1 ← nizVredf[Indeks-1].x x2 ← nizVredf[Indeks].x y1 ← nizVredf[Indeks-1].f y2 ← nizVredf[Indeks].f interpolacija ← y1 + (x – x1) ∗ (y2 – y1) / (x2 – x1) INAČE // Argument izlazi izvan opsega intervala za interpolaciju interpolacija ← Null KRAJ AKO KRAJ FUNKCIJE interpolacija
292. Osnove računarskih tehnologija i programiranja - priručnik za vežbe
Algoritam 9.5.6. Izračunavanje integrala funkcije metodom pravougaonika
/* Zadatak: • Izračunati vrednost integrala funkcije na zadatom intervalu, metodom
pravougaonika. Polazne pretpostavke: • Izvršilac algoritma poznaje osnovne aritmetičke operacije. • Izvršilac algoritma poznaje deklaraciju tipa funkcije. • Pretpostavlja se da je definisana funkcija za koju se računa nula. */
TIP RealPozit_Tip = {d ∈ ℝ | d ≥ 0}
TIP Fun1Arg_Tip = FUNKCIJA ( UL x ∈ ℝ ) VRAĆA ℝ FUNKCIJA integral ( UL f ∈ Fun1Arg_Tip, // Zadata funkcija
UL x0 ∈ ℝ, // Donja granica intervala UL x1 ∈ ℝ // Gornja granica intervala ) VRAĆA ℝ // Korak izračunavanja - implicira tačnost KONSTANTA dx ∈ RealPozit_Tip ← 0.01
integ ∈ ℝ ← 0 // Tekuća vrednost integrala POČETAK FUNKCIJE integral RADI računajIntegral DOK JE x0 < x1 integ ← integ + dx ∗ f(x0) // Dodaje se površina tekućeg pravougaonika x0 ← x0 + dx KRAJ RADI računajIntegral integral ← integ KRAJ FUNKCIJE integral