Algoritmi şi programare – Curs 3 1

3. Limbajul de programare Pascal

3.1. Structura programelor Pascal

În continuare este prezentat un exemplu de program Pascal, care deşi este foarte
simplu, el conţine elemente care permit ilustrarea structurii unui program Pascal, a
vocabularului limbajului şi a unităţilor sale lexicale.

PROGRAM Exemplu;
CONST n = 1;
VAR x,y,z:integer;
BEGIN
x := 20;
writeln(‘Introduceti un nr. intreg:’);
readln(z);
y:= (x+y)/2;
writeln(’Rezultatul este:’, y);
readln;
END.
Un program sursă Pascal este o succesiune de caractere, care, la fel ca o frază a limbajului natural,
respectă anumite reguli sintactice, ca de exemplu: se utilizează „semne de punctuaţie”, cuvintele sunt folosite
într-o anumită succesiune, „propoziţiile” au anumite legături între ele.
Un program Pascal este alcătuit din următoarele părţi:
Antet;
Parte declarativă;
Parte executabilă.
Dintre aceste părţi, obligatorie este doar partea executabilă.

3.2 Vocabularul limbajului

În scrierea programelor Pascal pot fi folosite doar anumite caractere (simboluri) care
alcătuiesc vocabularul limbajului. Acesta cuprinde:
 literele mari şi mici ale alfabetului latin, precum şi caracterul „_” inclus tot în
categoria literelor, fiind folosit ca element de legătură într-un identificator compus;
 cifrele zecimale din intervalul 0 – 9 .
antet
parte declarativă
parte executabilă
2 Algoritmi şi programare – Curs 3
 simboluri speciale, reprezentând operatori şi delimitatori
 operatori: - , +, *, / , = , := , < , >, etc.
 delimitatori: ( , ) , [ , ] , { , } , ’ , etc.
 cuvinte cheie: and, asm, array, begin, case, const, else, if, end, etc. Cuvintele cheie
pot fi folosite doar în scopul pentru care au fost definite, ele nu pot fi redefinite de
către utilizatori.

3.3. Unităţile lexicale ale limbajului Pascal

Unităţile lexicale sunt grupuri de caractere cu semnificaţie de sine stătătoare. Acestea sunt:
 Identificatorii. Un identificator este o secvenţă de litere şi cifre, prima fiind
obligatoriu literă. El desemnează variabile, constante, tipuri, nume de proceduri,
funcţii. O parte a identificatorilor sunt predefiniţi (standard) iar o altă parte sunt
definiţi de către utilizator. Spre deosebire de cuvintele cheie, identificatorii
predefiniţi pot fi redefiniţi de către utilizatori.
 Numerele. Un număr desemnează o valoare numerică întreagă sau reală. Sintaxa
(modul de scriere al unui număr) în limbajul Pascal este:
parte_întreagă.parte_fracţionară E cifre_exponent
exemplu: 3,1415926536E+00 este modul implicit de afişare al constantei PI
 Şirurile de caractere, care reprezintă o secvenţă de caractere cuprinse între apostroafe.
De exemplu, ‘ Introduceti un nr. intreg’.
 Comentariile care sunt reprezentate de o secvenţă de caractere incluse între paranteze
acolade. Comentariile nu influenţează execuţia programului şi au doar un rol
explicativ.











Algoritmi şi programare – Curs 3 3
Tipuri de date, constante, variabile, expresii

Un program Pascal conţin o descriere a acţiunilor ce trebuie executate de calculator,
precum şi o descriere a datelor ce sunt manevrate de aceste acţiuni. Acţiunile sunt descrise
prin instrucţiuni, iar datele prin declaraţii. Un tip de date defineşte atât o mulţime de valori,
cât şi o mulţime de operaţii ce se pot efectua cu aceste valori. Fiecărei date i se asociază un
tip unic.
Tipurile de date implementate în limbajul Turbo Pascal se pot clasifica astfel:
- Tipuri simple: - tipuri predefinite - întregi
- reale
- logice
- caracter
- tipul enumerare
- tipul subdomeniu (interval)
- Tipuri de date structurate:
- tipul de date tablou (array)
- tipul de date şi de caractere (string)
- tipul de date mulţime (set)
- tipul de date înregistrare (second)
- tipul de date fişier (file)
- tipul de date obiect (object)
- Tipuri de date pointer (referinţă)
- Tipul procedural
Tipurile date simple: întregi, logice, caracter, enumerare şi subdomeniu constituie
tipuri ordinale de date, adică tipuri caracterizate printr-o mulţime finită de valori, tipuri
caracterizate printr-o mulţime finită de valori, pe care este definită o ordine liniară şi, astfel,
pentru orice element al unui asemenea tip se poate stabili numărul său de ordine (cu ajutorul
funcţiei ORD), elementul predecesor (cu funcţia PRED) şi elementul succesor (cu funcţia
SUCC).
Tipurile reale nu sunt tipuri ordinale.
Declararea tipurilor de date definite de utilizator se face în secţiunea declarării type,
având următoarea sintaxă:
type nume_tip_1 = tip_1;
nume_tip_2 = tip_2;
....................
4 Algoritmi şi programare – Curs 3
unde nume_tip_1, nume_tip_2,... reprezintă identificatori cu noilor tipuri de date, iar tip_1,
tip_2, ... sunt tipuri de date standard sau definite de utilizator.

