Opcenito se sva poglavlja sastoje od dva dijela: dijela o jeziku (sintaksa i semantika naredbi) i dijela u kojemu su dani primjeri programa koji kroz rje?enje nekog problema ilustriraju pri-mjene naredbi.
Svako poglavlje zavr?ava pitanjima i zadacima za vje?bu.
Leksicka struktura
Alfabet Pascala cine sljedeci skupovi znakova:Skupu posebnih znakova pripada i praznina (razmak ili "blank").
U daljnjem tekstu skupove znakova Turbo Pascala oznacavat cemo kao
< slovo >, < brojka > i < poseban znak >. Nad
alfabetom Pascala definirane su sljedece klase rijeci:
Rezervirane rijeci, kao ?to im i ime ka?e, imaju
unaprijed definirano ili "rezervirano" znacenje. Pojavljuju se kao
dijelovi naredbi Pascala i nije ih dopu?teno rabiti u druge svrhe.
Evo potpunog skupa rezerviranih rijeci Turbo Pascala napisanih
abecednim redom:
AND | ARRAY | ASM | BEGIN | CASE | CONST |
CONSTRUCTOR | DESTRUCTOR | DIV | DO | DOWNTO | ELSE |
END | EXPORTS | FILE | FOR | FUNCTION | GOTO |
IF | IMPLEMENTATION | IN | INHERITED | INLINE | INTERFACE |
LABEL | LIBRARY | MOD | NIL | NOT | OBJECT |
OF | OR | PACKED | PROCEDURE | PROGRAM | RECORD |
REPEAT | SET | SHL | SHR | STRING | THEN |
TO | TYPE | UNIT | UNTIL | USES | VAR |
WHILE | WITH | XOR |
256 -1 -666 +1000 9876 -32768 7001 +8787 12345678 $10 -$ABCDdok nizovi znakova:
--1 +-2 '45' pet nula 3.14 5% 12,3ne mogu biti prihvaceni kao cijeli brojevi. Vidimo da cijeli brojevi predstavljeni u ?esnaesticnom zapisu zapocinju znakom "$".
realni__broj : normalni_oblik | eksponencijalni_oblik
normalni_oblik: predznak nepredznaceni_broj
. nepredznaceni_broj
eksponencijalni__oblik:
||cijeli broj || E eksponent
||normalni__ oblik||
eksponent: cijeli__broj
0.0 6.28 1E-6 1.62E-31 -303.00123 5e5 -6E-6Ako broj u eksponencijalnom obliku opcenito napi?emo kao mEn, znacenje mu je m x 10n.
niz znakova: ' { znak } '
gdje je < znak > bilo koji znak. Evo nekoliko primjera nizova znakova:'1234321' 'Ovo je niz znakova' 'Koliki je polumjer?' '***' 'Vrijeme Put Brzina'Polunavodnik oznacuje pocetak i kraj niza i ne smatra se njegovim dijelom. Ako niz znakova treba sadr?ati polunavodnik, to se posti?e pisanjem dvaju takvih znakova jedan do drugog. Na primjer, niz 'C" est la vie, mon amour!' predstavlja niz "C'est la vie, mon amour!".
:= <= <> >= .. (. .) (* *)Posebni simboli komponirani od dva znaka moraju se pisati kompaktno, bez razmaka izmedu znakova. Simboli (., .), (* i *) imaju isto znacenje kao uglate i viticaste zagrade. Simboli (. i .) su otvorena i zatvorena uglata, a (* i *) viticata zagrada.
Osnovna sintakticka struktura
Osnovna sintakticka struktura Turbo Pascala dana je sljedecim pravilima:program: [ zaglavlje_programa; ] blok. zaglavlje_programa: PROGRAM ime_programa ime_programa: ime blok: [ lista_modula ] { deklaracija | potprogram } niz_naredbi deklaracija: deklariranje_labela | definiranje_konstanti | inicijalizacija_varijabli | definiranje_tipova | deklariranje_varijabli potprogram: [ procedura | funkcijski_potprogram ] niz_naredbi: BEGIN [ labela: ] naredba {; [labela: ] naredba } END naredba: primitivna__naredba | slo?ena_naredba primitivna_naredba: prazna_naredba | naredba__za__ispis | naredba_za_dodjeljivanje | naredba__za__unos | naredba_GOTO | HALT | EXIT | poziv_procedure slo?ena_naredba: naredba__za_odabir | FOR_petlja | WHILE_petlja | REPEAT_petlja | naredba_CASE | niz_naredbiUocimo da je poseban slucaj primitivne naredbe, odnosno naredbe, tzv. "prazna naredba" dana sintaksom:
prazna_naredba: --------?
Iz osnovne sintakticke strukture, koristeci upravo praznu naredbu na mjestu pojavljivanja naredbe, slijedi da je minimalni program u Turbo Pascalu:BEGIN END.
Ovo je ujedno i na? prvi program napisan u Turbo Pascalu! Treba primijetiti da bi "niz" praznih naredbi dao program koji ima ekvivalentno znacenje:BEGIN ;;;;;;;;;;;;; END.
mo?e se napisati i kao
PROGRAM A_ 1 ; BEGIN END.
U prvome primjeru rezervirana rijec PROGRAM i ime A_l, te rezervirane rijeci BEGIN i END razdvojeni su razmakom. Ime A_l i tocka-zarez, odnosno tocka-zarez i rijec BEGIN napisani su bez razmaka. U drugom su primjeru sve rijeci razdvojene.
PROGRAM A_1 ; BEGIN END
Komentari
Osim razmaka, izmedu bilo koje dvije rijeci u programu smije se pisati i komentar. Pravilo pisanja komentara dano je sa{ A = {1, 2, 3, 4} }
jer ce zatvorena viticasta zagrada iza broja 4 biti prihvacena kao kraj komentara, a sljedeca viticasta zagrada ne mo?e biti prihvacena kao dio bilo koje naredbe Pascala.
PROGRAM A _2; {Deklaracija varijabli} BEGIN {Pocetak programa} {Naredbe} END.
Lista modula
Od verzije 4.0 Turbo Pascala uvedeni su moduli ("units") u definiciju jezika. Moduli su posebni programi (biblioteke programa), standardni ili definirani od strane korisnika. Navode se na pocetku programa prema pravilu:USES ime_modula {, ime_modula } ;
Direktive kompilatoru
Komentar koji pocinje znakom "$" i odredenim nizom drugih znakova predstavlja direktivu kompilatoru ili direktivu, kako cemo je dalje zvati. Sadr?aj takvog komentara odreduje izvjesne akcije koje ce biti izvr?ene u toku prevodenja ili izvr?avanja programa. Krivo napisana direktiva tretira se kao "obicni" komentar. Eventualno napisani niz znakova iza direktive prihvaca se kao komentar. Pregled svih direktiva dan je u prilogu knjige.Pravila pisanja programa
Program napisan u Turbo Pascalu sastoji se od jednog ili vi?e redaka. Svaki redak mo?e sadr?avati dio naredbe, naredbu ili vi?e naredbi, ali maksimalne duljine 126 znakova. Jedna naredba mo?e biti napisana u nekoliko redaka. Jedino se treba pridr?avati pravila da simboli naredbe moraju biti napisani kompaktno. Pisanje simbola naredbi mo?e otpoceti u bilo kojoj koloni retka, pa to treba koristiti da bi se postigla bolja citljivost programa.PROGRAM ime_programa; deklaracije_i_definicije; potprogrami; BEGINgdje su velikim slovima napisani elementi jezika (rezervirane rijeci), a malim slovima pojedine sintakticke kategorije, globalna semantika programa napisanog u Pascalu glasi:
naredba; ...; naredba END.
Programi A_1 i A_2 imaju znacenje "ostavi stvari kakve jesu". Drugim rijecima, izvr?enjem tih programa ne bi se ni?ta dogodilo, jer ne sadr?e nijednu neizvr?ivu niti izvr?ivu naredbu.
Karakteristika je Turbo Pascala da isti program mo?e imati dva razlicita znacenja! Na to utjece izbor odredenih direktiva kojima se, na primjer, mo?e izbjeci provjera kodomene medurezultata s ciljem br?eg izvr?enja programa. U tom slucaju ne bi bila dojavljena pogre?ka ako je rezultat izvan kodomene, ?to bi dovelo do pogre?nih (neocekivanih) rezultata.
Na kraju ovog poglavlja evo jednog kompletnog programa napisanog u Turbo Pascalu. To je program za rastavljanje prirodnog broja na faktore:
(* 1 *) PROGRAM Faktori; {Rastavljanje broja na faktore } USES Crt; TYPE Prir_br = 2 .. Maxint; VAR N : Prir_br; {Broj koji treba rastaviti na faktore } F : Prir_br; (* 2 *) PROCEDURE Upis; BEGIN Writeln ('RASTAVLJANJE BROJA NA FAKTORE'); Writeln; Write ('Zadajte cijeli broj veci od 1 '); Readln(N); WHILE N<2 DO BEGIN Write ('*** Pore?ka! Ponovi upis! '); Readln (N) END END; (* 3 *) FUNCTION Faktor (N: Prir_br): Prir__br; VAR i : prir_br; BEGIN Faktor := N; FOR i := 2 TO trunc (sqrt (N)) DO BEGIN IF N MOD i = 0 THEN BEGIN Faktor := i; EXIT END END END; (* 4 *) BEGIN Clrscr; Upis; Writeln; F := Faktor (N); IF F=N THEN BEGIN Writeln (N, ' je prim broj!'); HALT END; Write (N, ' = ', F); WHILE F <> N DO BEGIN N := N DIV F; F := faktor (N); Write (' x ', F) END (* 5 *) END.Za na?u analizu na ovom je mjestu bitno uociti neke osnovne dijelove tog programa. Radi toga smo neke retke programa oznacili komentarima, a brojevi unutar tih komentara predstavljaju odredena mjesta ("cvorove") u programu. Tako, na primjer, broj 2 oznacuje pocetak jedne cjeline - procedure za upis broja kojeg treba rastaviti na faktore. Izmedu cvora 1 i 2 nalaze se naredbe za definiranje i deklariranje. One nisu izvr?ivi dio programa. Izvr?avanje programa pocinje od cvora 4, a zavr?ava cvorom 5.
a) VII b) _1_ c) end d) A-B e) STOP f) 8a
g) IF_ h) Yes! i) in j) X$ k) AxB l) _x_10
a) PROGRAM b) sin c) '123' d) IX -6e-8 e) -------
f) := g) + h) $123A i) 0
a) 1 2 3 b) 11. c) 9x9 d) "***" e) +-1 f) xxx
PROGRAM Test; {Rje?ava Y na cijelobrojni eksponent X} VAR i, X: integer; Rez, Y: real; BEGIN Write ('Upi?ite realni broj '); Readln (Y); Write ('Upi?ite eksponent '); Readln (X); Rez := 1; FOR i := 1 TO X DO Rez := Rez * Y; Writeln; Write ('Y na X = ', Rez) END.
PROGRAM_1; TYPE a= integer; VAR c:integer; FUNCTION x: a; BEGIN x:=0END; BEGIN FOR c:=100D0WNT0 1D0 Write (x, x);;; END.na kojim mjestima su prekr?ena dodatna sintakticka pravila pisanja?
BEGIN BEGIN END END.
Tipovi podataka
Tip podataka jest skup vrijednosti koje imaju neke zajednicke karakteristike. Najznacajnija od tih karakteristika jest skup operacija koje su definirane nad vrijednostima odredenog tipa.Turbo Pascal ima nekoliko pro?irenja standardnih tipova podataka. Na najvi?oj razini, tip podataka u Turbo Pascalu mo?e biti prikazan kao
tip: primitivni_tip | strukturirani__tip | pokazivacPrimitivni tipovi podataka u Pascalu mogu se klasificirati na nekoliko nacina. Mi cemo se u na?im razmatranjima dr?ati podjele koja grupira primitivne tipove podataka po zajednickim karakteristikama:
Primitivni tipovi podataka
Ordinalni tipovi podataka su primitivni tipovi podataka sa zajednickom karakteristikom da svaki podatak ima svoj redni broj. Postoji funkcija nad ordinalnim tipom koja izracunava redni broj podatka, po kojoj je ovaj tip i dobio ime. Svi standardni tipovi podataka, osim realnoga, istodobno su i ordinalni. Nad linearno uredenim skupom podataka ordinalnoga tipaw1, w2, ..., wn wi < wj, i = j
succ (wi) = wi+1 za i = 1, ..., n-1
pred (wi) = wi-1 za i = 2, ..., n
Treca standardna funkcija definirana nad ordinalnim tipovima podataka izracunava redni broj podatka. Oznacuje se standardnim imenom "ord" i definirana je sljedecom rekurzivnom definicijom:
ord (x) = ord (pred (x)) + 1
Turbo Pascal ima i funkciju koja je inverzna funkciji "ord", koja za dani redni broj vraca podatak s tim rednim brojem. Ime te funkcije jednako je imenu ordinalnog tipa. Dakle, svakom definicijom ordinalnog tipa, odnosno u posebnom slucaju definicijom internog tipa, definirana je i funkcija s imenom ekvivalentnim imenu tipa, T, sa znacenjem:T (ord (wi)) = wi
Ordinalni tipovi podataka i naredba za definiranje tipova podataka detaljnije su opisani u nastavku ovog poglavlja.Na primjer, cijeli brojevi su:
0 -600 +3979 -1001 4321500
5.0 2E+06 -32.769 100000
succ (n) = n+1 za n < 2147483647
pred (n) = n-1 za n > -2147483648
Ime tipa | Domena |
---|---|
shortint | -128 do 127 |
byte | 0 do 255 |
integer | -32768 do 32767 |
word | 0 do 65535 |
longint | -2147483648 do 2147483647 |
pred (0) = -1 succ (32) = 33
ord (-111) = -111 integer (-111) = -111
Vrijednosti realnog tipa su realni brojevi koji se pi?u u normalnom ili eksponencijalnom obliku, prema vec danim pravilima u osnovnoj leksickoj strukturi Pascala.
Realni brojevi su:0.0 -221.33 2E4 3.1415926 +6.001 0.0001dok sljedeci nizovi znakova ne mogu biti prihvaceni kao realni brojevi:
0. .01 12,6 999 123456789
Logicna posljedica definicije realnih brojeva jest da nad vrijednostima tog tipa nisu definirane funkcije "succ", "pred" i "ord" (realni tip nije ordinalni).
Sintakticka kategorija < realni tip > definirana je kao
Tipa | Domena | Broj znamenki |
---|---|---|
real | 2.9x10-39 do 1.7xl038 | 11-12 |
single | 1.5 x IO45 do 3.4 x 1038 | 7-8 |
double | 5.0xl0"324 do 1.7xl0308 | 15-16 |
extended | 3.4xl0-4932 do l.lxlO4932 | 19-20 |
comp | -263 + 1 do 263 - 1 | 19-20 |
Vrijednosti su znakovnoga tipa znakovi iz konacnog, uredenog skupa ASCII znakova. Pi?u se prema pravilu:
znakovna_vrijednost: 'znak'l #broj | ^oznaka | ,,,, oznaka: slovo |@| [|\|] I ^ I __
Primjeri znakovnih vrijednosti:
'A' '*' '?' '5' ' ' '=' '/' 'c' ' ' ' ' '*' '#' #65 ^MUredenje znakovnih vrijednosti odredeno je ASCII kodovima. Na primjer, vrijedi:
'A' < 'B' < ... < 'Y' < 'Z' < ... < 'a' < 'b' < ... < 'y' < 'z' '0' < '1' < ... < '8' < '9'Drugim rijecima, ako su c1 i c2 dva znaka, vrijedi
c1 < c2
ako i samo ako jeord (c1) < ord (c2)
gdje vrijednost funkcije "ord" za znakovnu vrijednost kao argument odgovara ASCII kodovima znakova c1 i c2.Ako je znak napisan u obliku #< broj >, broj je istodobno njegov ASCII kod. ASCII kodovi znakova napisanih u obliku ^< oznaka > dani su u tablici ASCII kodova.
Znakovni tip, kao standardni tip podataka u Pascalu, ima unaprijed odredeno (standardno) ime - "char" (od rijeci "character" - znak). Ime znakovnog tipa istodobno je ime funkcije koja za dani broj vraca znak kojem je to redni broj.
Evo nekoliko primjera izracunavanja funkcije "char":char (65) = 'A' char (32) = ' ' char (112) = 'p'
(Crvena, Plava, Zelena) (Pon, Ut, Sr, Cet, Pet) (Sub, Ned)
(AUD, ATS, CAD, FRF, DEM, ITL, JPY, NLG, SEK, CHF, GBP, USD, BEF)
Prvi predstavlja skup podataka boja, drugi podatke koji predstavljaju simbolicka imena radnih dana u tjednu, treci simbolicka imena neradnih dana u tjednu i cetvrti oznake valuta.
Ako se definiciju internoga tipa opcenito napi?e kao(w1, w2, ..., wn)
vvi < wj 1 < i < j < n
Na primjer, nad podacima tipa "radni_dan" vrijedi:
succ (Pon) = Ut succ (Sr) = Cet pred (Pet) = Cetdok, na primjer, succ (Pet) i pred (Pon) nisu definirani.
pred (Ut) = Pon ord (Pon) = 0 ord (Pet) = 4
logicka vrijednost: FALSE | TRUE
Uredenje logickih vrijednosti proizlazi iz definicije, pa jeFalse < True
Vrijednosti funkcija succ, pred i ord za podatke logickog tipa definirane su kao:succ (False) = True, pred (True) = False, ord (False) = 0 ord (True) = 1Rekli smo da je logicki tip standardan, ?to znaci da je unaprijed definiran. Umjesto njegove eksplicitne definicije u programu dovoljno je koristiti njegovo ime, standardno ime "boolean", pa je definicija sintakticke kategorije < logicki tip > dana sa:
logicki tip: BOOLEAN
Dakle, ime logickoga tipa ujedno ima znacenje identifikatora logickih vrijed-nosti. Istodobno je "boolean" ime inverzne funkcije od "ord". Definirana je kao:boolean (0) = False, boolean (1) = True
definiranje__tipa: TYPE ime_tipa = tip;
{ime_tipa = tip;}
ime_tipa: ime
gdje je < tip > definiran kao ranije uz dodatak alternative:tip: ime_tipa
U pravilu pisanja naredbe za definiranje tipa pojavljuje se i < ime tipa >. To znaci da se izborom novog imena mo?e definirati tip ekvivalentan vec definiranom tipu (primitivnom ili strukturiranom). Drugim rijecima, novo ime tipa ekvivalentno je prethodno definiranom. Na primjer, naredbomTYPE cijeli_brojevi = integer;
definiran je tip "cijeli_brojevi" ekvivalentan cjelobrojnom tipu "integer".Evo jednog primjera pisanja naredbe za definiranje tipova:
TYPE boja = (Crvena, Plava, Zelena); radni_dan = (Pon, Ut, Sr, Cet, Pet); neradni_dan = (Sub, Ned); valuta = (AUD, ATS, CAD, FRF, DEM, ITL, JPY, NLG, SEK, CHF, GBP, USD, BEF);
Ovom naredbom definirano je nekoliko internih tipova podataka: "boja" je ime internog tipa koji sadr?i "vrijednosti" Crvena, Plava i Zelena; "radni_dan" je ime internog tipa kojeg cini skup simbolickih imena radnih dana u tjednu; "neradni_dan" je ime skupa podataka ? simbolickih imena neradnih dana u tjednu i "valuta" oznake valuta.
Ako je interni tip definiran naredbom za definiranje tipa, ime tipa istodobno je i ime funkcije inverzne funkciji "ord", koja za dani redni broj vraca podatak s tim rednim brojem.Nad tipom "radni_dan" definirana je i funkcija s tim imenom. Evo nekoliko primjera izracunavanja te funkcije:
radni_dan (2) = Sr radni_dan (0) = Pon radni_dan (4) = Pet
Funkcija "radni_dan" nije definirana za argumente (cijele brojeve) vece od 4.
definiranje_konstante: CONST ime_konstante = konstanta;
{ ime__konstante = konstanta; }
ime_konstante: ime
a u posebnom slucaju, za definiranje konstanti primitivnog tipa, sintakticka kategorija < konstanta > definirana je kaokonstanta: izraz_s_konstantama
izraz_s_konstantama: izraz
Izraz s konstantama je izraz odgovarajuceg tipa koji na mjestu operanda sadr?i podatak ili prije toga definiranu konstantu. Potpuno pravilo pisanja izraza dano je u posebnom poglavlju. Ovdje dajemo samo njegov najjednostavniji oblik, samo jedan operand, koji mo?e biti:vrijednosti| ime_konstante| predznak ime_brojcane_konstante
vrijednost: brojcana_vrijednost | znakovna_vrijednost | logicka_vrijednost
brojcana_vrijednost: cijeli_broj | realni_broj
naredba za inicijalizacijuAko naredbu za inicijalizaciju opcenito napi?emo kao
CONST ime_varijable : tip = konstanta ; {ime_varijable : tip = konstanta ;}
CONST v: t = k;
njeno globalno znacenje jest: deklariranje varijable v tipa t i pridru?ivanje joj pocetne vrijednosti k. Zadana inicijalna vrijednost (pogledajte u naredbi za definiranje konstanti kako je definirana sintakticka kategorija < konstanta >) mora biti u domeni definiranog tipa varijable. To se provjerava tijekom kom-pilacije i dojavljuje sintakticka pogre?ka u slucaju poku?aja inicijalizacije s vrijedno?cu izvan domene.Va?no je upamtiti da varijabla deklarirana i inicijalizirana naredbom za inicijalizaciju ima svojstvo varijable (dopu?tena joj je promjena vrijednosti unutar programa!), bez obzira ?to se u njenom pravilu pisanja pojavljuje rijec CONST. Na primjer, naredbom:
CONST V0 : real = 23.05; Y0 : real = 1.359; C = 10; D : 1..100 = C; B : '0'..'9' = '0'; Z : char = ' '; Yes : Boolean = True; Kraj : Boolean = False; Operacija : (ZB, 0D, MN, DI) = ZB;deklarirano je i inicijalizirano nekoliko primitivnih varijabli svih tipova.
naredba za dodjeljivanje: varijabla := izraz
U ovom opcenitom razmatranju uvedimo najjednostavnije oblike naredbe za dodjeljivanje koji se odnose na pridru?ivanje vrijednosti primitivnih tipova podataka:ime_primitivne_varijable := konstanta | ime_primitivne_varijable
Dakle, na lijevoj je strani ime primitivne varijable, na desnoj najjednostavniji oblik izraza bilo kojega tipa: konstanta ili ime primitivne varijable. Kontekstni aspekt pisanja naredbe za dodjeljivanje prema ovom pravilu jest da varijabla navedena na lijevoj strani i varijabla ili konstanta, na desnoj strani, moraju biti istog tipa. Izuzetak je realni tip. Ako je varijabla s navedenim imenom realnoga tipa, konstanta ili varijabla na desnoj strani mo?e biti realnog ili cjelobrojnoga tipa. Na primjer, ako su A i B dvije cjelobrojne varijable, evo nekoliko primjera pravilno napisanih naredbi za dodjeljivanje:A := -1; B := A; A := Maxint; B := 111;
U sljedecim naredbama prekr?eno je kontekstno pravilo da tip varijable i vrijednost moraju biti isti:v := i
gdje je v varijabla, a i izraz, semantika se moze prikazati sv <? V (i)
ili rijecima, varijabli v bit ce pridru?ena vrijednost izraza i. Prethodna vrijednost varijable v (ako je postojala) bit ce izgubljena.Vrijednost izraza mora biti iz domene vrijednosti varijable, ?to je odredeno deklariranim tipom varijable. Jedino se realnoj varijabli smije pridru?iti cjelobrojna vrijednost koja se prije pridru?ivanja pretvara u odgovarajuci realni broj.
Ako je vrijednost izraza izvan deklarirane domene vrijednosti varijable, u standardnom Pascalu bila bi dojavljena pogre?ka i bilo bi prekinuto daljnje izvr?avanje programa. U T. Pascalu to ce se dogoditi samo ako je ukljucena direktiva R, tj. ako je prije naredbe za dodjeljivanje bilo napisano (*$R+ *). Inicijalno je direktiva R iskljucena, tj. vrijedi (*$R- *).
Ako su varijable A, B, C, D i E deklarirane sVAR A : integer; B : boolean; C : char; D : (Pon, Ut, Sr, Cet, Pet, Sub, Ned); E : real;evo nekoliko primjera pravilno napisanih naredbi za dodjeljivanje:
A := 55; B := False; C := '*'; D := Pon; E := 6.28Poslije izvr?enja tih naredbi varijabla A imat ce vrijednost 55, B vrijednosti False, C ce sadr?ati znak "*", varijabli D bit ce pridru?ena "vrijednost" (ime) Pon i varijabla E sadr?at ce vrijednost 6.28. Prethodne vrijednosti danih varijabli (ako su bile definirane) bit ce "prekrivene" novim vrijednostima. Realnoj varijabli E smije se pridru?iti i cjelobrojna vrijednost. Na primjer, sa
E := 1
cijeli broj 1 bio bi pretvoren u realni zapis (1.0) i pridru?en varijabli E. Ako je prije toga varijabli E bila pridru?ena vrijednost 6.28, izgubljena je i sada varijabla E sadr?i vrijednost 1.0.Pocetnici cesto znak dodjeljivanja, ":=" poistovjecuju sa izjednacivanjem vrijednosti (u vecini jezika umjesto ":=" pise se "="), pa naredbu X := Y citaju "X je jednako Y". Zato bi, na primjer, na upit kolika je vrijednost varijable Y poslije izvrsenja niza naredbi
X := 100; Y := X; X := 200;odgovorili: 200! Ako se znacenje naredbe za dodjeljivanje odmah pravilno shvati, da je imenu varijable pridru?ena vrijednost izraza, tj. prvo se izracunava izraz pa se dobivena vrijednost pridru?i varijabli, ne bi bilo problema. U na?em primjeru prvom naredbom za dodjeljivanje varijabli X bila bi pridru?ena vrijednost 100, potom bi vrijednost izraza u drugoj naredbi, a to je tekuca vrijednost varijable X, bila pridru?ena varijabli Y i na kraju bi vrijednost 200 bila pridru?ena varijabli X. Sada je jasno da to nije imalo utjecaja na sadr?aj varijable Y, pa je njena vrijednost ostala nepromijenjena!
naredba za dodjeljivanje: ime_cjelobrojne_varijable := cjelobrojni_izraz ime_realne_varijable := realni_izraz ime_znakovne_varijable := znakovni_izraz ime_logicke_varijable := logicki_izraz ime_varijable_internog_tipa := izraz internog tipaOvim pravilom istodobno su istaknuti i kontekstni aspekti pisanja naredbe za dodjeljivanje: tip izraza mora biti jednak tipu varijable osim u slucaju realne varijable kad izraz mo?e biti i cjelobrojan
naredba za unos: READ lista varijabli READLN lista_varijabli: [ ( varijabla_za_unos {, varijabla_za_unos } ) ] varijabla za unos: brojcana_varijabla | znakovna__varijablaOpcenito znacenje naredbe za unos jest prekid izvr?avanja programa i cekanje da se unesu vrijednosti navedenih varijabli. Potom ce utipkane vrijednosti biti pridru?ene odgovarajucim varijablama i program ce se nastaviti izvr?avati prvom naredbom iza naredbe za unos. Kontekstni aspekt uporabe naredbe za unos jest da vrijednosti moraju biti istoga tipa kao i varijable navedene u naredbi za unos. Jedino se realnoj varijabli smije pridru?iti i cjelobrojna.
Naredba za unos mo?e poceti sa "Read" (citati) ili sa "Readln" (od "read line"). Ako je bila upotrijebljena rijec "Read" kursor ce poslije unosa vrijednosti ostati iza posljednjeg podatka, a ako je bila upotrebljena rijec "Readln", kursor ce se poslije unosa vrijednosti premjestiti na pocetak sljedeceg reda.
Poseban slucaj uporabe naredbe za unos je pisanje rijeci "Read" ili "Readln" bez liste varijabli. Znacenje takve naredbe je prekid izvr?avanja programa i nastavak poslije pritiskanja tipke na kojoj pi?e "Return" ili "Enter". Kursor se nece pomaknuti ako je napisano "Read" ili ce se premjestiti na pocetak sljedeceg reda, ako je napisano "Readln".
U nastavku opi?imo detaljnije semantiku naredbe za unos ako lista sadr?i samo brojcane ili samo nizovne varijable.
Uno?enje brojcanih vrijednosti
Ako naredbu za unos brojcanih (cjelobrojnih ili realnih) vrijednosti napi?emo kaoREAD (v1 v2, ..., vn) ili READLN (v1 v2, ..., vn)
gdje je v1 cjelobrojna ili realna varijabla, znacenje tih naredbi jest prekid izvr?avanja programa i cekanje da se unesu vrijednosti navedenih varijabli, a to je niz cijelih ili realnih brojeva razdvojen bar jednom prazninom:t > i b2 ?> bn J
(na kraju je pritisnuta tipka Enter). Dalje je semantika naredbe za unos ekvivalentna nizu naredbi za dodjeljivanje:v1 := b1 ; v2 := b2; ... vn := bn
Vrijednosti moraju biti odgovarajuceg tipa: cjelobrojne ako se pridru?uju cjelobrojnoj varijabli, cjelobrojne ili realne ako se pridru?uju realnoj varijabli (?to proizlazi i iz semantike naredbi za dodjeljivanje). Na primjer, ako su R i H realne varijable, izvr?enjem naredbeReadln (R, H)
bit ce prekinuto daljnje izvr?avanje programa i cekat ce se na unos vrijednosti za R i H. Na primjer:12.5 145 J
Poslije pritiskanja tipke Enter varijabli R bit ce pridru?ena vrijednost 12.5, a varijabli H (realna) vrijednost 145.0. Kursor ce se premjestiti u prvi stupac sljedeceg reda i program ce se nastaviti izvr?avati naredbom koja neposredno slijedi naredbu za unos.Unos znakovnih vrijednosti
Ako naredba za unos sadr?i samo znakovne varijable, ?to opcenito mo?emo napisati kao:READ (zi, z2, .., zN)
iliREADLN (zi, z2, ..., zN)
njezinim izvr?enjem cekat ce se na unos N znakova koji ce potom redom biti pridru?eni navedenim varijablama. Znakom se smatra bilo koji znak tastature, pa su to u posebnom slucaju razmak i znak polunavoda.Unos znakovnih i brojcanih vrijednosti
Naposljetku, definirajmo semantiku naredbe za unos koja sadr?i znakovne i numericke varijable. Razmotrit cemo dva slucaja:READ (z, n1, n2, ..., nN)
READ (v1 v2, .., vN)
Read (I, C, C, J)
unosom niza321 + 22
varijabli 1 bio bi pridruzen broj 321, varijabli C znak "+" i varijabli J broj 22. Isti ucinak postigao bi se da je bilo napisano321 +22
< dok bi za321+22 ili 321 + 22
bila dojavljena pogre?ka u fazi izvr?avanja programa, jer u prvom slucaju nema praznine iza broja 321, a u drugom ce varijabli C biti pridru?ena vrijednost " " i potom treba slijediti broj, a znak "+" to nije.Brisanje ekrana
Brisanje sadr?aja ekrana posti?e se naredbom CLRSCR koja se pi?e prema jednostavnom pravilu:brisanje ekrana: CLRSCR
"Clrscr" je ime standardne procedure koja se nalazi u standardnom modulu s imenom "Crt", pa program u listi modula mora sadrzati to ime. U suprotnom bila bi dojavljena pogre?ka.Izvr?enjem naredbe CLRSCR bri?e se prethodni sadr?aj ekrana i postavlja kursor u prvi stupac prvoga reda ekrana (gornji lijevi kut). Samo to i "zna" sljedeci program:
PROGRAM Brisi_Ekran; USES Crt; BEGIN Clrscr END
Smje?tanje kursora
Smje?tanje kursora bilo koju lokaciju ekrana posti?e se primjenom naredbe GOTOXY (standardne procedure) koja se pi?e prema pravilu:naredba GotoXY: GOTOXY (stupac, red) stupac: red: cjelobrojni_izraz cjelobrojni_izrazI procedura "GotoXY" je dio standardnog modula "Crt". Ako je napi?emo u obliku:
GotoXY (s, r)
gdje je s stupac, r red, izvr?enjem naredbe GotoXY bit ce izracunati cjelobrojni izrazi koji odreduju stupac i red, potom kursor smje?ten u r-tom redu stupca s. Prethodni sadr?aj ekrana nece biti promijenjen. Na primjer, izvr?enjem naredbeGotoXY (40, 12)
bit ce postavljen kursor u dvanaesti red, cetrdeseti stupac ekrana.Turbo Pascal ima i dvije globalne varijable s imenima WhereX i WhereY koje sadr?e tekuce vrijednosti stupca (WhereX) i reda (WhereY) polo?aja kursora. Ako se poslije naredbe GOTOXY iz prethodnog primjera napi?e
GotoXY (WhereX, WhereY-2)
izvr?enjem te naredbe kursor ce biti smje?ten u desetom redu (12-2), cetrdesetom stupcu (polo?aj stupca nije promijenjen).Da biste lak?e upamtili znacenje procedure GotoXY i globalnih varijabli WhereX i WhereY dovoljno je znati da je ishodi?e ekrana u gornjem lijevom kutu, os-x su stupci, a os-y redovi.
Naredba za ispis
Mogu se ispisati vrijednosti samo standardnih tipova podataka, tj. svi tipovi podataka osim internog. Ovdje ce biti rijeci o ispisu na dva medija: ekran i papir. Opcenita struktura naredbe za ispis dana je sljedecim pravilom:naredba za ispis: WRITE WRITELN [ ( [ LST, ] ispis {, ispis} ) ]gdje je < ispis > sintakticka kategorija koja se opcenito sastoji od niza izraza odredenog tipa i formata ispisa.
Globalna semantika naredbe za ispis jest: izracunavanje i ispis vrijednosti niza izraza, "formatirano" ili u "slobodnom formatu". Ispisivat ce se na ekran ako je izostavljeno standardno ime "LST", ako nije, na papir. Ako se ispisuje na papir, program mora sadr?avati standardni modul "Printer" u svojoj listi modula.
Naredba za ispis mo?e poceti s "Write" ili "Writeln". Znacenje je: ako naredba pocinje s "Write", poslije ispisa vrijednosti navedenih izraza kursor ce ostati iza posljednjega ispisanog podatka, a ako pocinje s "Writeln", kursor ce poslije ispisa vrijednosti biti premje?ten na pocetak novog reda. U oba slucaja ispis pocinje od trenutacne pozicije kursora, koja opcenito ne mora biti na pocetku retka. Ovim pravilima treba dodati da je ispis na ekranu ogranicen na 80 znakova (broj stupaca ekrana) pa ce se automatski prelaziti u novi red ako kursor u tekucem ispisu prema?i osamdeseti stupac.
Znacenje naredbe za ispis napisane bez izraza jest: ostavljanje kursora na tekucoj poziciji, ako je napisano samo "Write"; premjestanje kursora na pocetak novog reda, ako je napisano "Writeln".
Naredba za ispis koja pocinje s "Write" i sadrzi vise od jednog izraza, sto se opcenito moze napisati kao
Write (iz1, iz2, ..., izN)
Write (iza); Write (iz2); ...; Write (izN)
Writeln (izl, iz2, ..., izN)
Write (izi); Write (iz2); ...; Write (izN); Writeln