ELEMENTELE DE BAZA
ALE LIMBAJULUI DE PROGRAMARE PASCAL
Def.
Limbajul de programare este un limbaj artificial, deosebit de limbajul natural, creat pentru a servi la
comunicarea unui algoritm de prelucrare sub forma de program de lucru pentru calculator (limbajul Pascal este
un limbaj de nivel inalt realizat in anul 1070; folosim versiunea Turbo Pascal a firmei Borland)
Def.
Structura unui program in limbaj Pascal are doua parti:
- partea declarativa 1) antetul programului (cuprinde numele programului precedat de cuvantul
program si apoi caracterul ;: program <nume>;
- 2) zona de declaratii (in care se declara elementele ce vor fi folosite in program)
- partea operativa programul propriu-zis reprezentat de o secventa de instructiuni cuprinse intre
cuvintele begin si end urmat de caracterul .
Obs.
- Un program scris in Pascal (oricat de complex ar fi) are structura urmatoare:
program <nume>;
Declaratii de biblioteci (unituri) cu subprograme (ex: uses crt);
Definitii de constante (const );
Definitii de tipuri de date (type);
Declaratii de variabile (var);
Declaratii de subprograme;
begin
Instructiuni;
end.
- trebuie sa se precizeze care sunt elementele variabile si care sunt constantele inainte de a le folosi,
precum si tipurile variabilelor folosite;
- nu este necesar ca intr-un program sa figureze toate acestea, dar e de preferat sa apara in aceasta ordine;
- in definirea unui element nu se poate face referire la alt element care nu a fost declarat inca;
Def.
- orice limbaj de programare se caracterizeaza prin sintaxa si semantica
- sintaxa limbajului este data de totalitatea regulilor de scriere corecta (obs. un program scris corect din
punct de vedere sintactic nu este neaparat un program bun); pentru descrierea clara, completa si
riguroasa a unui program se pot folosi diagramele de sintaxa si metoda BNF{diagrama de sintaxa -
are 3 elemente grafice: elipsele (cuvintele cheie), dreptunghiurile (componentele definite anterior sau
cele care vor fi definite prin alte diagrame de sintaxa) si sagetile (destinate inlantuirii elementelor
constituente ale diagramelor); are o singura intrare si o singura iesire; {notatia BNF utilizeaza reguli
de productie ( are o parte stanga in care se gaseste un element de limbaj ce trebuie def., apoi simbolul
::=, apoi partea dreapta in care apare definitia sa sub forma unor variabile despartite de simbolul I}
1) VOCABULARUL LIBAJULUI
Vocabularul oricarui limbaj este format din
a) setul de caractere care reprezinta totalitatea caracterelor care apar in program ( literele a-z, A-Z;
cifrele 0-9; caractere speciale +,-,*,/,[],{},.,:,;,@,#,$; caractere speciale perechi <=, >=, :=, <>, (**)
(..); separatorii spatiu, tab, enter)
b) identificatorii prin identificator intelegem un nume asociat unui element dintr-un program (variabila
tip, subprogram, camp); el este reprezentat de o succesiune de litere mari sau mici, cifre si simbolul _
Obs.
- trebuie sa inceapa neaparat cu o litera sau cu simbolul _
- nu se folosesc litere grecesti (se scrie delta, alfa, pi)
- nu se lasa spatiu in cadrul identificatorului (ex. init tata e gresit, se scrie init_tata)
- nu se scrie indice (ex. x1, x2 e gresit, se scrie x1, x2)
- nu se pune punct
1
- nu incepe cu o cifra
- nu contine simboluri speciale
- lungimea maxima a unui identificator are maxim 63 caractere
- o categorie speciala de identificatori este reprezentata de cuvintele cheie (cuvinte rezervate, directive
standard) identificatori cu semnificatie fixa care nu pot fi folositi in alt context decat cel precizat de
semantica limbajului (ex.: and, begin, do, end, for, if, in, not, var, to, uses)
c) separatorii si comentariile
- def. o succesiune de caractere luate impreuna se numeste unitate lexicala; unitatile lexicale pot fi
diferentiate intre ele prin separatori;
- separatorii pot fi: spatiul, tab,enter, separatorul pentru instructiuni si declaratii(;), caracterul de sfarsit
de linie EOL etc
- pentru ca un program sa fie inteles si de catre alte persoane, nu numai de autorul lui, este util sa se
foloseasca comentariile; ele pot fi introduse in cadrul programului oriunde este legal sa apara un
caracter spatiu( dar nu in interiorul numerelor, a caracterelor speciale perechi sau a identificatorilor);
ele sunt ignorate de catre calculator la executia programului;
comentariile sunt incadrate de { } sau de (* *); pot exista comentarii intre comentarii
2) TIPURI DE DATE
Def.
Tipurile de date recunoscute de limbajul Pascal pot fi structurate astfel:
1) Simple (nestructurate)
a) reale
b) ordinare pot fi predefinite (standard) si definite de utilizator
Obs.
- cele predefinite se impart la randul lor in: intregi (integer), logice (boolean) si caracter (char)
- cele definite de utilizator pot fi de tip enumerat si de tip subdomeniu
2) Structurate
a) tablou (array)
b) sir de caractere (string)
c) articol (record)
d) multime (set)
e) fisier (file)
3) De referinta
Tipul intreg
- exista 5 tipuri predefinite
- daca se fac operatii cu doua tipuri diferite, se considera tipul de date comun, adica cel mai mic tip care
sa le includa pe ambele
TIP CARACTERISTICI FORMAT
Shortint Cuprinde numere intregi in intervalul [-128 , 127] un octet
Integer Cuprinde numere intregi din intervalul [-MAXINT , MAXINT] unde MAXINT =32 767 2 octeti
Longint Cuprinde numerele intregi din intervalul [- MAXLONINT , MAXLOGINT], MAXLONGINT =2 4 octeti
147 483 647
Byte Cuprinde numere naturale din intervalul [0 , 255] 2 octeti
Word Cuprinde numere naturale din intervalul [0 , 65 535] 2 octeti
- Operatii :
2
1 + Adunarea
2 - Scaderea
3 * Inmultirea
4 x div y Catul imp. lui x la y x si y sunt nr naturale
x mod y Restul imp. lui x la y - x si y sunt nr naturale
5 x mod 10 Ultima cifra a lui x
6 not Negatie
7 and Si (aritmetic)
8 xor Sau (exclusiv)
9 shl Shift left (deplasare la stanga)
10 shr Shift right (deplasare la dreapta)
Obs.
- o functie predefinita este un bloc de instructiuni scris de catre autorii limbajului
- pentru a comanda executia unei functii trebuie sa o apelam
- o functie poate avea unul sau mai multi parametrii
- la apel, functiareturneaza (intoarce) o anumita valoare
- valoarea returnata de o functie poate fi afisata, atribuita unei variabile, folosita intr-o expresie, transmisa
ca parametru unei alte functii
- Ex. (pentru tipurile de date numerice)
a) writeln (sqrt (x)) afiseaza val. returnata de functia sqrt (x); pt. x=4 va afisa val. 2
b) y:=sqr(x) atribuie var. y val. returnata de functia sqrt(x); pt. x=4 si y=4
c) z:= (1+sqrt (x))/2 val. returnata de functia sqrt (x) este folosita intr-o expresie
d) t:=trunc (sqrt (x)) valoarea returnata este transmisa ca parametru pentru functia trunc
e) c.m.m.m.c.: cmmmc:=a*b div cmmdc
f) n este par : n mod 2 = 0
g) n este divizibil cu m : n mod m = 0
h) in cazul in care unul din cele doua numere intregi a si b sunt este negative, functiile mod si div nu se
aplica in acelasi mod: pentru cat: initial se face impartirea operanzilor, fara semn, iar rezultatul
primeste semnul obtinut prin compunerea semnelor operanzilor (+ cu + = +; - cu - = +; - cu + = -);
pentru rest: se calculeaza restul impartirii fara semn, iar rezultatul primeste semnul primului operand
- Functii:
Ord Nr. de ordine = functia identica
ex. ord (x)=x
Succ Returneaza succesorul
ex. Succ(x) = x+1
Pred Returneaza predecesorul
ex. Pred (x) = x-1
Odd Returneaza o variabila de tip bolean, are doua valori
Odd (x)= true pt x par
=false pt x impar
ex. odd(4)=true ; odd(3)=false
Inc Inc(x,nr) - Incrementeaza (mareste) val lui x cu val. lui nr., memorand rezultatul tot in var. x
Este echivalent cu atribuirea x:=x+1
Lo Lo(x) octetul inferior al lui x
ex. pt x integer sau word, rezultatul este byte
Hi Octetul superior al lui x
Swap Swap(x) schimba intre ei octetii sup. si cei inf., rasturnand nr rezultat
Tipul caracter
- Limbajul Pascal foloseste codificarea ASCII a caracterelor; in cadrul setului ASCII fiecare caracter
ocupa o pozitie, are un numar de ordine
- Codurile ASCII sunt numere naturale de la 0 la 255
- Ex. literele mari A, B,.,Z au codurile cuprinse intre 65 si 90; literele mici a, b,.z sunt de la
97 la 122, caracterele- cifra 0, 1,.9 au codurile intre 48 si 57 inclusiv, iar caracterele speciale sunt
intercalate in tot intervalul de la 0 la 255
3
- O variabila de tip character ia ca valoare un caracter cuprins intre apostrofuri si se declara cu ajutorul
identificatorul char ;exceptie face apostroful insusi care trebuie dublat ;
- Ex. var c:char;
- caracterele se pot numara (char este scalar)
- Functii:
ord ord(c) returneaza codul ASCII al caracterului c
ex. ord(A) = 65
chr chr(i) returneaza caracterul al carui cod ASCII este intregul i
ex. chr (65) = a
succ succ (c) returneaza caracterul care are codul ASCII cu o unitate mai mare
ex. succ (A) = B
pred pred (c) returneaza caracterul care are codul ASCII cu o unitate mai mica
ex. pred (B) = A
- Ex.
- functia UpCase are atat argumentul cat si rezultatul un caracter
UpCase (c) =majuscula corespunzatoare literei c
UpCase (a)=A ; UpCase (A)=A
- constantele sir de caractere de lungime 1 pot fi considerate ca fiind caractere
Tipul logic
- este numit tipul boolean
- exista 4 tipuri logice predefinite boolean si bytebool (care ocupa un octet), wordbool (care ocupa 2
octeti) si longbool (4 octeti)
- valorile booleene sunt reprezentate de identificatorii predefiniti False si True
- variabilele de tip Boolean nu pot fi citite, dar valorile lor pot fi afisate
- Functii:
ord (false) 0
ord (true) 1
succ (false) true
pred (true) false
- valorile booleene sunt tipuri ordinare, adica putem spune ca false<true
- Operatii:
and conjunctie logica
or disjunctie logica
not negatie logica
xor disjunctie logica exclusiva (este true numai daca cele doua expresii sunt diferite)
- tabele de adevar:
not False True and False True or/xor False True
True False False False False False False True
True False True True True True/False
Tipul real
- este reprezentat de o submultime a multimii nr. reale, care poate fi reprezentata in calculator
- exista cinci tipuri predefinite:
4
real Numere reale din intervalul [2.9e-38 , 1.7e38] reprezentate pe 6 octeti
single Numere reale din intervalul [1.5e-45 , 3.4e38] reprezentate pe 4 octeti
double Numere reale din intervalul [5e-324 , 1.7e308 reprezentate pe 8 octeti
-
extended Numere reale reprezentate pe 10 octeti
comp Numere intregi foarte mari, interpretate drept reale reprezentate pe 8 octeti
Operatii: adunarea (+), scaderea (-), inmultirea (*), impartirea (/)
- Obs. : pt ridicarea la putere se foloseste fc. Exp si Ln
- tipurile reale nu sunt ordinare, nu putem vorbi despre succ. sau pred.
- pentru a exprima ca un numar real este si intreg se foloseste functia int (x = int (x)
- Functii:
Functia Semnificatia
Abs Abs (x)= x
Sqr Patratul argumentului
Sin Sinusul valorii argumentului exprimat in radieni
Cos Cosinusul valorii argumentului exprimat in radieni
Arctan Arctan (x): Unghiul exprimat in rad. a carui tang este x
Ln Logaritmul nat al argumentului
Exp Exp(x)=ex, unde e=2,71
Sqrt Sqrt(x)= x
Int Int(x)= partea intreaga a lui x
Frac Partea fractionala a argumentului
Trunc Valoarea trunchiata a unui nr de tip longint a lui x
Round Cel mai apropiat nr intreg de x
- Obs.:
- Functiile int si trunc lucreaza la fel, cu deosebirea ca functia int intoarce un rezultat de tip real, pe cand
functia trunc, unul de tip intreg
- Functia round rotunjeste pe x la cel mai apropiat numar (in cazul in care numarul n este pozitiv scriem
round (n.5)=n +1; in cazul in care numarul n este negativ scriem round (-n.5)=-n-1)
- Ex.
Round (4.2) = 4 ; round (4.7) = 5
Round (-4.2) = -4 ; round (-4.7) = -5
Tipuri ordinare definite de utilizatori
- in cadrul unui program, utilizatorul poate defini noi tipuri de date
- crearea unui nou tip de date se face folosind cuvantul cheie type, in zona de declaratii a programului,
inaintea declaratiilor de variabile
- type nume_tip = def_tip;
- tot cu type se pot redenumi tipurile de date existente (ex. type intreg = integer; var x:intreg)
- tipurile ordinare definite de utilizatori pot fi de doua feluri:
1) tipul enumerat
2) tipul subdomeniu
1) tipul enumerat
- defineste o lista de identificatori abstracti (simboluri) care se refera la aceeasi entitate si care nu au o
semnificatie pentru calculator
- variabilele de tip enumerat nu pot fi citite de la tastatura si nu pot fi nici afisate
- unei variabile de tip enumerat i se poate atribui ca valoare un simbol din lista data la definirea tipului
- Ex.
type culori =(rosu, verde, galben)
var c: culori
se poate face atribuirea : c:= rosu
5
sau:
se poate declara o variabila de tip enumerate si fara a defini tipul (tip anonim): var c : (rosu, verde,
galben)
- Functii:
pred (<elem>) returneaza predecesorul lui elem pred (verde)= rosu
succ (<elem>) returneaza succesorul lui elem succ(verde) = galben
ord (<elem>) returneaza nr de ordine al elementului ord (rosu) = 0; ord(verde)=1; ord(galben)=2
- Obs.:
- in cadrul unui tip enumerat, fiecare simbol are un nr de ordine numit rang; numerotarea simbolurilor
incepe de la zero
- asupra valorilor de tip enumerat nu se pot aplica operatii aritmetice
- se pot aplica operatori relationali care vizeaza ordinea insusirii simbolurilor in definirea tipului
- val de tip enumerat pot fi folosite in expresii (ex. writeln (succ(verde)>rosu) si va afisa true)
- un identificator precizat intr-o lista nu poate aparea si in alta
2) tipul subdomeniu (interval)
- tipul subdomeniu se defineste ca un interval finit de valori ale unui tip de date predefinit sau definit
anterior, numit tip de baza
- la declararea tipului subdomeniu se precizeaza capetele intervalului
- sintaxa : type <id_tip>=<const1>..<const2>;
- Ex:
- type cifra =0..9 - s-a definit tipul subdomeniu cifra pentru cifrele zecimale; acest tip de date este de fapt
un interval de numere intregi, adica un subinterval al multimii Z
- type lit_mare = A..Z este un subinterval al tipului char
- type s= (luni, marti, miercuri, joi, vineri, sambata, duminica)
zile_weekend=vineri..duminica este un subdomeniu al tipului s
- un tip subdomeniu poate fi si anonim : var x : 0..100
- operatorii si operatiile care se pot aplica datelor de tip subdomeniu sunt cele premise pe tipul de baza al
subdomeniului
- exista in plus operatorul IN care testeaza apartenenta unei valori la un tip subdomeniu ( pentru x=60,
functia write (x in [1..50]) va afisa false deoarece valoarea data nu se gaseste in subdomeniu)
3) CONSTANTE
- o constanta este o data (informatie) a carei valoare nu poate fi modificata pe parcursul executiei unui
program
- ele se impart in doua categorii: constante numerice (constante intregi si constante reale )si constante
nenumerice (constante caracter, sir de caractere, logice (booleene) si constante simbolice)
a) Constante intregi
- sunt reprezentate prin acele numere intregi care pot fi reprezentate in memoria calculatorului (numere
intregi alcatuite din cifrele zecimale de la 0 la 9, cu sau fara semn)
- Obs.
- nu se pot reprezenta numere oricat de mici sau oricat de mari; ele trebuie cuprinse in intervalul [-2 147
483 648, 2 147 683 467]
- pot fi reprezentate atat in baza 10 cat si in baza 16 (in aceasta baza nr sunt precedate de simbolul $)
b) Constante reale
- Constante reale pot fi numai valori rationale, cu virgule zecimala, dar cu un numar finit de zecimale
- sunt reprezentate de nr reale cuprinse in intervalul [ -3,4*10-4352, 1,1*104932]
- in locul virgulei se foloseste punctul zecimal
6
- constantele reale se pot defini in doua forme: forma normala (cea cunoscuta care este alcatuita din trei
entitati: partea intreaga, punctual zecimal si partea zecimala) si forma exponentiala sau stiintifica (in
cadrul careia se evidentiaza o putere a lui 10 prin intermediul caracterului e sau E)
- Ex. 82E+20 (82*1020) sau -12E-3 (-12*10-3)
- Obs.
- calculatorul nu poate memora numere irationale; fiecare nr real va fi aproximat prin nr rational cel mai
apropiat
- prezenta caracterului + sau a cifrei 0 la inceputul unei constante reale, desi inutila, nu constitue o
eroare (analog si la constantele intregi)
- in cazul in care lipseste partea zecimala se poate scrie si : -126. ceea ce este echivalent cu -126.0
- partea intreaga trebuie sa fie obligatoriu prezenta (este gresita notatia .12 in loc de 0.12)
c) Constante caracter si constante sir de caractere
- constantele sir de caractere sunt reprezentate sub forma unei secvente de 0 (constante caracter) sau mai
multe caractere din setul de caractere ASCII extins, scrisa pe un singur rand in program si inclusa intre
apostrofuri
- poate contine orice caracter, inclusiv caractere speciale si caracterul spatiu
- un sir de caractere fara nimic intre apostrofuri este un sir vid
- o secventa de doua apostrofuri succesive simbolizeaza un singur caracter apostroful
Obs.
- desi limbajul Pascal nu face deosebire intre literele mari si mici, totusi in setul ASCII cele doua categorii
de litere sunt differentiate prin coduri distincte ( pag, 4 - tipul de date de tip char)
- in Turbo Pascal se permite inserarea de caractere de control in cadrul sirurilor
- simbolul # urmat de o constanta de tip intreg fara semn din domeniul 0-255, semnifica un caracter
corespunzator valorii ASCII respective
- simbolul ^ poate forma siruri de caractere de control, cu valori intre 0 si 31 daca acesta precede alte
caractere
- ex. sam; #31; ^23
- a nu se confunda un caracter-cifra cu cifra zecimala (caracterul 9 nu este totuna cu cifra 9)
d) Constante logice (booleene)
- in cadrul unui program se pot intalni conditi, care pot fi indeplinite sau nu, si in functie de care se vor
decide actiunile urmatoare
- orice conditie se poate caracteriza printr-o asa numita valoare de adevar care spune daca respectiva
conditie este adevarata sau falsa
- exista doua constante logice (booleene): true (care reprezinta valoarea de adevar ADEVARAT-echivalenta
cu 1 logic) si false (care reprezinta valoarea de adevar FALS echivalenta cu 0 logic)
e) Constante simbolice
- unei constante de orice tip i se poate atasa un identificator de constanta, adica un nume, definind astfel
ceea ce numim constanta simbolica
- in cadrul unui program, constantele simbolice se declara in sectiunea de declaratii folosindu-se cuvantul
cheie const: const <nume>=<valoare>
- daca avem de declarat mai multe constante, vom scrie cconst o singura data
- tipul unei constante (intreaga, reala, booleana, sir de caractere) rezulta chiar din valoarea ei
- pot fi predefinite : pentru cea mai mare valoare de tip intreg se ataseaza constanta simbolica cu
identificatorul Maxint=32767, cea mai mare valoare posibila de tip longint este
MaxLongint=2147483647, t rue si f alse pot fi considerate si constante simbolice , Pi, Nil etc
- folosirea lor este recomandata, conferind programului claritate
- ex. greseli frecvente -
a) const pi; - este gresit deoarece se uita sa se precizeze val lui pi
b) const pi:=3,14 deoarece se foloseste simbolul specific atribuirii
c) const = 3,14 deoarece se greseste identificatorul de constante
7
4) VARIABILE
- prin variabila se intelege o informatie (o entitate) a carei valoare se poate modifica la fiecare noua
executie a programului, sau chiar in cursul aceleasi executii
- multimea de valori pe care o poate lua aceasta variabila reprezinta tipul variabilei
- fiecarei variabile i se aloca un spatiu de memorie dependent de tipul ei
- variabila este caracterizata prin trei atribute: tip, valoare, adresa, cu proprietatea ca atributul valoare
este modificabil
- variabilele sunt declarate in zona de declaratii (inainte de a fi folosite) ; ele au un identificator de
variabila; se foloseste cuvantul cheie var
- se declara astfel : var identif_var : identif_de_tip
- ex. var a : integer
- in general daca avem multe linii de declaratii, cuvantul var se scrie doar o singura data, la inceputul
primei linii (avem insa si cazuri in care var poate aparea de mai multe ori)
- se pot def ini si variabile initializate cu ajutorul lui const
- putem declara intr-o singura linie mai multe variabile de acelasi tip, separandu-le prin virgula
- putem avea mai multe variabile de acelasi tip: var v1, v2, v3 : tip
- putem avea mai multe tipuri: var v1, v2 : tip1; w1, w2: tip2
Obs:
- in pascal sunt mai multe tipuri de operatori:
a) operatorii aritmetici :+ , - , * , / , div , mod
b) opertorii relationali : = , <> , <= , >=
c) operatori logici : and , or , not , xor
d) operatorul de atribuire : :=
5) EXPRESII
- o expresie poate fi fie o constanta, fie o variabila, fie un apel de functie, fie o combinatie corecta de
expresii mai simple
- combinarea se realizeaza cu ajutorul operatorilor iar elementele care se combina se numesc operanzi
- operanzii reprezinta valorile care intra in cadrul expresiei (poate fi o constanta sau o variabila)
- operatorii desemneaza operatiile care se executa in cadrul expresiei
- in timpul executiei unui program, la intalnirea unei expresii, calculatorul evalueaza expresia respective
astfel: inlocuieste variabilele cu valorile lor si se obtine valoarea expresiei
- tipul unei expresii reprezinta de fapt tipul valorii expresiei
- se lucreaza cu expresii algebrice dar acestea se scriu liniarizat (pot exista si expresii numerice cand se
alipesc doua siruri de caractere concatenarea ex. Turbo + PascalTurboPascal)
- prioritatile operatorilor:
Max 1 NOT, +,- (operatori unari)
2 AND, *, /, DIV, MOD, SHR, SHL
(operatori multiplicativi)
3 OR, XOR, +, - (operatori aditivi)
Min 4 =, <>,< ,>, <=, >=, IN (operatori relationali)
- daca se doreste sa se schimbe ordinea operatorilor se folosesc perechi de paranteze rotunde
- expresiile se impart in doua mari grupe: expresii aritmetice (sunt cele care efectueaza operatii aritmetice
avand ca rezultat un numar) si expresii logice (se construiesc de obicei cu ajutorul operatorilor
relationali )