Sunteți pe pagina 1din 10

3.

Limbajul Pascal : elementele limbajului,


structura programelor, tipuri simple de date.

Cu toate c• limbajul Pascal a fost conceput pentru înv••area program•rii,


el este folosit ast•zi la rezolvarea celor mai diverse probleme, de orice nivel.

3.1. Vocabularul •i sintaxa limbajului.

Limbajul Pascal este construit folosind un alfabet ce con•ine caracterele


întâlnite în scrierea obi•nuit• •i cea matematic• (cu ajutorul c•rora se vor scrie
toate instruc•iunile limbajului) :
- literele (mari •i mici) ale alfabetului latin: A, B, C,..., X, Y, Z, a, b, c, ... , x y z
- cifrele zecimale: 0, 1, ... , 9
- caractere speciale: + − * / . , ; : ( ) [ ] { } = < > ! ? ^ @ # $ % \ ‘ “ _ ... .

În aceste lec•ii vom utiliza nota•ia BNF prezentat• în continuare. Prin


scrierea unei construc•ii între acolade { ... } se indic• faptul c• acea construc•ie
poate s• se repete de ori câte ori (inclusiv de zero ori). Parantezele drepte [ , ]
sunt folosite pentru scrierea construc•iilor op•ionale (ceea ce se afl• închis între
aceste paranteze poate lipsi). Se observ• c• în sintaxa de mai sus se folosesc
metasimbolurile [ , ] , { •i } , având alt• semnifica•ie fa•• de caracterele [, ], { •i }
permise •i folosite în anumite construc•ii Pascal.
Ca în toate limbajele de programare •i în Pascal se folosesc frecvent
identificatorii. Prin identificator, notat în defini•iile sintactice care urmeaz• prin
<id>, se în•elege o secven•a de litere (mari sau mici) •i cifre, primul caracter fiind
obligatoriu o liter•. De asemenea, în construc•ia identificatorilor este permis •i
caracterul ’_’. Acesta se recomand• s• se foloseasc• în scrierea identificatorilor
compu•i din dou• cuvinte unite prin acest caracter.

19
O parte dintre identificatori au un rol special în definirea instruc•iunilor
limbajului Pascal, (fiind Cuvinte rezervate). Ace•tia sunt:

And Div File In Of Record Type


Array Do For Label Or Repeat Until
Begin DownTo Function Mod Packed Set Var
Case Else GoTo Nil Procedure Then While
Const End If Not Program To With

Cuvintele rezervate nu pot fi folosite în program în alt scop decât cel fixat,
acela de a defini sintaxa instruc•iunilor Pascal. Pentru a fi mai u•or descoperite
într-un program acestea vor fi scrise în exemplele ce urmeaz• înclinat, iar primul
caracter va fi litera mare (ca •i în lista de mai sus).

3.2. Structura unui program Pascal.

Un program Pascal const• dintr-un antet, o parte de declara•ii •i


instruc•iunile care formeaz• programul principal. El are urmatoarea structur• :

<program> ::= <antet_program> ; <bloc> .


unde
<antet_program> ::= Program <id> [ ( <lista_id> ) ]
iar
<bloc> ::= <lista_decl> ; <ins_compus•>

Construc•iile <lista_decl> •i <ins_compus•> vor fi complet întelese


pu•in mai târziu, dup• ce se vor prezenta declara•iile •i instruc•iunile limbajului
Pascal. În general prin <lista_el> se în•elege un simplu element <el>, sau o
succesiune de elemente
<lista_el> ::= <el> { , <el> }

20
În defini•ia blocului elementul <decl> este metasimbolul folosit pentru
declara•ia Pascal care va fi definit• în lec•ia urm•toare (4), iar <ins> este
metasimbolul folosit pentru a nota o instruc•iune Pascal •i va fi definit în lec•ia 5.
A•a cum se va vedea mai târziu, în defini•ia declara•iilor de procedur• se
folose•te metasimbolul < bloc >. Deci un bloc care con•ine o procedur• con•ine
un alt bloc care, la rândul lui, poate con•ine alt bloc.

