Professional Documents
Culture Documents
Pascal
Pascal
AMEL HODI
Travnik, 2014
SADRAJ
1. UVOD U TIPOVE PODATAKA..................................................................................3
2. TIPOVI PODATAKA....................................................................................................4
2.1. Statika i dinamika tipizacija................................................................................5
2.2. Koncept slabih tipova.............................................................................................6
2.3. Koncept jakih tipova podataka...............................................................................7
2.4. Ekvivalentnost tipova.............................................................................................8
3. STANDARDNI TIPOVI PODATAKA U PASCAL-U...............................................10
3.1. Cjelobrojni tip (Integer)........................................................................................10
3.2. Tip realnih brojeva (Real).....................................................................................10
3.3. Znakovni tip podataka (Char)...............................................................................11
3.4. Diskretni tipovi podataka u programskim jezicima..............................................11
3.5. Nabrojivi tipovi u Pascal-u...................................................................................12
3.6. Podintervalni tipovi...............................................................................................12
3.7. Anonimni tipovi....................................................................................................12
4. ZAKLJUAK..............................................................................................................13
LITERATURA................................................................................................................14
2. TIPOVI PODATAKA
Klasifikacija tipova podataka:
Tipovi podataka su podjeljeni u dvije osnovne grupe: statiki tipovi i dinamiki tipovi.
Pod statikim tipovima (ili tipovima sa statikom strukturom podrazumjevamo tipove
podataka kod kojih je unaprijed i fiksno definisana unutranja struktura svakog podatka,
a i veliina (tj. memorijska zapremina) fiksno se definie prije (ili u vrijeme)
izvravanja programa koji koristi podatke statikog tipa.
Statiki tipovi podataka obuhvataju skalarne i strukturirane podatke. Pod skalarnim
tipovima podrazumjevamo najprostije tipove podataka ije su vrijednosti skalari,
odnosno takve veliine koje se tretiraju kao elementarne cjeline i za koje nema potrebe
da se dalje razlau na komponente. U tom smislu realne i kompleksne brojeve tretiramo
kao skalare u svim programskim jezicima koji ih tretiraju kao elementarne cjeline (neki
jezici nemaju tu mogunost pa se tada kompleksni brojevi tretiraju kao struktura koja se
razlae na realni i imaginarni dio; na slian nain mogao bi se realni broj razloiti na
normalizovanu mantisu i eksponent). Pod strukturiranim tipovima podataka
podrazumjevamo sve sloene tipove podataka koji se realizuju povezivanjem nekih
elementarnih podataka u precizno definisanu strukturu. Kompozitna vrijednost ili
struktura podataka (data structure) jeste vrijednost koja je komponovana iz
jednostavnijih vrijednosti. Kompozitni tip jeste tip ije su vrijednosti kompozitne.
Programski jezici podravaju mnotvo kompozitnih vrijednosti: strukture, slogove,
3
nizove, algebarske tipove, objekte, unije, stringove, liste, stabla, sekvencijalni fajlove,
direktni fajlovi, relacije, itd.
Skalarni tipovi podataka mogu biti linearni ureeni ili linearni neureeni. Linearno
ureeni tipovi podataka su tipovi kod kojih se vrijednosti osnovnog skupa T
preslikavaju na jedan interval iz niza cijelih brojeva, tj. za svaki podatak xT zna se
redni borj podatka. Stoga svaki podatak izuzem poetnog ima svog prethodnika u nizu, i
slino tome, svaki podatak izuzev krajnjeg ima svog sljedbenika u nizu.
Pod dinamikim tipovima podataka podrazumjevamo tipove podataka kod kojih se
veliina i/ili struktura podataka slobodno mijenja u toku obrade. Kod dinamikih tipova
sa promjenljivom veliinom podrazumjevamo da je struktura podataka fiksna, ali se
njihova veliina dinamiki mijenja tokom obrade tako da se saglasno tome dinamiki
mijenjaju i memorijski zahtjevi. Na primjer, dopisivanjem novih zapisa u sekvencijalnu
datoteku veliina datoteke raste u neizmjenjenu strukturu. Kod dinamikih tipova sa
promjenljivom strukturom unaprijed je fiksno definisan jedino princip po kome se
formira struktura podataka dok se sama kontkretna struktura i koliina podataka u
memoriji slobodno dinamiki mijenjaju.
2.1. Statika i dinamika tipizacija
Prije izvrenja bilo koje operacije, moraju se provjeriti tipovi operanata da bi se
sprijeila greka u tipu podataka. Na primjer, prije izvrenja operacije mnoenja dva
cijela broja, oba operanta moraju biti provjerena da bi se osiguralo da oni budu cijeli
brojevi. Slino, prije izvrenja neke and ili or operacije, oba operanta moraju biti
provjerna da bi se osiguralo da oni budu tipa boolean. Prije izvrenja neke operacije
indeksiranja niza, tip operanta mora da bude array (a ne neka prostorna vrijednost ili
slog). Ovakva provjera se naziva provjerom tipa (type checks). Provjera tipa mora da
bude izvrena prije izvrenja operacije.
Meutim, postoji izvjestan stepen slobode u vremenu provjere: provjera tipa se moe
izvriti ili u vremenu kompilacije (compile-time) ili u vremenu izvrenja programa (at
run-time). Ova mogunost lei u osnovi vane klasifikacije programskih jezika na
statiki tipizirane i dinamiki tipizirane. U nekom statiki tipiziranom jeziku, svaka
varijabla i svaki izraz imaju fiksni tip (koji je ili eksplicitno postavljen od strane
programera ili izveden od strane kompajlera). Svi operanti moraju biti provjerenog tipa
u vremenu kompilovanja programa. U dinamiki tipiziranim jezicima, vrijednosti imaju
fiksne tipove, ali varijable i izrazi nemaju fiksne tipove. Svaki put kada se neki operant
izraunava, on moe da proizvede vrijednost razliitog tipa. Prema tome, operanti
moraju imati provjeren tip poslije njihovog izraunavanja, ali prije izvrenja neke
operacije, u vremenu izvrenja programa (at run-time). Mnogi jezici visokog nivoa su
statiki tipizirani. SMALLTALK, LISP, PROLOG, PERL i PYTHON jesu primjeri
dinamiki tipiziranih jezika.
S druge strane, moderni funkcionalni jezici (kao ML, HASKELL, MATHEMATICA)
uzdravaju se od takvih ogranienja: oni omoguavaju da sve vrijednosti, ukljuujui i
funkcije, imaju slinu obradu.
4
Na osnovu toga kako je postavljan koncept tipova podataka, programski jezici mogu da
se svrstaju u dvije grupe: na programske jezike sa slabim tipovima podataka i na
jezike sa jakim tipovima podataka.
2.2. Koncept slabih tipova
U sluaju jezika sa slabim tipovima podataka informacija o tipu promjenljive koristi se,
i korektna je samo na mainskom nivou, u fazi izvrenja programa. Ovako postavljen
koncept podrazumijeva sljedee mogunosti:
(1) Operacija koja se od strane kompilatora prihvati kao korektna, na nivou izvornog
koda programa, moe da bude potpuno nekorektna. Razmotrimo sljedei primjer:
char c;
c = 4;
Promjenljiva c definisana je da pripada tipu char, to podrazumjeva da joj se kao
vrijednosti dodjeljuju znaci kao podaci. Meutim umjesto korektnog dodjeljivanja
c='4', promjenljivoj c je dodjeljena vrijednost broja 4 kao konstante cjelobrojnog tipa.
Kod jezika sa slabim tipovima podataka kompilator ne otkriva ovu greku i informaciju
o tipu korisit samo na mainskom nivou kada promjenljivoj c dodjeljuje vrijednost
jednog bajta memorijske lokacije u kojoj je zapisana konstanta 4. Oigledno je da ovako
postavljen koncept tipova moe da dovede do veoma ozbiljnih greaka u izvrenju
programa koje se ne otkrivaju u fazi kompilovanja programa.
(2) Koncept slabih tipova podrazumjeva odreeni automatizam u transformaciji tipova
podataka u sluaju kada se elementi razliitih tipova nalaze u jednom izrazu ija se
vrijednost dodjeljuje promjenljivoj odreenog tipa. Razmotrimo sljedei primjer:
float x, y;
int i, j, k;
i = x;
k = x-j;
promjenljive x i y su realne (tipa float), a i, j i k cjelobrojne (tipa int.). Naredbom i-x;
vri se dodjeljivanje vrijednosti tipa float promjenljivom cjelobrojnog tipa. Kod jezika
sa slabim tipovima ovo dodjeljivanje je dozvoljeno iako se pri tome x svodi na drugi
format i pravi greka u predstavljanju njegove vrijednosti. Kod ovako postavljenog
koncepta tipova, da bi se napisao korektan program potrebno je tano poznavati
mehanizme transformacije tipova. U drugoj naredbi iz primjera (k = x-y;) od broja x koji
je tipa float treba oduzeti broj j, tipa int i rezultat operacije dodijeliti promjenljivoj tipa
int. Da bi smo bili sigurni u korektnost rezultata potrebno je da znamo redoslijed
transformacija koje se pri tome izvravaju, odnosno da li se prvo x prevodi u int i onda
izvrava oduzimanje u skupu cijelih brojeva i vrijednost rezultata dodjeljuje
promjenljivoj tipa int ili se j prevodi u tip float, izvrava oduzimanje u skupu realnih
brojeva, a zatim razultat prevodi u tip int ili dodjeljuje promjenljivoj k.
5
Koncept slabih tipova podataka doputa puno slobode kod zapisivanja izraza u
naredbama dodjeljivanja; meutim cijena te slobode je nejasan program sa skrivenim
transformacijama, bez mogunosti kontrole i koritenja informacije o tipu u fazi
kompilovanja programa.
2.3. Koncept jakih tipova podataka
Koncept jakih tipova podataka obuhavata nekoliko osnovnih principa:
Skup vrijednosti,
Sve definicije tipa moraju da budu javne, eksplicitne. Nisu dozvoljene implicitne
definicije tipova.
U praksi vea sigurnost i efikasnost statike tipizacije imaju prevagu nad veom
fleksibilnou dinamike tipizacije u velikoj veini aplikacija. Veina programskih
jezika je statiki tipizirana.
2.4. Ekvivalentnost tipova
ta ekvivalentnost tipova oznaava zavisi od programskog jezika. (Sljedea diskusija
podrazumjeva da je jezik statiki tipiziran.) Jedna mogua definicija ekvivalentnosti
tipova jeste strukturna ekvivalentnost (structural equivalence): T1=T2 ako i samo ako
T1 I T2 imaju isti skup vrijednosti. Strukturna ekvivalentnost se tako naziva zato to se
ona moe provjeriti poreenjem struktura tipova T1 i T2. (Nepotrebno je, a u opem
sluaju i nemogue, da se prebroje sve vrijednosti ovih tipova.)
Kada kompilator jezika sa jakim tipovima podataka treba da obradi naredbu
dodjeljivanjem oblika:
x := izraz
on vri dodjeljivanje samo u sluaju ekvivalentnosti promjenljive sa lijeve strane
dodjeljivanja i rezultata izraza na desnoj strani naredbe, osim u sluaju kada je na
desnoj strani cjelobrojni izraz a na lijevoj strani promjenljiva nekog tipa.
Primjer. Sljedei program u PASCAL-u je korektan:
MOD
sabiranje
oduzimanje
mnoenje
SQR (X)
Izraunava X2.
TRUNC (X)
broj.
ROUND (X)
broj.
- oduzimanje;
* mnoenje;
/ dijeljenje.
Standardne funkcije ABS(X) i SQR(X) u sluaju argumenata tipa Real daju rezultat tipa
Real, dok su rezultati standardnih funkcija: SIN(X), COS(X), TAN(X), EXP(X),
ARCTAN(X) i SQRT(X) tipa Real za bilo koje vrijednosti argumenata.
9
CHR (I)
10
4. ZAKLJUAK
Pascal je primjer programskog jezika kod kojeg je zastupljen koncept jakih tipova
podataka koji zahtjeva eksplicitne definicije tipova i podrazumijeva tipove zatvorene u
odnosu na operacije koje se na njima mogu izvravati. Standardni tipovi podataka u
Pascal-u su Integer, Real, Boolean i Char.
12
LITERATURA
1. J.J. Dujmovi, Programski jezici i metode programiranja, Akademska misao,
Beograd, 2003.
2. M. Stankovi, Programski jezici, Elektronski fakultet u Niu, Edicija: osnovni
udbenici, 2000.
3. http://www.scribd.com/doc/17375446/34/Znakovni-tip-podataka-Char
4. http://sr.wikipedia.org/wiki/Tipovi_podataka
5. http://www.znanje.org/knjige/computer/pascal/pascal_prir/050/0501.htm
13