Documente Academic
Documente Profesional
Documente Cultură
03 Limbajul Pascal. Structura Programelor, Tipuri Simple de Date
03 Limbajul Pascal. Structura Programelor, Tipuri Simple de Date
Cu toate c limbajul Pascal a fost conceput pentru nvarea programrii, el este folosit astzi la rezolvarea celor mai diverse probleme, de orice nivel.
Limbajul Pascal este construit folosind un alfabet ce conine caracterele ntlnite n scrierea obinuit i cea matematic (cu ajutorul crora se vor scrie toate instruciunile 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 lecii vom utiliza notaia BNF prezentat n continuare. Prin scrierea unei construcii ntre acolade { ... } se indic faptul c acea construcie poate s se repete de ori cte ori (inclusiv de zero ori). Parantezele drepte [ , ] sunt folosite pentru scrierea construciilor opionale (ceea ce se afl nchis ntre aceste paranteze poate lipsi). Se observ c n sintaxa de mai sus se folosesc metasimbolurile [ , ] , { i } , avnd alt semnificaie fa de caracterele [, ], { i } permise i folosite n anumite construcii Pascal. Ca n toate limbajele de programare i n Pascal se folosesc frecvent identificatorii. Prin identificator, notat n definiiile sintactice care urmeaz prin <id>, se nelege o secvena de litere (mari sau mici) i cifre, primul caracter fiind obligatoriu o liter. De asemenea, n construcia identificatorilor este permis i caracterul _. Acesta se recomand s se foloseasc n scrierea identificatorilor compui din dou cuvinte unite prin acest caracter.
19
O parte dintre identificatori au un rol special n definirea instruciunilor limbajului Pascal, (fiind Cuvinte rezervate). Acetia sunt:
Div Do
File For
Cuvintele rezervate nu pot fi folosite n program n alt scop dect cel fixat, acela de a defini sintaxa instruciunilor Pascal. Pentru a fi mai uor 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).
20
n definiia blocului elementul <decl> este metasimbolul folosit pentru declaraia Pascal care va fi definit n lecia urmtoare (4), iar <ins> este metasimbolul folosit pentru a nota o instruciune Pascal i va fi definit n lecia 5. Aa cum se va vedea mai trziu, n definiia declaraiilor de procedur se folosete metasimbolul < bloc >. Deci un bloc care conine o procedur conine un alt bloc care, la rndul lui, poate conine alt bloc. Oriunde n textul programului pot fi incluse comentarii. Acestea sunt folosite de ctre utilizatori n scopul mbuntirii claritii programului i a explicrii semnificaiei unor notaii sau pari 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 explicaii utile omului. Un comentariu este orice text nchis ntre acolade <comentariu> ::= { text } | (* text *) Un exemplu de program Pascal este urmtorul : $ Program Suma; Var a,b : Real; Begin Write ( Dati doua numere separate prin spatiu, apoi Enter : ); Readln(a,b); Write ( Suma este ,a+b); Readln End. { Tiparete suma a dou numere reale,} { a i b, citite de la tastatur.}
21
Datele dintr-un program pot fi constante sau variabile. Constantele se caracterizeaz prin aceea c nu-i modific valoarea n timpul execuiei 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 rndul 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 numr real poate fi n forma normal sau n forma exponential. n forma normal este obligatoriu att punctul zecimal "." ct i partea ntreag i partea fracionar a numrului real. De exemplu 3.14159 1.72 -5.749 sunt constante reale, n timp ce scrierile .23 103. 375. -123.+44 sunt greite. n forma exponential, un numr ntreg sau un numr real n forma normal este urmat de litera E sau e i de un numr ntreg numit exponent. Valoarea numrului real scris n aceast form este egal cu numrul scris n faa literei E nmulita 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 . $ 103.0 0.23 $
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 concatenrii mai multor constante de tip caracter. Dei s-a afirmat la nceput c literele mari se consider identice cu cele mici, singura excepie este folosirea lor n constanta ir de caractere. Constanta booleana reprezint o valoare logic i se reprezint prin identificatorii True pentru valoarea logic "adevrat", respectiv False pentru valoarea logic "fals". Variabila corespunde mrimii care i poate schimba valoarea n timpul execuiei 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 execuiei programului n limbajul Pascal fiecare variabil are un tip care trebuie s fie declarat n program. $
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 definete n continuare, iar celelalte tipuri vor fi definite n leciile urmtoare. Tipurile simple de date conin 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> <tip_ntreg> ::= Real ::= Integer
<tip_boolean> ::= Boolean <tip_caracter> ::= Char Tipurile Integer i Real se refer la mulimile Z i R, dar mulimea valorilor fiecrui tip este finit i depinde de calculatorul folosit. Dei funciile Pascal vor fi indicate n seciunea urmtoare prezentm aici cteva funcii definite asupra valorilor de tip ordinal sau de tip caracter. Pentru fiecare tip ordinal, deci i pentru tipul caracter, mulimea valorilor este finit i ordonat. Pentru obinerea rangului elementului x n aceast mulime ordonat se poate folosi funcia Ord(x). Pentru primul element p din aceast mulime avem Ord(p) = 0. Funcia Succ furnizeaz succesorul unui element n aceast mulime, 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 definiiile de mai sus se deduc uor urmtoarele proprieti: Ord( Succ(x) ) = Ord(x) + 1;
24
Domeniul tipului ntreg este submulimea numerelor ntregi cuprinse n intervalul [-Maxint-1, Maxint], unde Maxint este o constant ntreag predefinit a crei valoare depinde de calculatorul folosit i este determinat de mrimea locaiei pe care se reprezint un numr ntreg n calculatorul respectiv (de exemplu Maxint = 32767). Operaiile definite ntre valori de tip ntreg sunt +,,* , DIV, MOD i /, iar semnificaia lor se d n tabelul urmtor:
+
*
Semnificaia lui x y adunare scdere nmulire mprirea ntreag (11 DIV 4 este 2) mprirea real (11/4 este 2.75) restul mpririi ntregi a lui x la y ( 11 MOD 4 = 3 )
DIV / MOD
De asemenea, prin se noteaz i o operaie unar (x fiind opusul lui x faa de operaia de adunare).
3.4.2. Tipul real. Tipul real reprezint o submulime finit de numere reale aflate n intervalul [-vmax, vmax], submulime 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. Operaiile definite ntre valori de tip real sunt adunarea, scderea, nmulirea si mprirea, notate prin +, -, *, respectiv / . De remarcat c aceste operaii sunt definite i cnd un operand este ntreg ,iar cellalt real, rezultatul fiind real, datorit conversiei implicite a tipului ntreg la real. Menionam c n reprezentarea oricrui numr real n calculator se rein un numr finit de cifre semnificative. Din aceast cauz rezultatul unei operaii cu numere reale este aproximativ. Pentru a nelege exact aceste afirmaii este necesar cunoaterea reprezentrii numerelor n calculator.
Domeniul tipului boolean const din mulimea valorilor logice "fals" i "adevrat", marcate prin constantele False respectiv True. Ordinea este False < True. Operaiile logice binare sunt marcate prin And (conjuncia logic) i Or (disjuncia logic), iar negaia (operaie logic unar) prin Not. Operatorii
relaionali au n acest caz semnificaii logice. Deci prin =, <>, <=, >=, sunt notate echivalena, neechivalena (Sau exclusiv), implicaia, respectiv implicaia invers.
3.4.4. Tipul caracter. Tipul caracter se definete prin cuvntul Char i are ca domeniu de valori mulimea tuturor caracterelor (litere mari i mici, cifre i caractere afiabile). Nu exist operaii definite asupra valorilor de tip Char. Pe lnga funciile definite pentru argument de orice tip ordinal, pentru tipul caracter mai ntlnim i funcia
26
Chr. Pentru i ntreg, Chr(i) furnizeaz caracterul de rang i din domeniul tipului Char. Se observ c Ord( Chr(i) ) = i 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 definiia altui tip. Exemplu : (Luni, Mari, Miercuri, Joi, Vineri, Smbata, Duminic) (Primvar, Var, Toamn, Iarn) Pentru aceste exemple avem : Pred(Toamn) = Var Succ(Joi) = Vineri Ord(Luni) = 0 Ord(Iarn) = 3 . Menionm c valorile variabilelor de tip enumerare nu pot fi citite si nici tiprite. $ i Chr( Ord(c) ) = c .
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 definete subdomeniul se numete 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 pn la 20: 1..20 - subdomeniul zilelor lucrtoare: Luni .. Vineri - caracterele cifre zecimale: 0 .. 9. 3.4.7. Alte tipuri predefinite n Turbo Pascal.
Pe lnga tipurile prezentate mai sus, existente n limbajul Pascal standard, n Turbo Pascal exist cteva extensii importante. n primul rnd exist extinderi ale tipului Integer, prezentate n tabelul urmtor mpreun cu domeniile acestora.
Tipul
Byte ShortInt LongInt Word Comp
Domeniul
[0, 255] [-128, 127] [-231, 231-1] [ 0, 65535] [-2*1063+1, 2*1063-1]
Operaiile sunt cele precizate pentru tipul Integer, doar c domeniile difer. Ele sunt bine definite dac rezultatul face parte din domeniul menionat.
28