Oriunde în textul programului pot fi incluse comentarii. Acestea sunt


folosite de c•tre utilizatori în scopul îmbun•t••irii clarit••ii programului •i a
explic•rii semnifica•iei unor nota•ii sau par•i de program. Ele nu sunt luate în
seam• de calculator, singurul lor scop fiind acela de a oferi programatorului
posibilitatea de a insera în program explica•ii utile omului. Un comentariu este
orice text închis între acolade

<comentariu> ::= { text } | (* text *)

Un exemplu de program Pascal este urm•torul :


$
Program Suma; { Tipare•te suma a dou• numere reale,}
Var a,b : Real; { a •i b, citite de la tastatur•.}
Begin
Write (’ Dati doua numere separate prin spatiu, apoi Enter : ’);
Readln(a,b);
Write (’ Suma este ’,a+b);
Readln
End.

21
3.3. Constante •i variabile Pascal.

Datele dintr-un program pot fi constante sau variabile.

Constantele se caracterizeaz• prin aceea c• nu-•i modific• valoarea în


timpul execu•iei unui program. Orice constant• este precizat• prin sintaxa ei •i are
o valoare bine definit•.
Constantele pot fi: numerice, •ir de caractere •i booleene. La rândul lor
constantele numerice pot fi întregi sau reale.
Constantele întregi sunt cele care reprezint• numerele întregi din
matematic• •i au sintaxa obisnuit•. De exemplu, 15, 1989, -314 sunt constante
întregi.
Constantele reale sunt cele care reprezint• numerele reale. Scrierea unui
num•r real poate fi în forma normal• sau în forma exponential•.
În forma normal• este obligatoriu atât punctul zecimal "." cât •i partea
întreag• •i partea frac•ionar• a num•rului real.

De exemplu $
3.14159 1.72 -5.749 103.0 0.23
sunt constante reale, în timp ce scrierile
.23 103. 375. -123.+44
sunt gre•ite.

În forma exponential•, un num•r întreg sau un num•r real în forma


normal• este urmat de litera E sau e •i de un num•r întreg numit exponent.
Valoarea num•rului real scris în aceast• form• este egal• cu num•rul scris în fa•a
literei E înmul•ita cu 10 la puterea egal• cu exponentul scris dup• litera E. De
exemplu:

12345E-6 este egal cu 0.012345 ; $


3.123456E5 este egal cu 312345.6 .

22
Constanta •ir de caractere este o secven•• de caractere (un text) închis•
între apostrofuri. Valoarea constantei este chiar textul închis între apostrofuri.
Dac• este necesar ca în text s• apar• •i apostroful el trebuie dublat. De exemplu:
’22 Decembrie 1989’ $
’Domnu’’ Trandafir’
În cazul în care un singur caracter este închis între apostrofuri avem o
constant• de tip caracter. O constant• •ir de caractere este considerat• ca fiind
rezultatul concaten•rii mai multor constante de tip caracter.
De•i s-a afirmat la început c• literele mari se consider• identice cu cele
mici, singura excep•ie este folosirea lor în constanta •ir de caractere.
Constanta booleana reprezint• o valoare logic• •i se reprezint• prin
identificatorii True pentru valoarea logic• "adev•rat", respectiv False pentru
valoarea logic• "fals".

Variabila corespunde m•rimii care î•i poate schimba valoarea în timpul


execu•iei programului. Ea are un nume •i poate primi o valoare dintr-un domeniu
bine precizat de valori. Numele unei variabile este un identificator. Pe timpul
execu•iei programului în limbajul Pascal fiecare variabil• are un tip care trebuie
s• fie declarat în program.

3.4. Tipuri de date.

Prin tip de dat• se în•elege o mul•ime de valori (domeniul tipului) •i o


mul•ime de opera•ii ce pot fi efectuate cu aceste valori.
Unele tipuri de date sunt predefinite, iar altele sunt definite de c•tre
programator în timpul scrierii programului. Dup• elementele care formeaz•
domeniul tipului deosebim tipuri de date simple, respectiv compuse cu ajutorul
altor tipuri.