Tipuri de date simple, predefinite
- Tipuri întregi, desemnate prin identificatorii standard: byte, shortint, integer, word,
logint, reprezintă submulţimi de numere întregi. Domeniile de valori şi modul lor de
reprezentare în memoria internă a calculatorului sunt prezentate în tabelul următor:
Tip Domeniu de valori Reprezentare
internă
Semn
Byte 0..255 1 octet fără semn
ShortInt -128..127 1 octet cu semn
Integer -32768..32767 2 octet cu semn
Word 0..65535 2 octet fără semn
LongInt -2147483648..2147483647 4 octet cu semn
Datele corespunzătoare tipurilor întregi cu semn sunt reprezentate în cod
complementar.
Operaţii efectuate cu date întregi:
Operaţii aritmetice: +, -, *, / (cu rezultat real) MOD, DIV - rest şi cât.
Operaţii aritmetice pe biţi:
- not (negaţia aritmetică) - operator folosit pentru complementarea reprezentării binare
a unui număr întreg.
- shl - deplasare la stânga a reprezentării interne a unui număr întreg cu un număr
specificat de poziţii binare. Sintaxa folosirii acestui operator este:
 a shl b
- şi are ca rezultat deplasarea la stânga a reprezentării interne a lui a cu b poziţii binare.
- shr - operator de deplasare la dreapta a reprezentării interne a unui număr întreg cun
un anumit număr de poziţii binare. Sintaxa este asemănătoare cu a operatorului shl.
- and, or, xor sunt operatorii şi aritmetic, sau aritmetic şi sau exclusiv aritmetic. Ei se
aplică bit cu bit reprezentărilor interne a celor două numere.
Observaţie.
În limbajul Turbo Pascal există constantele simbolice predefinite MaxInt şi
MaxLongint reprezentând cel mai mare număr de tip integer, respectiv cel mai mare număr
de tip longint.

- Tipuri reale - desemnat prin identificatori standard real, single double, extended şi
comp, reprezintă submulţimi de numere reale. Elementele tipurilor reale sunt reprezentate, în
Algoritmi şi programare – Curs 3 5
memoria internă a calculatorului în virgulă mobilă. Domeniile de valori, dimensiunea
reprezentării şi precizia valorilor se prezintă conform tabelului.
Tip Domeniu de valori Reprezentare
internă
Cifre
semnificative
Real 2.9E-29..1.7E38 6 octeţi 11-12
Single 1.5E-29..3.4E38 4 octeţi 7-8
Double 5.0E-324..1.7E308 8 octeţi 15-16
Extended 3.4E-4932..1.1E4932 10 octeţi 19-20
Comp -2.0E-63+1..2.0E63-1 8 octeţi 19-20
Tipul de date comp este o mulţime de numere întregi, cu valori în intervalul
specificat, dar în calcule intră ca un număr real fără parte fracţionară.
Asupra datelor de tip real se pot aplica operatorii aritmetici +, -, *, / precum şi
operatorii relaţionali (=, <>, <, <=, >, >=).
Observaţii
În limbajul Turbo Pascal exista constanta simbolică de tip real PI reprezentând
numărul t.
Asupra datelor de tip numeric (întregi sau reale) se pot aplica şi funcţiile
standard prezentate mai jos:
ABS(x) - valoarea absolută (modulul) numărului x;
SQR(x) - x la puterea a doua;
SQRT(x) - radical din x;
EXP(x) - funcţia exponenţială e
x
;
LN(x) - logaritm natural din x;
SIN(x), COS(x), ARCTAN(x) - funcţiile trigonometrice sin, cos, arctg;
INT(x) - partea întreagă a lui x;
FRAC(x) - partea fracţionară a lui x;

