











Studirajte zahvaljujući brojnim resursima koji su dostupni na Docsity-u
Zaradite bodove pomažući drugim studentima ili ih kupite uz Premium plan
Pripremite ispite
Studirajte zahvaljujući brojnim resursima koji su dostupni na Docsity-u
Nabavite poene za preuzimanje
Zaradite bodove pomažući drugim studentima ili ih kupite uz Premium plan
Jezički prevodioci, kao primer opšteg softvera, obezbeđuju da se tekst programa zapisanog na nekom programskom jeziku prevede na mašinski.
Tipologija: Šeme i konceptualne mape
1 / 19
Ova stranica nije vidljiva u pregledu
Ne propustite važne delove!












Cvetana Krstev
Jezički prevodioci, kao primer opšteg softvera, obezbeđuju da se tekst programa zapisanog na nekom programskom jeziku prevede na mašinski jezik (tj. na takve instrukcije koje određeni procesor može da izvrši). Programom se zapisuju algoritmi koji predstavljaju skup dobro definisanih pravila ili instrukcija za rešavanje nekog problema (npr. za obavljanje izračunavanja), u konačnom broju koraka. Izražavanje algoritma u formalnoj notaciji je jedan od glavnih zadataka programa. Ali, algoritam zapisan u nekom programskom jeziku, kao što je paskal, ne može se u tom obliku i izvršiti: neophodno je prevesti ga na skup instrukcija koje su definisane za određeni procesor. Te instrukcije su oblika „dopremi iz memorije u akumulator podatak sa određene adrese” ili „dodaj na sadržaj akumulatora sadržaj sa određene memorijske lokacije”, a izražene su kao sekvencije bitova — u obliku nepodesnom za ljudsko kodiranje i korišćenje. Odnos između jednog algoritma i njegovog zapisa na mašinskom jeziku prolazi sledeće dve faze: u prvoj, programer izražava algoritam u određenom programskom jeziku, a u drugoj ga prevodi na mašinski jezik, koristeći odgovarajući jezički prevodilac. Programski jezici mogu biti različitog nivoa. Tradicionalno se razlikuju četiri osnovna nivoa programskih jezika.
instrukciju sabiranja ili MOV (od engl. move ) za premeštanje podataka između unutrašnje memorije računara i registara u centralnom procesoru. Osim toga, programer može da dodeli simbolička imena memorijskim adresama na kojima se nalaze podaci sa kojima program radi kao i adresama na kojima se nalaze instrukcije samog programa. Asemblerski jezici u principu zahtevaju jedan red asemblerskog koda za jednu mašinsku instrukciju. Specijalni jezički
procesori, koji se nazivaju asembleri , prevode program zapisan na asemblerskom jeziku u mašinski jezik.
Algoritam predstavlja specifikaciju koraka koje treba slediti da bi se neki problem rešio u konačnom broju koraka. Algoritmi su veoma bliski računarskim programima, i ponekad se s njima poistovećuju. Algoritmom se, međutim, mogu opisati mnogi postupci koji se nikada neće izvršavati putem računara. Tipičan primer su kuvarski recepti. Svaki kuvarski recept počinje opisom ulaznih sastojaka, zatim sledi precizan opis upotrebe tih sastojaka kao i uslova za završetak operacije kuvanja. Na primer, recept za pripremu voćnog kolača (koji se na francuskom zove clafoutis ) glasi ovako:
Potrebna su 4 sveža jajeta, malo soli, 1 paket vanilin-šećera, pola čaše kristal-šećera, 4 kašike brašna (najbolje oštrog), pola čaše mleka, pola čaše kisele pavlake, 30gr putera i sezonsko ili smrznuto voće, najbolje crne trešnje, višnje, kajsije, kruške a može i mešano. Vatrostalnu posudu koja ide u rernu posutu kristal-šećerom i u nju naređati voće da prekrije celo dno posude. Mikserom umutiti cela jaja sa malo soli. Dodati vanilin-šećer i kristal-šećer i dobro umutiti. Polako dodavati brašno i dalje
U slučaju brojeva m = 252 i n = 105 i broja k = 21, to znači da ako podelimo m sa n , možemo rezultat predstaviti u obliku m = Q ∙ n + r , tj. 252 = 2 ∙ 105 + 42, a broj 21 takođe deli bez ostatka broj 42 jer je 42 = 2 ∙ 21. Ovaj algoritam je mnogo efikasniji od “naivnog” algoritma jer u najvećem broju slučajeva u mnogo manjem broju koraka dolazi do rešenja. Posmatrajmo slučaj brojeva m =25 i n =15. Sledeći naivan algoritam postupili bismo na sledeći način:
Nzd 15 14 13 12 11 10 9 8 7 6 5 ost. m/nzd 10 11 12 1 3 5 7 1 4 1 0 ost. n/nzd 0 1 2 3 4 5 6 7 1 3 0
Do rešenja nzd =5 dolazi se u 11 koraka, pri čemu se u svakom koraku obavljaju dva deljenja. Ako se primeni Euklidov algoritam za isti par brojeva m =25 i n =15 do rešenja se dolazi u samo 3 koraka.
m 25 m←n 15 10 n 15 n←r 10 5 r 10 5 0
Poznato je dosta takvih algoritama nastalih daleko pre nastanka računara. Pomenimo, na primer, algoritam poznat pod nazivom Eratostenovo sito koji precizira efikasan postupak za pronalaženje prostih brojeva. Eratosten je grčki matematičar, geograf i astronom iz III veka pre nove ere. Poznat je i algoritam koji se pripisuje napuljskom astronomu Aloysius Lilius i nemačkom jezuitskom matematičaru Christopher Clavious a koji potiče s kraja XVI veka. Njihov postupak većina zapadnih crkava koristi za određivanje Uskrsa za svaku godinu posle 1582. Uskrs bi trebalo da bude „prva nedelja posle prvog punog meseca koji dolazi posle 21. marta”. Ima mnogih indicija da je jedina važnija upotreba aritmetike u srednjem veku u Evropi bila računanje datuma Uskrsa. Prema tome, po gregorijanskom kalendaru Uskrs može da bude najranije 22. marta, a najkasnije 25. aprila, odnosno po julijanskom kalendaru najranije 3. aprila, a najkasnije 8. maja (što je bilo 1983. godien). Za precizan zapis algoritma često se koristi neka vrsta pseudo- formalnog jezika koji obezbeđuje utvrđivanje korektnosti algoritma i njegovo prevođenje u konkretan programski jezik. Pod korektnošću algoritma se podrazumeva da algoritam za precizno zadate ulazne vrednosti u konačnom broju koraka daje precizno specifikovan izlazni rezultat. Algoritam za
spravljanje voćnog kolača bi se mogao zapisati koristeći ovaj pseudo-jezik na sledeći način:
Pripremi materijal Izaberi voće Poređaj voće u posudu Umuti jaja i so Dodaj vanilin-šećer i umuti Dodaj kristal-šećer i umuti Dodaj brašno i umuti Dodaj mleko i umuti Dodaj pavlaku i umuti Dodaj puter i umuti Ponavljaj peci u rerni na 180-200º sve dok ne požuti i ne stegne se i ne zamiriše
Koristeći sličan pseudo-formalni specifikacioni jezik, Euklidov algoritam bi se mogao zapisati na sledeći način:
m i n su celi brojevi r je ostatak pri deljenju m sa n Sve dok je r različito od 0 ponavljaj odavde m dobija vrednost od n n dobija vrednost od r r je ostatak pri deljenju m sa n do ovde Najveći zajednički delilac nzd je n
Zadaci
Zadatak 1. Izračunati najmanji zajednički sadržalac (NZS) dva broja. To je najmanji broj koji se može podeliti bez ostatka sa oba data broja.
Prvi broj je b Drugi broj je b m dobija vrednost b n dobija vrednost b
(a) f je potencijalni faktor broja e. Ako se u toku rada algoritma ustanovi da je NZD brojeva e i f različit od 1, onda to znači da broj f deli broj e bez ostatka pa prema tome broj e nije prost broj. (b) Zašto se u petlji broj f (potencijalni faktor) uvećava za 2? Na početku se ispituje deljivost broja e s brojem 2 i ako se ustanovi da broj 2 ne deli broj e , onda to znači da e nije paran broj pa deljivost sa drugim parnim brojevima više ne treba ispitivati. (c) Zašto se ispituju samo faktori f koji su manji ili jednaki kvadratnom korenu iz e? Ako broj e ima neki faktor f 1 veći od √e onda je e = f 1 * f 2 pri čemu je f 2 sigurno faktor manji od √e. Uzmimo za primer 144 = 12
f =2 m ← 41, n ← 2, r ← 1 ≠ 0 m ← 2, n ← 1, r = 0, kraj, NZD ← 1 f =3 m ← 41, n ← 3, r ← 2 ≠ 0 m ← 3, n ← 2, r ← 1 ≠ 0 m ← 2, n ← 1, r = 0, kraj, NZD ← 1 f =5 m ← 41, n ← 5, r ← 1 ≠ 0 m ← 5, n ← 1, r = 0, kraj, NZD ← 1
NZD (41, f ) = 1 → 41 je prost broj
Da bi se neki algoritam mogao izvršavati na računaru potrebno je da on bude zapisan na nekom programskom jeziku koji određeni računar „razume“. Programski jezik je notacija za precizan opis računarskih programa ili algoritama. Programski jezici su veštački jezici, u kojima su sintaksa i semantika strogo definisani. Dakle, svrsishodni su ali ne dozvoljavaju slobodu izražavanja koja je svojstvena prirodnom jeziku. Da bi programiranje bilo moguće, potrebno je, takođe, predstaviti podatke s kojima program radi na računaru prihvatljiv način. Ovaj drugi zahtev odbacuje algoritam za pripremu voćnog kolača kao računarski neprimenljiv jer se njegovi „podaci“ — jaja, so, šećer, itd. — ne mogu računarski predstaviti. Euklidov algoritam je, pak, vrlo pogodan za zapisivanje u obliku programa i izvršavanje na računaru. Algoritmi se za potrebe izvršavanja na računaru zapisuju u obliku programa na nekom programskom jeziku. Da bi zapisivanje algoritama na programskom jeziku bilo moguće programski jezik treba da obezbeđuje rad sa osnovnim tipovima podataka kao i strukture podataka i kontrolne strukture. Pod osnovnim tipovima podataka podrazumevaju se celobrojni, realni, karakterski i logički (ili bulovski) tip. O načinu predstavljanja ovih osnovnih tipova, osim logičkog, bilo je već reči. Logički tip podatka je jednostavan za predstavljanje jer je potrebno predstaviti samo dve vrednosti: tačno i netačno. Stoga se logički tip obično predstavlja u jednoj memorijskoj lokaciji tako da recimo binarna vrednost 0 označava netačno a binarna vrednost 1 tačno (ili svaka vrednost koja nije 0 tačno). U višim programskim jezicima, kakvi su C, paskal i Fortran, a takav je i VBA, programer može da dodeli ime nekim memorijskim lokacijama i istovremeno da deklariše kakav tip podatka će u njima biti zabeležen. Ovde je bitno da se uoče dve stvari: programer dodeljuje ime memorijskim lokacijama a pri tome uopšte ne mora znati, i najčešće to ni ne zna, kojim memorijskim lokacijama, to jest kojim adresama, su ta imena pridružena. Osim toga, u imenovanoj memorijskoj lokaciji se uvek nalazi sekvencija 0 i 1, i tek joj programska deklaracija daje određenu interpretaciju. Ovako imenovane memorijske lokacije u koje se smeštaju vrednosti određenog tipa koje se mogu i menjati u toku izvršavanja programa nazivaju se promenljive. U donjoj tabeli prikazani su osnovni tipovi podataka, kako se deklarišu promenljive određenog tipa, a kako se zapisuju konstantne vrednosti tog tipa. Svi primeri u ovom priručniku odnosiće se na programski jezik VBA pomoću koga se mogu zapisivati makroi u okviru aplikacija Word , Excel i PowerPoint.
Operatori Aritmetički operatori (celi i realni brojevi)
VBA
7 \ 3 = 2
Mod (ostatak pri celobrojnom deljenju)
7 Mod 3 = 1
/ (realno deljenje) 7 /^3 =^ 2.33333... ^ (stepenovanje) 2 ^^4 =^16 Relacijski operatori (operatori poređenja)
VBA
= A^ =^ B <> (nejednakost) A^ <>^ B < A^ <^ B <= A^ <=^ B
A^ >^ B = A^ >=^ B Logički operatori VBA And (konjunkcija) (godina^ Mod^4 =^ 0)^ And^ (godina^ Mod^100 <> 0) Or (disjunkcija) (godina^ Mod^400 =^ 0)^ _ Or _ ((godina Mod 4 = 0) _ And _ (godina Mod 100 <> 0)) (Ceo uslov se može zapisati u jednoj liniji) Not (negacija) Not^ (godina^ mod^4 =^ 0)^ '^ godina^ mod^4 <> 0 Tekstuelni operatori VBA & (konkatenacija) "Pera"^ &^ "^ i^ "^ &^ "Mika"^ '^ "Pera^ i^ Mika"
Operacije i relacije definisane u nekom jeziku mogu se kombinovati u složene izraze. Mogu se koristiti i zagrade, na sličan način kako je to uobičajeno u matematici da bi se prevazišli prioriteti operacija. Operacije sabiranja i oduzimanja su nižeg prioriteta od operacija množenja i deljenja pa stoga, na primer, izrazi 32+5 i 3(2+5) nemaju istu vrednost (vrednost prvog je 11 a drugog 21). Među logičkim operacijama, kao i među relacijama su prioriteti izvršavanja takođe definisani, a prioriteti koji važe u programskom jeziku VBA su dati u donjoj tabeli.
Prioritet operatora
Prioritet operatora (od višeg ka nižem) ^ (stepenovanje)
& (konkatenacija) = < <= > >= <> And Or Not
Aritmetički izrazi se postupno definišu na sledeći način:
E 1 + E 2 (zbir) E 1 - E 2 (razlika) E 1 * E 2 (proizvod) E 1 \ E 2 (količnik pri celobrojnom deljenju) E 1 Mod E 2 (ostatak pri celobrojnom deljenju) E 1 / E 2 (količnik pri deljenju realnih brojeva) E 1 ^ E 2 (stepenovanje) (E 1 ) (izraz u zagradama) +E 1 (potvrda znaka) -E 1 (promena znaka)
takođe aritmetički izrazi
Gledano s leva nadesno, najvišeg prioriteta je ostatak pri celobrojnom deljenjenju 2 + 1 + 0 Gledano s leva nadesno, najvišeg prioriteta je sabiranje 3 + 0 Gledano s leva nadesno, najvišeg prioriteta je sabiranje 3 Naredba dodele n ← 3
Primer. Razmotriti sledeći program za razmenu vrednosti dve promenljive i utvrditi zašto sledeće rešenje nije dobro. Dim a As Integer, b As Integer a = 5 b = 7 a = b ' a ← 7 b = a ' b ← 7
Ispravno rešenje bi glasilo: Dim a, As Integer, b As Integer, p As Integer a = 5 b = 7 p = b ' p ← 7 b = a ' b ← 5 a = p ' a ← 7
Primeri
y = (x\100)*10 + x Mod 10 ’ y ← 27 * 10 + 1 => y ← 271
Neka su E 1 i E 2 aritmetički izrazi (ili neka su E 1 i E 2 karakterski izrazi). Tada su relacijski izrazi i:
E 1 = E 2 (upoređivanje da li su vrednosti dva aritmetička izraza jednake) E 1 <> E 2 (upoređivanje da li su vrednosti dva aritmetička izraza različite) E 1 < E 2 (upoređivanje da li je vrednost prvog aritmetičkog izraza manja od vrednosti drugog) E 1 <= E 2 (upoređivanje da li je vrednost prvog aritmetičkog izraza manja ili jednaka vrednosti drugog)
Primer
Sastaviti logički izraz koji određuje da li je neka godina prestupna. Godina je prestupna ako je deljiva sa 4, ali godine deljive sa 100 nisu prestupne, s izuzetkom godina deljivih sa 400 koje jesu prestupne. (g Mod 400 = 0) Or ((g Mod 4 = 0) And (g Mod 100 <>0))
Na primer, za godinu 2012 ovaj izraz se računa na sledeći način: (g Mod 400 = 0) Or ((g Mod 4 = 0) And (g Mod 100 <>0)) (12 = 0) Or ((g Mod 4 = 0) And (g Mod 100 <>0)) false Or ((g Mod 4 = 0) And (g Mod 100 <>0)) false Or ((0 = 0) And (g Mod 100 <>0)) false Or (true And (g Mod 100 <>0)) false Or (true And (12 <>0)) false Or (true And true) false Or true true
Zadaci
Za Z = 5, X=2 i Y=1, dali dobija vrednost False
Za Z = 12, X=5 i Y=7, dali dobija vrednost True
vrednost false. Ovaj deo programa može da koristi pomoćne promenljive (ne treba ispisivati deklaracije promenljivih). x = 288 c1 = x Mod 10 ' c1 = 8 c2 = (x \ 10) Mod 10 ' c2 = 28 Mod 10 = 8 dane = (c1=c2) ' dane = (8 = 8) = true
Većina programskih jezika dozvoljava da binarnim i relacijskim operatorima budu povezane i vrednosti različitog tipa. Tako se, na primer, binarna operacija sabiranja može primeniti na jednu celobrojnu i jednu realnu vrednost. Međutim, da bi se operacija izvršila celobrojna vrednost se pretvara u realnu, što znači da se binarna vrednost iz oblika potpunog komplementa pretvara u oblik pokretnog zareza. O ovom pretvaranju se stara jezički procesor i programer o tome ne mora da vodi računa. Rezultat operacije je realna vrednost. Ovo važi za sve binarne operacije i za sve relacije. Kombinovanje brojčanih i karakterskih tipova aritmetičkim operatorima nije dozvoljeno, osim ako karakterska niska nije takva da se može tumačiti kao brojčana konstanta. Kombinovanje brojčanih i karakterskih tipova karakterskim operatorom je dozvoljeno i rezultat je uvek karakterska niska, pri čemu se brojčana vrednost pretvara u odgovarajući zapis. Prilikom naredbe dodele, VBA pokušava da konvertuje tip izraza sa desne strane u tip promenljive sa leve strane znaka jednakosti.
Primer. Kako će se u programskom jeziku VBA izračunati vrednost izraza: 1.2+17 Mod 6\2+ Vrednost izraza se računa s leva u desno, s tim što se operacije višeg prioriteta izračunavaju pre onih koje su nižeg prioriteta: 1.2 +17 Mod 6\2+4 ‘ najvišeg prioriteta je celobrojno deljenje 1.2 +17 Mod 3 +4 ‘ najvišeg prioriteta je ostatak pri deljenju 1.2 + 2 +4 ‘ pre sabiranja treba izvršiti konverziju 1.2 + 2.0 + 4 3.2 + 4 ‘ pre sabiranja treba izvršiti konverziju 3.2 + 4.
Pravila o konverziji tipova i razne primere daje sledeći programski odlomak:
Dim ix As Integer, ry As Double, s As String 'operandi Dim iz As Integer, iv As Integer, rw As Double, s2 As String 'rezultati Dim poruka As String ix = 5 'inicijalizacija ry = 4.3 'inicijalizacija s = "123" 'inicijalizacija
j = i + x + s dali = (j = 10) Kako se izračunava iskaz: j = i + x + s j = 12 + 5.3 + "-7" ' prvo sabiranje, potrebna konverzija j = 12.0 + 5.3 + "-7" j = 17.3 + "-7" ' drugo sabiranje, potrebna konverzija j = 17.3 + (-7.0) ' potrebna konverzija j = 10.3 ' dodela, potrebna konverzija j <- 10 dali <- true