<tip> ::= <tip_simplu> | <tip_structurat> | <tip_referin••>

23
Tipul de date <tip_simplu> se define•te în continuare, iar celelalte tipuri
vor fi definite în lec•iile urm•toare.
Tipurile simple de date con•in tipurile numerice Integer •i Real, tipul
Boolean, tipul Char, tipul enumerare •i tipul subdomeniu. Avem:

<tip_simplu> ::= <tip_real> | <tip_ordinal>


unde
<tip_ordinal>::=<tip_întreg>|<tip_boolean>|<tip_caracter>|
<tip_enumerare>|<tip_subdomeniu>

Tipurile întreg, real, boolean •i caracter sunt predefinite •i sunt marcate


prin cuvintele Integer, Real, Boolean, respectiv Char. Deci
<tip_real> ::= Real
<tip_întreg> ::= Integer
<tip_boolean> ::= Boolean
<tip_caracter> ::= Char

Tipurile Integer •i Real se refer• la mul•imile Z •i R, dar mul•imea


valorilor fiec•rui tip este finit• •i depinde de calculatorul folosit.
De•i func•iile Pascal vor fi indicate în sec•iunea urm•toare prezent•m aici
câteva func•ii definite asupra valorilor de tip ordinal sau de tip caracter.
Pentru fiecare tip ordinal, deci •i pentru tipul caracter, mul•imea valorilor
este finit• •i ordonat•. Pentru ob•inerea rangului elementului x în aceast• mul•ime
ordonat• se poate folosi func•ia Ord(x). Pentru primul element p din aceast•
mul•ime avem Ord(p) = 0. Func•ia Succ furnizeaz• succesorul unui element în
aceast• mul•ime, deci Succ(x) reprezint• succesorul elementului x în domeniul
valorilor •i este nedefinit pentru ultimul element din domeniu. Prin Pred(x) se
noteaz• predecesorul elementului x în domeniul tipului •i este nedefinit pentru
primul element din domeniu.
Din defini•iile de mai sus se deduc u•or urm•toarele propriet••i:
Ord( Succ(x) ) = Ord(x) + 1;

24
Ord( Pred(x) ) = Ord(x) − 1.

3.4.1. Tipul întreg.

Domeniul tipului întreg este submul•imea numerelor întregi cuprinse în


intervalul [-Maxint-1, Maxint], unde Maxint este o constant• întreag• predefinit• a
c•rei valoare depinde de calculatorul folosit •i este determinat• de m•rimea
loca•iei pe care se reprezint• un num•r întreg în calculatorul respectiv (de
exemplu Maxint = 32767).

Opera•iile definite între valori de tip întreg sunt +,−,* , DIV, MOD •i /,
iar semnifica•ia lor se d• în tabelul urm•tor:

Œ Semnifica•ia lui x Œ y

+ adunare
− sc•dere
* înmul•ire
DIV împ•r•irea întreag• (11 DIV 4 este 2)
/ împ•r•irea real• (11/4 este 2.75)
MOD restul împ•r•irii întregi a lui x la y ( 11 MOD 4 = 3 )

De asemenea, prin − se noteaz• •i o opera•ie unar• (−x fiind opusul lui x


fa•a de opera•ia de adunare).

3.4.2. Tipul real.

Tipul real reprezint• o submul•ime finit• de numere reale aflate în


intervalul [-vmax, vmax], submul•ime care depinde de modul de reprezentare a
numerelor reale în calculatorul folosit. Deci vmax este o constant• real• care

25
difer• de la un calculator la altul, dar nu e o constant• predefinit• ca Maxint în
cazul tipului Integer.
Opera•iile definite între valori de tip real sunt adunarea, sc•derea,
înmul•irea si împ•r•irea, notate prin +, -, *, respectiv / . De remarcat c• aceste
opera•ii sunt definite •i când un operand este întreg ,iar cel•lalt real, rezultatul
fiind real, datorit• conversiei implicite a tipului întreg la real.
Men•ionam c• în reprezentarea oric•rui num•r real în calculator se re•in un
num•r finit de cifre semnificative. Din aceast• cauz• rezultatul unei opera•ii cu
numere reale este aproximativ. Pentru a în•elege exact aceste afirma•ii este
necesar• cunoa•terea reprezent•rii numerelor în calculator.