- Tipul boolean (logic) desemnat prin identificatorul standard boolean, este
reprezentat printr-o mulţime formată din 2 elemente false şi true (fals şi adevărat). Pentru a
se asigura compatibilitatea cu sistemul Windows, în versiunea 7.0 a limbajului Turbo Pascal
au fost introduse tipurile bytebool, wordbool şi longbool. Cele 4 tipuri booleene sunt
reprezentate astfel:
- Boolean - pe 8 biţi (1 octet)
- Bytebool - pe 8 biţi (1 octet)
- Wordbool - pe 16 biţi (2 octeţi)
- Longbool - pe 32 biţi (4 octeţi)
Deoarece tipul boolean este un tip ordinal, avem relaţiile:
- false < true
- ord (false) = 0
6 Algoritmi şi programare – Curs 3
- ord (true) = 1
- succ (false) = true
- pred (true) = false

Tipul de date caracter CHAR
Tipul CHAR este definit de o mulţime finită şi ordonată de caractere care cuprinde:
litere, cifre, caracterul spaţiu, caractere speciale, etc. Setul de caractere utilizat este setul
ASCII.
Un caracter se reprezintă în memoria internă printr-un grup de 8 cifre binare (1 octet).
Valoarea unui caracter se poate scrie în mai multe moduri: - un caracter imprimabil cuprins
între apostrofe:
‘a’, ‘+’, ‘$’, ‘F’, etc.
- un număr în intervalul 0 ÷ 255 (codul ASCII), precedat de caracter #:
#65 (‘A’), #40(‘0’).
Tipul char este un tip ordinal, deci mulţimea caracterelor este ordonată, în consecinţă
se pot aplica funcţiile ord, pred şi succ. Funcţia ord reprezintă şi codul ASCII al caracterului.
O altă funcţie, specifică tipului CHAR este funcţia chr care furnizează caracterul
corespunzător unui anumit cod ASCII.
Exemple:
- ORD (‘0’) = 48 - chr(‘50’) = ‘2’ - succ (‘B’) = ‘C’
- ORD (‘1’) = 49 - chr(‘66’) = ‘B’ - pred (‘A’) = ‘@’
- ORD (‘A’) = 65 - chr(‘90’) = ‘Z’ - succ (‘a’) = ‘b’
Se observă că funcţiile ord şi chr sunt funcţii inverse. Astfel, dacă C este o variabilă
de tip CHAR, iar x o variabilă de tip byte care reprezintă codul ASCII al caracterului C, vom
avea:
ORD(C) = x; CHR(x) = C
sau ORD(CHR(x)) = x CHR(ORD(C)) = C.
Caracterele pot fi comparate între ele pe baza poziţiei lor în setul de caractere ASCII;
astfel:
C1< C2 · ORD(C1) < ORD(C2)
Asupra datelor de tip CHAR se poate aplica funcţia predifinită UPCASE. Această
funcţie converteşte literele mici în litere mari; iar celelalte caractere nu sunt afectate de ea.
Instrucţiunile limbajului Pascal

Instrucţiuni simple

Algoritmi şi programare – Curs 3 7
O instrucţiune se numeşte simplă dacă nu conţine alte instrucţiuni.
- Instrucţiunea de atribuire are forma:
v: = e;
unde v este o variabilă, iar e este o expresie.
Prin execuţia unei instrucţiuni de atribuire, expresia e este evaluată şi rezultatul se
atribuie variabilei v. Variabila şi rezultatul evaluării trebuie să fie de tipuri identice sau de
tipuri compatibile.
Două tipuri sunt compatibile dacă ambele sunt subdomenii ale aceluiaşi tip de bază
sau unul este subdomeniul al celuilalt.
Excepţie de la această regulă fac variabilele de tip real şi expresiile de tip întreg.
Exemple:
delta: = b*b-4*a*c;
h: = (x<y+z) or (a>=b+c);
Instrucţiunea apel de procedură realizează, aşa cum sugerează şi denumirea, apelul
unei proceduri. Acest apel se face prin numele procedurii urmat eventual de o listă de
argumente (variabile şi expresii) separate prin virgulă:
nume(p
1
, p
2
,...,p
n
);
Parametrii p
1
, p
2
, ...,p
n
pot fi constante, variabile, expresii, funcţii, proceduri.
Procedura se defineşte la începutul programului şi se inserează în locul în care se doreşte
executarea ei.
Exemple:
1. Instrucţiunea de citire care constă din apelul procedurii read sau readln :
read(v1,v2, . . . vn);
sau
readln(v1,v2, . . . vn);