3.4.3. Tipul boolean.

Domeniul tipului boolean const• din mul•imea valorilor logice "fals" •i


"adev•rat", marcate prin constantele False respectiv True. Ordinea este False <
True. Opera•iile logice binare sunt marcate prin And (conjunc•ia logic•) •i Or
(disjunc•ia logic•), iar nega•ia (opera•ie logic• unar•) prin Not. Operatorii
rela•ionali au în acest caz semnifica•ii logice. Deci prin =, <>, <=, >=, sunt notate
echivalen•a, neechivalen•a (Sau exclusiv), implica•ia, respectiv implica•ia
invers•.

3.4.4. Tipul caracter.

Tipul caracter se define•te prin cuvântul Char •i are ca domeniu de valori


mul•imea tuturor caracterelor (litere mari •i mici, cifre •i caractere afi•abile). Nu
exist• opera•ii definite asupra valorilor de tip Char. Pe lânga func•iile definite
pentru argument de orice tip ordinal, pentru tipul caracter mai întâlnim •i func•ia

26
Chr. Pentru i întreg, Chr(i) furnizeaz• caracterul de rang i din domeniul tipului
Char. Se observ• c•

Ord( Chr(i) ) = i •i Chr( Ord(c) ) = c .


3.4.5. Tipul enumerare.

Tipul enumerare se specific• prin scrierea valorilor acestui tip între


paranteze:
<Tip_enumerare> ::= ( <Lista_id> )
identificatorii din paranteze constituind valorile tipului enumerare definit.
Ordinea lor este cea dat• de ordinea identificatorilor în lista. Nu este permis ca o
valoare a acestui tip (deci un identificator) sa fie reutilizat în defini•ia altui tip.

Exemplu : $
(Luni, Mar•i, Miercuri, Joi, Vineri, Sâmbata, Duminic•)
(Prim•var•, Var•, Toamn•, Iarn•)
Pentru aceste exemple avem :
Pred(Toamn•) = Var•
Succ(Joi) = Vineri
Ord(Luni) = 0
Ord(Iarn•) = 3 .
Men•ion•m c• valorile variabilelor de tip enumerare nu pot fi citite si nici tip•rite.

3.4.6. Tipul subdomeniu.

Tipul subdomeniu poate fi definit din orice tip ordinal prin precizarea
limitelor inferioar• •i superioar• care definesc valorile subdomeniului. Tipul
ordinal pentru care se define•te subdomeniul se nume•te tip de baz• al
subdomeniului. Avem:
<tip-subdomeniu> ::= constanta1 .. constanta2
unde constanta1 si constanta2 sunt valori ale tipului ordinal de baz• care satisfac
inegalitatea : Ord(constanta1 ) ≤ Ord(constanta2 ).

27
De exemplu: $
- subdomeniul întregilor de la 1 pân• la 20: 1..20
- subdomeniul zilelor lucr•toare: Luni .. Vineri
- caracterele cifre zecimale: ’0’ .. ’9’.

3.4.7. Alte tipuri predefinite în Turbo Pascal.

Pe lânga tipurile prezentate mai sus, existente în limbajul Pascal standard,


în Turbo Pascal exist• câteva extensii importante.
În primul rând exist• extinderi ale tipului Integer, prezentate în tabelul
urm•tor împreun• cu domeniile acestora.

Tipul Domeniul
Byte [0, 255]
ShortInt [-128, 127]

LongInt [-231, 231-1]


Word [ 0, 65535]
Comp [-2*1063+1, 2*1063-1]

Opera•iile sunt cele precizate pentru tipul Integer, doar c• domeniile


difer•. Ele sunt bine definite dac• rezultatul face parte din domeniul men•ionat.

28