unde v1,v2, . . . ,vn sunt variabilele ce urmează a fi citite.
2. Instrucţiunea de scriere care constă din apelul procedurii write sau writeln:
Write(e1,e2, . . en);
sau
Writeln(e1,e2,. . .,en);
unde write şi writeln sunt procedurile standard de scriere iar e1,e2, . . ., en sunt expresii. În
urma execuţiei instrucţiunii de scriere pe ecranul utilizator vor fi afişate valorile celor n
expresii în ordinea în care au fost precizate în instrucţiunea de scriere. Deosebirea dintre cele
două forme ale instrucţiunii de scriere este , la fel ca la instrucţiunea de citire : în primul caz
, după afişarea celor n valori cursorul va rămâne după ultima valoare afişată iar în cazul al
doilea cursorul va trece în prima poziţie din rândul următor .
8 Algoritmi şi programare – Curs 3

Formatele de scriere utilizate în instrucţiunea de scriere

Există trei formate de afişare prezentate mai jos :

a) e
Acesta este formatul implicit , în care o expresie reală se afişează utilizându-se 17 caractere :
semn, 11 cifre semnificative, punct zecimal şi 4 caractere pentru exponent (dintre care unul
pentru semnul exponentului).

Exemplu :
-5.4790000000E+04 adică numărul -54790.

b) e:nn
Acest format este un format cu exponent în care numărul este aliniat la dreapta într-un câmp
de cel puţin nn caractere ; tipărirea cu exponent a unei valori reale necesită cel puţin 8
caractere : semn, punct zecimal , o cifră la partea întreagă, una la partea zecimală şi 4
caractere pentru reprezentarea exponentului.
Dacă cu acest format se va afişa un număr întreg sau un caracter atunci el se va afişa
în cadrul a nn poziţii încadrat la dreapta în această zonă.

Exemplu :
Write(x:4);
unde x are valoarea 23. În urma execuţiei acestei instrucţiuni se va afişa :
_ _ 23

c) e:nn:zz
Acesta este un format fără exponent care se aplică numai numerelor reale . Numărul real
afişat cu acest format se va afişa într-un câmp de cel puţin nn caractere cu un număr de zz
zecimale.

Exemplu:
Write(x:5:2);
unde x are valoarea 12.5. Se va afişa :
_12.5
Dacă x are valoarea 12.456 atunci se va afişa :
12.45

Instrucţiunea IF

Instrucţiunea IF are rolul de a decide care este instrucţiunea ce urmează să se
execute dintre două alternative posibile.
Algoritmi şi programare – Curs 3 9

Condiţia este o expresie de tip logic (boolean) .
Efectul execuţiei acestei instrucţiuni este următorul : se evaluează condiţia de tip logic ;
dacă aceasta este adevărată se execută instrucţiune_1 iar în caz contrar se execută
instrucţiune_2.

Instrucţiunea CASE

Instrucţiunea CASE utilizează o expresie (selector) de tip ordinal şi o listă de
instrucţiuni, fiecare instrucţiune fiind asociată cu una sau mai multe constante ale tipului
selector. Fiecare constantă se asociază cel mult unei instrucţiuni.
Forma generală a instrucţiunii este:

CASE selector OF
lista_1:instrucţiune_1;
lista_2:instrucţiune_2;
. . .
lista_n:instrucţiune_n
ELSE instrucţiune_n+1
END;

Instrucţiunea CASE are următoarea semnificaţie: se compară pe rând valoarea
selectorului cu lista_1, lista_2, . . . lista_n; în cazul în care se găseşte o egalitate a
selectorului cu una din constantele din cele n liste, se execută instrucţiunea
corespunzătoare, altfel se execută instrucţiune_n+1.
Observaţie: partea cu ELSE este opţională.
Exemplu: Se consideră următoarea funcţie:
( )
( )
( )
f x
x x dacă x
x daca x
x daca x
daca x
=
÷ + ÷ < <
÷ s <
÷ s <
>
¦
´
¦
¦
¹
¦
¦
2
2
2
5 1 35 10
1 10 20
5 1 20 35
0 35

unde x este un număr întreg. Se cere un program care să calculeze valoarea acestei
funcţii pentru un x oarecare citit de la tastatură.
10 Algoritmi şi programare – Curs 3
Vom rezolva această problemă în două variante: cu instrucţiunea IF şi cu
instrucţiunea CASE. Reprezentăm algoritmul de rezolvare prezentat în schema logică din
figură.

































Varianta a II-a

Se observă din varianta anterioară că variabila x este comparată pe rând cu
domeniul (-35 ,10), [10,20),şi [20,35). Din acest motiv vom putea considera pe x ca fiind
selector într-o instrucţiune CASE, întrucât x este de tip întreg deci de un tip ordinal.
Programul care utilizeată instrucţiunea CASE este următorul:

PROGRAM Exemplul_8_3;
VAR x,f:integer;
BEGIN
write('x='); readln(x);
CASE x OF
-34..9: f:=x*x-5*x+1;
Algoritmi şi programare – Curs 3 11
10..19: f:=sqr(x-1);
20..34: f:=sqr(5*x-1)
ELSE f:=0;
END;
writeln('f=',f); readln;


:= . Spre deosebire de predefiniţi pot fi redefiniţi de către utilizatori. De exemplu. ) . 3. end. Un identificator este o secvenţă de litere şi cifre. etc. case. El desemnează variabile. asm. } . < . else. intreg’.1415926536E+00 este modul implicit de afişare al constantei PI  Şirurile de caractere. array. ’ . if.. prima fiind obligatoriu literă. Comentariile nu influenţează execuţia programului şi au doar un rol explicativ. etc.  delimitatori: ( . Sintaxa (modul de scriere al unui număr) în limbajul Pascal este: parte_întreagă. / .  cuvinte cheie: and. Acestea sunt:  Identificatorii. begin. Unităţile lexicale ale limbajului Pascal Unităţile lexicale sunt grupuri de caractere cu semnificaţie de sine stătătoare. Cuvintele cheie pot fi folosite doar în scopul pentru care au fost definite. [ . cuvintele cheie. ele nu pot fi redefinite de către utilizatori. reprezentând operatori şi delimitatori  operatori: .  Comentariile care sunt reprezentate de o secvenţă de caractere incluse între paranteze acolade. funcţii. Un număr desemnează o valoare numerică întreagă sau reală. >. ‘ Introduceti un nr.parte_fracţionară E cifre_exponent exemplu: 3. ] . etc. = . identificatorii . constante. const. { . tipuri. O parte a identificatorilor sunt predefiniţi (standard) iar o altă parte sunt definiţi de către utilizator.3. +. nume de proceduri.2 Algoritmi şi programare – Curs 3  simboluri speciale. *.  Numerele. care reprezintă o secvenţă de caractere cuprinse între apostroafe.

tipul de date tablou (array) .. având următoarea sintaxă: type nume_tip_1 = tip_1...Tipuri de date pointer (referinţă) .întregi . iar datele prin declaraţii. variabile..Tipuri simple: ... constante. nume_tip_2 = tip_2..tipuri predefinite .logice .tipul subdomeniu (interval) . tipuri caracterizate printr-o mulţime finită de valori. adică tipuri caracterizate printr-o mulţime finită de valori..tipul de date mulţime (set) . Un tip de date defineşte atât o mulţime de valori. .caracter . logice..reale ..tipul de date obiect (object) . pe care este definită o ordine liniară şi. caracter... pentru orice element al unui asemenea tip se poate stabili numărul său de ordine (cu ajutorul funcţiei ORD).. Tipurile de date implementate în limbajul Turbo Pascal se pot clasifica astfel: .. cât şi o mulţime de operaţii ce se pot efectua cu aceste valori.tipul enumerare . astfel. Tipurile reale nu sunt tipuri ordinale.Tipuri de date structurate: . ..Algoritmi şi programare – Curs 3 3 Tipuri de date. Declararea tipurilor de date definite de utilizator se face în secţiunea declarării type.Tipul procedural Tipurile date simple: întregi. elementul predecesor (cu funcţia PRED) şi elementul succesor (cu funcţia SUCC).. Fiecărei date i se asociază un tip unic.tipul de date şi de caractere (string) ..tipul de date fişier (file) . expresii Un program Pascal conţin o descriere a acţiunilor ce trebuie executate de calculator. Acţiunile sunt descrise prin instrucţiuni. precum şi o descriere a datelor ce sunt manevrate de aceste acţiuni.. enumerare şi subdomeniu constituie tipuri ordinale de date..tipul de date înregistrare (second) .

iar tip_1. Tip Domeniu de valori Observaţie. xor sunt operatorii şi aritmetic.255 1 octet fără semn ShortInt -128.operator de deplasare la dreapta a reprezentării interne a unui număr întreg cun un anumit număr de poziţii binare. shortint. Domeniile de valori şi modul lor de reprezentare în memoria internă a calculatorului sunt prezentate în tabelul următor: Reprezentare Semn internă Byte 0. sunt tipuri de date standard sau definite de utilizator.rest şi cât. În limbajul Turbo Pascal există constantele simbolice predefinite MaxInt şi MaxLongint reprezentând cel mai mare număr de tip integer. reprezintă submulţimi de numere reale. nume_tip_2. Operaţii aritmetice pe biţi: not (negaţia aritmetică) . / (cu rezultat real) MOD. extended şi comp. shl . Sintaxa folosirii acestui operator este:  a shl b şi are ca rezultat deplasarea la stânga a reprezentării interne a lui a cu b poziţii binare. Sintaxa este asemănătoare cu a operatorului shl. reprezintă submulţimi de numere întregi. sau aritmetic şi sau exclusiv aritmetic. *... DIV ... and. integer.. Elementele tipurilor reale sunt reprezentate.Tipuri reale . single double. Tipuri de date simple. reprezintă identificatori cu noilor tipuri de date. Operaţii efectuate cu date întregi: Operaţii aritmetice: +.deplasare la stânga a reprezentării interne a unui număr întreg cu un număr specificat de poziţii binare. logint. predefinite .32767 2 octet cu semn Word 0. shr .. or..65535 2 octet fără semn LongInt -2147483648. respectiv cel mai mare număr de tip longint.4 Algoritmi şi programare – Curs 3 unde nume_tip_1.Tipuri întregi.operator folosit pentru complementarea reprezentării binare a unui număr întreg. tip_2..desemnat prin identificatori standard real.. Ei se aplică bit cu bit reprezentărilor interne a celor două numere. -. desemnate prin identificatorii standard: byte. .. . în .127 1 octet cu semn Integer -32768. word.2147483647 4 octet cu semn Datele corespunzătoare tipurilor întregi cu semn sunt reprezentate în cod complementar.

0 a limbajului Turbo Pascal au fost introduse tipurile bytebool.. <>.partea întreagă a lui x. Observaţii În limbajul Turbo Pascal exista constanta simbolică de tip real PI reprezentând numărul . >. SQRT(x) . este reprezentat printr-o mulţime formată din 2 elemente false şi true (fals şi adevărat).. EXP(x) ..partea fracţionară a lui x. Asupra datelor de tip real se pot aplica operatorii aritmetici +.funcţia exponenţială ex.4E-4932. SQR(x) . Domeniile de valori. ARCTAN(x) .pe 8 biţi (1 octet) . LN(x) . <=.funcţiile trigonometrice sin..1E4932 10 octeţi 19-20 Comp -2. SIN(x).Tipul boolean (logic) desemnat prin identificatorul standard boolean.2. în versiunea 7. Cele 4 tipuri booleene sunt reprezentate astfel: . avem relaţiile: . <. / precum şi operatorii relaţionali (=.Boolean . Pentru a se asigura compatibilitatea cu sistemul Windows. arctg.Algoritmi şi programare – Curs 3 5 memoria internă a calculatorului în virgulă mobilă.0E-324.7E38 6 octeţi 11-12 Single 1.Bytebool . INT(x) .9E-29.pe 8 biţi (1 octet) . COS(x). >=).false < true .. wordbool şi longbool. dar în calcule intră ca un număr real fără parte fracţionară. cos. Reprezentare Cifre internă semnificative Real 2.1.pe 16 biţi (2 octeţi) .radical din x. dimensiunea reprezentării şi precizia valorilor se prezintă conform tabelului.logaritm natural din x.0E-63+1.Wordbool .1.0E63-1 8 octeţi 19-20 Tipul de date comp este o mulţime de numere întregi. Asupra datelor de tip numeric (întregi sau reale) se pot aplica şi funcţiile standard prezentate mai jos: ABS(x) . cu valori în intervalul specificat.1. FRAC(x) .ord (false) = 0 Tip Domeniu de valori .7E308 8 octeţi 15-16 Extended 3.x la puterea a doua. *.5E-29. -. .valoarea absolută (modulul) numărului x.Longbool .pe 32 biţi (4 octeţi) Deoarece tipul boolean este un tip ordinal.3.4E38 4 octeţi 7-8 Double 5.

Instrucţiunile limbajului Pascal Instrucţiuni simple . O altă funcţie. ‘F’.succ (‘B’) = ‘C’ . deci mulţimea caracterelor este ordonată. Un caracter se reprezintă în memoria internă printr-un grup de 8 cifre binare (1 octet). dacă C este o variabilă de tip CHAR. Astfel. CHR(x) = C ORD(CHR(x)) = x CHR(ORD(C)) = C.pred (‘A’) = ‘@’ . iar x o variabilă de tip byte care reprezintă codul ASCII al caracterului C. iar celelalte caractere nu sunt afectate de ea. cifre. Setul de caractere utilizat este setul ASCII. Exemple: .ORD (‘0’) = 48 . #40(‘0’). caractere speciale.chr(‘50’) = ‘2’ . un număr în intervalul 0  255 (codul ASCII). pred şi succ. Caracterele pot fi comparate între ele pe baza poziţiei lor în setul de caractere ASCII. vom avea: ORD(C) = x.ORD (‘A’) = 65 .6 Algoritmi şi programare – Curs 3 . precedat de caracter #: #65 (‘A’). Valoarea unui caracter se poate scrie în mai multe moduri: . caracterul spaţiu.pred (true) = false Tipul de date caracter CHAR Tipul CHAR este definit de o mulţime finită şi ordonată de caractere care cuprinde: litere.succ (‘a’) = ‘b’ Se observă că funcţiile ord şi chr sunt funcţii inverse. Funcţia ord reprezintă şi codul ASCII al caracterului. sau astfel: C1< C2  ORD(C1) < ORD(C2) Asupra datelor de tip CHAR se poate aplica funcţia predifinită UPCASE. ‘$’.ORD (‘1’) = 49 . specifică tipului CHAR este funcţia chr care furnizează caracterul corespunzător unui anumit cod ASCII.chr(‘90’) = ‘Z’ . etc.chr(‘66’) = ‘B’ . ‘+’. etc.un caracter imprimabil cuprins între apostrofe: ‘a’. Tipul char este un tip ordinal. în consecinţă se pot aplica funcţiile ord.succ (false) = true .ord (true) = 1 . Această funcţie converteşte literele mici în litere mari.

. variabile. . Parametrii p1. 2. Variabila şi rezultatul evaluării trebuie să fie de tipuri identice sau de tipuri compatibile. .v2. h: = (x<y+z) or (a>=b+c). la fel ca la instrucţiunea de citire : în primul caz . en).. apelul unei proceduri... vn). unde v este o variabilă. Instrucţiunea apel de procedură realizează. sau readln(v1. Exemple: delta: = b*b-4*a*c. unde write şi writeln sunt procedurile standard de scriere iar e1. Deosebirea dintre cele două forme ale instrucţiunii de scriere este . . sau Writeln(e1.. Procedura se defineşte la începutul programului şi se inserează în locul în care se doreşte executarea ei.. . . . . . În urma execuţiei instrucţiunii de scriere pe ecranul utilizator vor fi afişate valorile celor n expresii în ordinea în care au fost precizate în instrucţiunea de scriere. funcţii.vn sunt variabilele ce urmează a fi citite. după afişarea celor n valori cursorul va rămâne după ultima valoare afişată iar în cazul al doilea cursorul va trece în prima poziţie din rândul următor . Prin execuţia unei instrucţiuni de atribuire. iar e este o expresie. aşa cum sugerează şi denumirea. .Algoritmi şi programare – Curs 3 7 O instrucţiune se numeşte simplă dacă nu conţine alte instrucţiuni.e2. Două tipuri sunt compatibile dacă ambele sunt subdomenii ale aceluiaşi tip de bază sau unul este subdomeniul al celuilalt. Excepţie de la această regulă fac variabilele de tip real şi expresiile de tip întreg.v2. en sunt expresii. Acest apel se face prin numele procedurii urmat eventual de o listă de argumente (variabile şi expresii) separate prin virgulă: nume(p1. . expresii. ..e2. .. Instrucţiunea de scriere care constă din apelul procedurii write sau writeln: Write(e1. .en).. .. Exemple: 1.p n pot fi constante. .v2. p2. proceduri. Instrucţiunea de citire care constă din apelul procedurii read sau readln : read(v1. expresia e este evaluată şi rezultatul se atribuie variabilei v. unde v1. . .e2. vn). . . p2.pn).Instrucţiunea de atribuire are forma: v: = e. .

una la partea zecimală şi 4 caractere pentru reprezentarea exponentului. punct zecimal şi 4 caractere pentru exponent (dintre care unul pentru semnul exponentului). unde x are valoarea 23. tipărirea cu exponent a unei valori reale necesită cel puţin 8 caractere : semn. Numărul real afişat cu acest format se va afişa într-un câmp de cel puţin nn caractere cu un număr de zz zecimale. Se va afişa : _12. Dacă cu acest format se va afişa un număr întreg sau un caracter atunci el se va afişa în cadrul a nn poziţii încadrat la dreapta în această zonă. În urma execuţiei acestei instrucţiuni se va afişa : _ _ 23 c) e:nn:zz Acesta este un format fără exponent care se aplică numai numerelor reale . Exemplu : Write(x:4).456 atunci se va afişa : 12. o cifră la partea întreagă. . unde x are valoarea 12. 11 cifre semnificative. Exemplu : -5.4790000000E+04 adică numărul -54790.8 Algoritmi şi programare – Curs 3 Formatele de scriere utilizate în instrucţiunea de scriere Există trei formate de afişare prezentate mai jos : a) e Acesta este formatul implicit .5 Dacă x are valoarea 12. b) e:nn Acest format este un format cu exponent în care numărul este aliniat la dreapta într-un câmp de cel puţin nn caractere . în care o expresie reală se afişează utilizându-se 17 caractere : semn.5. punct zecimal . Exemplu: Write(x:5:2).45 Instrucţiunea IF Instrucţiunea IF are rolul de a decide care este instrucţiunea ce urmează să se execute dintre două alternative posibile.

. fiecare instrucţiune fiind asociată cu una sau mai multe constante ale tipului selector. Instrucţiunea CASE are următoarea semnificaţie: se compară pe rând valoarea selectorului cu lista_1. Exemplu: Se consideră următoarea funcţie:  x 2  5x  1 2    x  1 f  x   2  5x  1  0  dacă  35  x  10 daca 10  x  20 daca 20  x  35 daca x  35 unde x este un număr întreg. Instrucţiunea CASE Instrucţiunea CASE utilizează o expresie (selector) de tip ordinal şi o listă de instrucţiuni. Observaţie: partea cu ELSE este opţională. . în cazul în care se găseşte o egalitate a selectorului cu una din constantele din cele n liste. altfel se execută instrucţiune_n+1. . Efectul execuţiei acestei instrucţiuni este următorul : se evaluează condiţia de tip logic .. Se cere un program care să calculeze valoarea acestei funcţii pentru un x oarecare citit de la tastatură. lista_2. .Algoritmi şi programare – Curs 3 9 Condiţia este o expresie de tip logic (boolean) . . dacă aceasta este adevărată se execută instrucţiune_1 iar în caz contrar se execută instrucţiune_2. Forma generală a instrucţiunii este: CASE selector OF lista_1:instrucţiune_1. lista_n. Fiecare constantă se asociază cel mult unei instrucţiuni. se execută instrucţiunea corespunzătoare.. lista_n:instrucţiune_n ELSE instrucţiune_n+1 END. lista_2:instrucţiune_2.

. VAR x. Varianta a II-a Se observă din varianta anterioară că variabila x este comparată pe rând cu domeniul (-35 .9: f:=x*x-5*x+1. BEGIN write('x='). CASE x OF -34. [10. Din acest motiv vom putea considera pe x ca fiind selector într-o instrucţiune CASE. Programul care utilizeată instrucţiunea CASE este următorul: PROGRAM Exemplul_8_3.10 Algoritmi şi programare – Curs 3 Vom rezolva această problemă în două variante: cu instrucţiunea IF şi cu instrucţiunea CASE.20). . întrucât x este de tip întreg deci de un tip ordinal.10). Reprezentăm algoritmul de rezolvare prezentat în schema logică din figură. readln(x).şi [20.f:integer.35).

. readln. .34: f:=sqr(5*x-1) ELSE f:=0. 20. END. writeln('f='..f).19: f:=sqr(x-1).Algoritmi şi programare – Curs 3 11 10.

Sign up to vote on this title
UsefulNot useful