Sunteți pe pagina 1din 39

LUCRAREA DE LABORATOR NR.

2
I. Scopul lucrarii: Limbajul Turbo Pascal. Structura unui program.
Elementele de baza ale limbajului. Identificatori, cuvinte cheie sau rezervate
, cuvinte utilizator, separatori. Tipuri de date standard si operatii asupra ace
stor tipuri de date.
II. Continutul lucrarii:
1. Caracteristicile generale ale Limbajului Turbo Pascal (LTP). Stru
ctura generala a unui program in LTP.
2. Elementele de baza ale limbajului. Identificatori, cuvinte cheie
sau rezervate, cuvinte utilizator, separatori. Tipuri de date standard si operat
ii asupra acestor tipuri de date..
3. Probleme propuse pentru rezolvare.
4. Continutul referatului.
III.Desfasurarea lucrarii:
1. Limbajul de programare Turbo Pascal (LTP)
1.1. Caracteristici generale
Limbajul Turbo Pascal este un limbaj de programare evoluat, zis si d
e nivel inalt, deoarece programele scrise in acest limbaj sunt independente de c
alculatorul sau de masina pe care se vor executa.
Limbajul Turbo Pascal este usor de invatat si permite scrierea de pr
ograme usor de citit si structurate dispunand de noi facilitati de manipulare a
datelor.
Dintre caracteristicile de baza ale Limbajului Turbo Pascal amintim:
- LTP este un limbaj universal care poate fi utilizat in rezolvare
a tuturor tipurilor de probleme (tehnico-stiintifice, economice, educationale, p
relucrarea textelor etc.)
- LTP este un limbaj structurat care permite scrierea modulara a pr
ogramelor. Din acest punct de vedere orice program este compus dintr-un antet ca
re defineste numele programului si corpul programului. Corpul programului este c
ompus din sectiuni declarative si din sectiunea instructiunilor executabile.
- LTP este un limbaj algoritmic care permite transcrierea directa a
algoritmilor executabili pe o masina data.
1.2. Structura generala a unui program in LTP
PROGRAM NumeDeProgram;
[USES NumeUnit1[,NumeUnit2]...;]
[LABEL
{declaratii de etichete}
etic1[,etic2]...;]
[CONST
{declaratii de constante}]
[TYPE
{declaratii de tipuri de date utilizator}
[VAR
{declaratii de variabile}]
{definirea procedurilor utilizate de program}
[PROCEDURE NumeDeProcedura1(ListaParamFormali1)
....................................................................
.........................
BEGIN
{descrierea subalgoritmului procedurii in LTP=
instructiunile executabile ale procedurii}
END;]
....................................................................
.......
{definirea functiilor utilizate de program}
[FUNCTION NumeDeFunctie11(ListaParamFormali1):TipFunctie;
....................................................................

.........................
BEGIN
{descrierea subalgoritmului functiei in LTP=
instructiunile executabile ale functiei}
NumeFunctie1:=Expresie;
END;]
....................................................................
.......
BEGIN {inceputul programul principal}
{descrierea algoritmului programului principal =
instructiunile executabile ale programului principal}
END. {sfarsitul programului principal}
unde:
- PROGRAM NumeDeProgram; reprezinta antetul programului in care se a
tribuie un nume acestuia ales arbitrar de programator NumeDeProgram;
- Blocul sau corpul programului este alcatuit din sase sectiuni car
e trebuie sa apara in urmatoarea ordine:
.. Sectiunea USES. In aceasta sectiune, daca este prezenta, se preci
zeaza toate structurile externe de program numite si unituri (NumeUnit1,NumeUnit
2,...) ce vor fi incluse in timpul compilarii si folosite ulterior in program. A
ceste unituri pot fi unituri predefinite ale LTP (DOS, SYSTEM, CRT, GRAPH etc.)
sau pot fi unituri definite anterior de utilizator.
Exemplu:
USES DOS, GRAPH; {precizarea uniturilor predefinite DOS (care contin
e comenzi DOS) si GRAPH (care contine constante, variabile, proceduri si functii
necesare realizarii de desne, animatii etc)
.. Sectiunea de etichete LABEL. O eticheta este un numar de la 1 la
9999 sau un identificator ales de utilizator care se poate plasa inaintea oricar
ei instructiuni executabile in vedrea ramificarii executiei programului spre ace
asta instructiune cu ajutorul instructiunii de salt neconditionat "GOTO eticheta
" din alte zone ale sectiunii executabile a programului. Daca sunt utilizate eti
chete in program atunci acestea trebuie declarate obligatoriu in sectiunea LABEL
etic1,etic2,etic3... Orice eticheta folsita in program trebuie sa fie declarat
in sectiunea LABEL, in sectiunea executabila a programului inaintea unei instruc
tiuni executabile si cel putin intr-o instructiune de salt neconditionat GOTO. P
rincipiile programarii structurate exclud folosirea etichetelor si deci implicit
a instructiunilor de salt neconditionat GOTO.
Exemplu:
......................
LABEL 10,20,etfin;
............................
BEGIN
............................
10: s:=a+b;
GOTO etfin;
.............................
20: p:=a*b;
GOTO etfin;
..............................
etfin:
END.
.. Sectiunea CONST. In aceasta sectiune se definesc toate constantel
e utilizate pe parcursul programului. O constanta in LTP este un identificator a
carui valoare ramane neschimbata pe parcursul executarii programului. O constan
ta poate fi simbolica (propriu-zisa) sau cu tip, caz in care nu este altceva dec
at o variabila initializata. Valoarea atribuita unei constante depinde de tipul
acesteia, de domeniul sau de definitie.
Forma generala a declaratiei unei constante sinbolice este:
CONST
NumeConstantaSimbolica=ExpresieConstanta;

unde:
- NumeConstantaSimbolica este un identificator ales de programator c
are denumeste o constanta simbolica;
- ExpresieConstanta este o expresie care poate fi evaluata la compil
area programului. ExpresieConstanta este o multime de literali numerici (valori
numerice), constante simbolice definite anterior sau functii predefinite (ABS, L
ENGTH, ORT, ROUND, SWAP, CHR, LO, PRED, SIZEOF, TRUNC, HI, ODD, PTR sau SUCC) le
gate prin operatori adecvati.
Exemplu:
CONST
c1=200; c2=-123.45; c3=-1.3456e-2; char1='+';
enter=#13; max=150; ind12=max DIV 2 + c1;
Fiecare declaratie de constanta simbolica are ca efect atribuirea va
lorii expresiei din drapta semnului egal la constanta simbolica din partea stang
a a semnului egal.
Forma generala a declaratiei unei constante cu tip este:
CONST
NumeConstantaCuTip:TipConstanta/DescriereTip=ExpresieConstanta;
unde:
- NumeConstantaCuTip este un identificator ales de programator care
denumeste o constanta cu tip respectiva;
- TipConstanta este tipul de data, standard sau utilizator, la care
apartine constanta cu tip definita (variabila initializata);
- DescriereTip - reprezinta o descriere a tipului constantei avand a
ceeasi sintaxa ca si in sectiunea TYPE;
- ExpresieConstanta - este o expresie de tipul TipConstanta sau de f
orma descrierii tipului respectiv a carei valoare se va atribui constantei defin
ite (NumeConstantaCuTip) si poate fi o expresie constanta propriu-zisa corespunz
atoare unui tip standard simplu (intreg, real, logic, caracter etc) sau o consta
nta corespunzatoare unui tip structurat definit de utilizator (constanta ARRAY (
tablou), RECORD (inregistrare), SET (multime) NIL (referinta sau pointer))
Exemple:
CONST
maxval:INTEGER=1500;
ZileDePost:ARRAY[0..2] OF STRING[8]=('luni','miercuri','vineri');
MatriceUnitate:ARRAY[1..3,1..3] OF REAL=((1,0,0),(0,1.0),(0,0,1))
;
In lectiile urmatoare va fi detaliat si exemplificat modul de declar
are al constantelor pentru fiecare tip de data.
.. Sectiunea TYPE. Aceasta sectiune permite declararea tipurilor de
date definite de utilizator, altele decat tipurile standard ale limbajului (intr
eg, real, logic, caracter, emumerare, interval, multime)
Sintaxa generala este:
TYPE
NumeTip1=tip1;
NumeTip2=tip2;
..............................
Exemplu:
TYPE
{declarare tip sir de lungime 80}
TipSir=STRING[80];
{declarare tip vector de 20 elemente intregi}
TipVector=ARRAY[1..20] OF INTEGER;
................................................................................
......
In lectiile urmatoare vor fi prezentate mai multe amanunte despre de
clararea diverselor tipuri de date definite de utilizator
.. Sectiunea VAR. Variabilele sunt identificatorii utilizator care d
enumesc valorile diverselor tipuri de date (standard sau utilizator). In LTP est
e obligatorie declararea tuturor variabilelor structurii de program (program pri

ncipal, procedura sau functie) inaintea utilizarii lor. Aceasta declaratie trebu
ie sa contina numele variabilei si tipul de date (domeniul de definitie) la care
vor apartine valorile variabilei. La lansarea in executie a unui program o vari
abila care nu a facut obiectul unei initializari in sectiunea CONST va avea o va
loare oarecare, aleatoare, necontrolabila. Variabilele, ca si tipurile de date,
pot fi simple sau structurate.
Variabilele simple sunt utilizate pentru a memora cate o singura val
oare, la un anumit moment dat iar variabilele structurate (de tip RECORD sau ARR
AY) pot reprezenta liste de inregistrari, tabele sau alte aranjamente de valori,
sub un acelasi nume.
Declararea variabilelor se face in sectiunea VAR, astfel:
VAR
NumeVar1[,NumeVar2]...:NumeTip/DescriereTip;
[ABSOLUTE segment:deplasament/NumeVar]
unde:
- NumeVar1,NumeVar2,... sunt identificatori utilizator care denumesc
niste variabile;
- NumeTip - este un tip standard sau definit de utilizator care prec
izeaza tipul (domeniul de definitie) varabilelor;
- DescriereTip - descrierea tipului variabilelor, daca acesta nu a f
ost declarat in sectiunea TYPE;
- segment:deplasament - adresa de memorie la care se va depune varia
bila definita;
- NumeVar - identificatorul altei variabile la a carei adresa se va
depune variabila declarata.
Exemple:
VAR
a,b100,ab3:INTEGER; {declararea de variabile de tip intreg}
s,p,suma1,produs20:REAL; {declararea de variabile reale}
v1,v20,pa:ARRAY[1..4,1..5] OF BYTE; {declararea de matrice
bidimensionala de numere intregi reprezentate pe cate
un octet fara semn}
.. Sectiunea procedurilor (PROCEDURE). O procedura este un subprogra
m, asociat unui subalgoritm, care prelucreaza 0,1, sau mai multi parametri de in
trare si furnizeaza dupa apelul si executia sa 0,1, sau mai multi parametri de i
esire numite rezultate, pe care ii returneaza in structura de program care a ape
lat procedura;
.. Sectiunea functiilor (FUNCTION). O functie este un subprogram, as
ociat unui subalgoritm, care prelucreaza 1,2 sau mai multi parametri de intrare
numiti si argumentele functiei si furnizeaza, dupa apelul si executia sa, o sing
ura valoare de iesire numita rezultat asociat numelui functiei, inaintea revenir
ii in structura de program care a apelat functia;
Detalii referitoare la definirea si apelul procedurilor si functiilo
r se vor da la lectia care trateaza aceste structuri de program.
.. Sectiunea executabila a programului principal. Aceasta sectiune c
onduce toate actiunile programului, descriind, cu ajutorul instructiunilor execu
tabile si apeland la procedurile si functiile descrise in program respectiv cont
inute in uniturile declarate in sectiunea USES, algoritmul problemei de rezolvat
.
2. Elementele de baza ale limbajului. Identificatori, cuvinte chei
e sau rezervate, cuvinte utilizator, separatori, literali. Tipuri de date standa
rd si operatii asupra acestor tipuri de date.
2.1. Elementele de baza ale limbajului.
Elementele de baza ale LTP sau alfabetul limbajului se compune din:
- cifrele de la 0 la 9;
- literele mari si mici ale alfabetului latin de la (A la Z si a la
z);
- caracterele speciale:+ - * / = ^ < > ( ) [ ] { } . , : ; _ ' " ? !
@ # $ % &

- simbolurile speciale:
. operatorul de atribuire :+;
. operatorii de relationali:
.. operatorul de egalitate =;
.. operatorul diferit <>;
.. operatorul strict mai mic <;
.. operatorul mai mic sau egal <=;
.. operatorul mai mare >;
.. operatorul mai mare sau egal >=;
. delimitatorul de domeniu .. (exemplu TipInterval=1..10
0);
. delimitatorii de comentariu {text comentariu} sau (*te
xt comentariu*);
Pentru anumite caractere speciale exista si reprezentari echivalente
:
- pentru [ exista (.
- pentru ] exista .)
2.2. Identificatori, cuvinte cheie sau rezervate, cuvinte utilizator
Un identificator este format dintr-un sir de de maximum 63 de caract
ere alfanumerice, din care primul trebuie sa fie o litera, iar urmatoarele pot f
i litere, cifre si liniuta de subliniere (_). Literele pot fi mar sau mici, comp
ilatorul Turbo Pascal considerandu-le identice. Un identificator poate fi format
din caractere fara o semantica anume sau poate fi format din cuvinte cu o seman
tica inspirata din limbajul natural. In cazul in care un identificator este form
at din doua sau mai multe cuvinte, pentru o mai buna lizibilitate, se pot folosi
literele mari pentru primele litere din cuvinte sau liniuta de subliniere(exemp
lu:SumaPrimelorNumereNaturale sau suma_primelor_numere_naturale, ColtulDreaptaSu
s sau coltul_dreapta_sus etc.)
Lungimea identificatorilor influenteaza numai lungimea textului surs
a al programului, nefectand lungimea programului obiect (rezultat dupa compilare
). In practica programarii se prefera folosirea identificatorilor cu semnificati
e semantica in limbajul natural de vorbire pentru a mari lizibilitatea programel
or neavand efect asupra lungimii programului obiect sau asupra timpului de execu
tie al programului. Lungimea identificatorilor influenteaza timpul de scriere al
programelor sursa si de introducere (tastare) putand fi o sursa suplimentara de
erori in compilare. Din acest motiv trebuie facute compromisuri intre lungime s
i lizibilitate.
Identificatorii LTP sunt de doua feluri: identificatori predefiniti,
standard ai limbajului si identificatori alesi de programatori numiti si identi
ficatori utilizator.
Identificatorii standard ai LTP sunt cuvintele cheie sau rezervate c
are identifica parti ale programului cum ar fi:PROGRAM, USES, LABEL, CONST, TYPE
, VAR, FUNCTION ,PROCEDURE, BEGIN si END sau care au semnificatii bine stabilite
:
- ABSOLUTE - precizarea unei adrese absolute de memorie;
- AND - operatorul SI logic sau aritmetic;
- ARRAY - declararea unui tip de data tablou;
- BEGIN - declararea inceputului unui bloc de instructiuni executab
ile
- CASE - descrierea instructiunii conditionale cu mai mult de doua
alternative;
- CONST - identificarea sectiunii declarative de constante;
- DIV - operatorul impartirii intregi;
- DO - utilizat la instructiunilor WHILE, FOR si la calificarea da
telor de tip RECORD
- DOWNTO - utilizat la instructiunea for cu decrementare;
- ELSE - utilizat la instructiunile IF si CASE;
- END - declararea sfarsitului unui bloc de instructiuni;
- EXTERNAL - declararea si apelarea unei proceduri externe scrisa i

n limbaj de
asamblare si tr
adusa in cod obiect;
- FILE - declararea fisierelor fisierelor text, cu tip sau fara tip
;
- FOR - instructiunea de ciclare cu un numar cunoscut de pasi;
- FORWARD - referirea la proceduri si functii definite ulerior;
- FUNCTION - definirea unei functii utilizator;
\
- GOTO - instructiunea de salt neconditionat;
- IF - instructiunea conditionala cu doua alternative;
- IMPLEMENTATION - IN - apartenenta unui element la o multime data;
- INLINE - includerea in program a unor secvente scrise in cod masi
na;
- INTERFACE
- INTERRUPT - declararea unor proceduri de intreruperi care nu se p
ot apela direct din LTP
- LABEL - identificarea sectiunii de etchete;
- MOD - operatorul intreg MODULO (restul impartirii a 2 numere intr
egi);
- NIL - valoarea unei variabile referinta care nu refera nici o var
iabila dinamica;
- NOT - operatorul de negatie aritmetica sau logica;
- OF - la precizarea tipului componentelor unui tablou si la instru
ctiunea Case;
- OR - operatorul sau inclusiv aritmetic sau logic;
- PACKED - declararea datelor impachetate;
- PROCEDURE - definirea unei proceduri;
- PROGRAM - definirea antetului unui program;
- RECORD - definirea datelor de tip inregistare (articol);
- REPEAT - instructiunea de ciclarea cu testarea la sfarsitul ciclu
lui a conditiei de ciclare;
- SET - declararea datelor de tip multime;
- SHL - instructiunea de deplasare aritmetica la stanga cu un numar
de biti;
- SHR - instructiunea de deplasare aritmetica la dreapta cu un numa
r de biti;
- STRING - declararea tipului de date de tip sir de caractere;
- THEN - la instructiunea conditionala if cu doua alternative;
- TO - la instructiunea de ciclare cu un numar cunoscut de pasi;
- TYPE - identificarea sectiunii de definire a tipurilor utilizator
de date;
- UNIT - definirea unei colectii de constante predefinite, declarar
ea unor tipuri de date, variabile, functii si proceduri in forma compilata utili
zate la linkeditarea programelor
- UNTIL - la instructiunea de ciclarea cu testarea la sfarsitul cic
lului a conditiei de ciclare (REPEAT );
- USES - identificarea sectiunii de declarare a unit-urilor de incl
us in program;
- VAR - identificarea sectiunii de declarare a variabileor si a tip
urilor acestora;
- WHILE - instructiunea de ciclarea cu testarea la inceputul ciclul
ui a conditiei de ciclare ;
- WITH - la calificarea datelor din variabilele de tip inregistrare
(RECORD)
- XOR - operatorul sau exclusiv aritmetic si logic;
Exista si alte nume predefinite in LTP care pot fi considerate ident
ificatori standard cum ar fi:
- numele unit-urilor standard (SYSTEM, DOS, CRT, GRAPH,...);
- numele functiilor si procedurilor definite in aceste unituri (RESE

T, REWRITE, READ, READLN, WRITE, WRITELN, SEEK, CLOSE, EOF, EOLN, FILEPOS, FILES
IZE..)
Identificatorii utilizator sunt alesi de programat
or si sunt folositi pentru a identifica constante, tipuri de date, variabile, pr
oceduri, functii si unit-uri proprii.
2.3. Sepatarorii Limbajului Turbo Pascal (LTP).
Separatorii servesc la separarea simbolurilor limbajului si sunt:
- blancul (spatiul)
- sfirsitul de linie (EOLN=End Of LiNe);
- caracterul ";" care serveste pentru separarea instructiunilor;
- comentariul;
Un comentariu incepe fie cu caracterul "{" sau cu "(*" si se incheie
cu caracterul "}" sau cu "*)", avand sintaxa:
- {text pentru intregirea intelegerii programului sursa} sau
- (*text pentru intregirea intelegerii programului sursa*)
Un comentariu poate sa contina orice secventa de caractere sau separatori d
e linii cu exceptia caracterelor "{", "}", "(*", "*)". Comentariul poate fi inlo
cuit printr-un spatiu fara a altera continutul logic al programului.
Lisibilitatea programului este marita prin inserarea in text a comentariilo
r, a blancurilor si a liniilor goale.
2.4. Literali ai Limbajului Turbo Pascal (LTP).
Prin literali se inteleg acele valori concrete corespunzatoare unor
tipuri de date cum ar fi: valorile intregi sau reale numite si numere, caractere
le ASCII, sirurile de caractere, valorile logice etc
Literalii numerici desemneaza numere in LTP - valori intregi sau rea
le si sunt scrise folosind exprimarea zecimala. Orice numar poate fi precedat de
semn (+ sau -).
Un literal intreg sau un numar intreg este un sir de cifre zecimale
sau hexazecimale , precedate eventual de + sau -.
Exemplu: 19375, 0, -125, 175, +12567, $4FCD, $7A9DC;
Literalii reali sau numerele reale ce se pot reprezenta sub forma ze
cimala, expomnentiala sau combinata.
Formatul zecimal presupune un semn (+,-), o parte interaga, un punct
zecimal si o parte fractionara.
Exemplu: 185.75, -1235.175, +0,175 etc.
Formatul exponential consta dintr-un numar intreg sau in format real
zecimal urmat de litera e sau E urmata de un exponent intreg pozitiv sau negati
v (litera E reprezinta baza 10).
Exemple: 0.0725E-10, 271E2, -150.E-10 etc.
Un literal caracter consta dintr-un caracter ASCII incadrat de apost
rofuri ('A', '+', , '?','$','%').
Un literal sir sau un sir de caractere este o secventa de caractere
delimitata de apostrofuri. Prezenta in sir a unui apostrof se marcheaza prin dub
larea acestuia.
Exemplu: 'alfa10', 'ALFA-beta', '-125**15'
Literele mari si mici au valori diferite in codul sirurilor.
2.5. Tipuri de date standard si operatii asupra acestor tipuri de da
te.
2.5.1. Conceptul de data. Clasificarea tipurilor de date in LTP.
Prin data se poate intelege orice informatie asupra careia poate ope
ra calculatorul. La nivel hardware o data este reprezentata de o succesiune de c
ifre binare.
Un tip de data precizeaza, la nivelul limbajelor evoluate, valorile
pe care le poate lua o variabila precum si operatiile care se pot efectua asupra
acesteia. Orice variabila dintr-un program Pascal trebuie sa fie asociata unui
tip de data si numai unuia.
Limbajul Turbo Pascal cunoaste urmatoarele tipuri de date:
- tipuri simple de date din care fac parte tipurile ordinale si tipu
l real.
. tipuri ordinale (scalare).
Un tip ordinal precizeaza o multime de valori finita si ordonata ale

carei valori pot fi puse in corespondenta cu multimea N a numerelor naturale {0


,1,2,3,...,n,...} Fiecare tip ordinal are o valoare maxima si una minima. Intr-o
asemenea multime, cu exceptia valorii minime, fiecare element are un predecesor
, iar cu exceptia valorii maxime fiecare element are un succesor. Pe multime tip
urilor ordinale de date sint aplicabile trei functii predefinite:
- y:=succ(x) - furnizeaza , daca exista, valoarea urmatoare (y) a unei valori or
dinale x.
- y:=pred(x) - furnizeaza, daca exista, valoarea anterioara valorii ordinale x.
- y:=ord(x) - furnizeaza rangul (y) ocupat de variabila ordinala x. Rezultatul y
este de tip Integer.
Prin aplicarea opratorilor relationali (=,<>,<,<=, >, >=) asupra val
orilor ordinale se poate verifica relatia de ordine intre acestea. Rezultatul ap
licarii unui operator relational este o valoarea logica. Referitor la functiile
asupra tipurilor ordinale avem adevarate relatiile:
succ(x)>x si ord(succ(x)):=ord(x)+1
pred(x)<x si ord(pred(x)):=ord(x)-1
Un element al unui tip ordinal de date se poate determina prin numar
ul sau de ordine. Tipurile ordinale de date sunt tipurile: intreg, caracter (CHA
R), logic (BOOLEAN), interval si enumerare.
. tipul real de date care reprezinta multimea valorilor reale.
- tipuri speciale. Din aceste tipuri fac parte: tipul SET, care repr
ezinta multimea submultimilor unui tip ordinal cu mai putin de 256 elemente, tip
ul STRING (sir) care reprezinta multimea sirurilor de caractere si tipul procedu
ra sau functie.
- tipuri structurate (compuse). Sunt acele tipuri de date care se co
mpun, dupa reguli bine stabilite, din tipurile simple, speciale sau alte tipuri
definite anterior. Din tipurile sructurate de date fac parte: tipul tablou (ARRA
Y) si tipul inregistrare, articol (RECORD).
- tipuri referinta din care fac parte tipul POINTER (referinta fara
tip) si tipul referinta cu tip.
In continuare se vor descrie tipurile simple de date (tipurile ordin
ale si tipul real) precum si tipurile speciale (tipul multime, sir, procedura si
functie) urmand ca celelalte tipuri (structurate si referinta) sa faca obiectul
unor capitole speciale. Pentru fiecare tip de date se vor trata: domeniul lor d
e definitie, definirea literalilor, definirea constantelor, definirea variabilel
or si reprezentarea lor in memorie, referirea la elementele tipurilor structurat
e, operatiile definite pe aceste tipuri.
2.5.2. Date de tip intreg. Operatii asupra datelor de tip intreg.
a. Tipurile intregi de date
O data de tip Integer este un element al multimii numerelor intregi
cuprinse intre -Maxint si +Maxint, unde Maxint este o constanta specifica care l
imiteaza submultimea corespunzatoare tipului Integer. Valoarea constantei Maxint
depinde de ordinatorul pe care este implementat LTP.
In functie de modul de reprezentare in memoria calculatoarelor si de
domeniul de definitie al acestor date in LTP exista mai multe tipuri de date in
tregi dupa cum urmeaza:
TipIntreg
Domeniul valorilor
Mod de reprezentare
--------------------------------------------------------------------------------------------------------SHORTINT
-128..127(-27 .. 27-1)
8 biti
cu semn
INTEGER
-32768..32767(-215 .. 215-1)
16 biti cu semn
32 biti cu s
LONGINT
-2147483648..2147483647(-231 .. 231 1)
emn
BYTE
0..255(0..28-1)
8 biti fara semn
WORD
0..65535(0..216-1)
16 biti fara semn

---------------------------------------------------------------------------------------------------------b. Literali intregi


Un literal intreg este de fapt un numar intreg din multimea numerelo
r intregi Z si poate fi scris sub forma zecimala sau sub forma hexazecimala.
In forma zecimala este un sir de cifre zecimale precedat sau nu de s
emnele - sau + ([+/-]CifreZecimale:-345, +1753, 789).
In forma hexazecimala este un sir de cifre in baza 16 (0, 1, 2, ...
,9, a/A(10), b/B(11), c/C(12), d/D(13), e/E(14) sau f/F(15)) precedate de semnul
$ (CifreHexa:$0D, $20, $2fcd).
c. Constante de tip intreg
Constantele de tip intreg se declara in sectiunea CONST a unei stru
cturi de program (program principal, procedura sau functie) si pot fi constante
simbolice sau constante cu tip dupa cum urmeaza:
CONST
{declararea unei constante intregi simbolice}
ConstIntreagaSimbolica=ExpresieIntreaga;
{declararea unei constante intregi cu tip}
ConstIntreagaCuTip:TipIntreg=ExpresieIntreaga;
unde:
- ConstIntreagaSimbolica este un identificator utilizator ales de pr
ogramator care denumeste simbolic o constanta intreaga si a carei valoare ramane
nemodificata pe tot parcursul executiei programuluui.
- ConstIntreagaCuTip este un identificator utilizator ales de progra
mator care denumeste o constanta intreaga cu tip, care in esenta nu este alceva
decat o variabila initializata si care pe parcursul executarii programului se co
mporta ca o variabila veritabila.
- TipIntreg este unul din tipurile intregi cunoscute (SHORTINT, INTE
GER, LONGINT, BYTE sau WORD).
- ExpresieIntreaga poate fi un literal intreg, o constanta intreaga
anterior definita sau o expresie intreaga formata dintr-o multime de literali si
constante anterior definite legate prin operatori intregi (+, -, *, DIV, MOD, N
OT, AND, OR, XOR aritmetici, SHL, SHR).
Exemple:
CONST
c1=23; c2=653358725; unu=1,minus1=-1;
c3:LONGINT=-4500; ab23:BYTE=155; suma:WORD=2500;
csuma:WORD=c1*4+(unu+15)*(25-minus1); cprodus:INTEGER=(c2 DIV 25)
-c3 * ab23; saumod=(c1 XOR suma) AND (c2 MOD ab23);
Constantele c1 si unu sunt considerate implicit de tipul BYTE, minus
1 de tipul SHORTINT iar c2 de tipul LONGINT. Constantele cu tip, indiferent de v
aloarea lor, se genereaza pe lungimea tipului intreg specificat. Constantele csu
ma, cprodus si saumod primesc valorile intregi de tipul specificat, dupa evaluar
ea expresiilor intregi, pe parcursul compilarii.
d. Variabile de tip intreg
Variabilele de tip intreg se declara in sectiunea VAR a unei structu
ri de program (program principal, procedura sau functie) astfel:
VAR
v1[,v2][,v3]......:TipIntreg;
unde:
- v1,v2,v3,... sunt identificatori utilizator definiti de programato
r care denumesc, pe parcursul programului, variabile intregi.
- TipIntreg este unul din tipurile intregi cunoscute ale LTP.
Exemplu:
VAR
x1,n100,kx7:INTEGER; {variabile cu date intregi cu semn pe 16 bit
i}
v1,t,tact,low:LONGINYT; {variabile cu date intregi cu semn pe 32
biti}
a,b,cab,suma:WORD; {variabile cu date intregi fara semn pe 16 bit

i}
produs,cat,y1:BYTE; {variabile cu date intregi fara semn pe 8 bit
i}
minus10,plus4:SHORTINT; {variabile cu date ientregi cu semn pe 8
biti}
e. Operatii asupra datelor de tip intreg
Operatiile se aplica asupra a doi termeni numiti operanzi. Orice ope
ratie intreaga in afara de operatia NOT aritmetic se aplica asupra a doi operanz
i dupa relatia:
operand1 OperatorIntreg operand2; unde:
- operand1 si operand2 sunt termenii operatiei si sunt date de tip i
ntreg (literali, constante, variabile, functii sau expresii).
- OperatorIntreg este un operator din multimea operatorilor intregi
{+, -, *, DIV, MOD, OR, XOR, AND, SHL, SHR}, unde:
+ este operatorul pentru adunare intreaga;
- este operatorul pentru scadere intreaga;
* este operatorul pentru inmultire intreaga;
DIV este operatorul pentru impartire intreaga;
MOD este operatorul pentru clasele de resturi;
OR operatorul pentru sau inclusiv aritmetic;
XOR operatorul pentru sau exclusiv aritmetic;
AND operatorul pentru SI aritmetic;
In afara operatiilor binare de mai sus mai exista si opeartiile unar
e:
- operand care reprezinta valoarea termenului operand cu semn schimb
at'
NOT operand care reprezinta negatia aritmetica a termenului operand;
Operatiile definite de operatorii OR, XOR, AND, NOT, SHL, SHR se mai
numesc si operatii pe biti deoarece opereaza la nivelul reprezentarii binare a
datelor de tip intreg.
Tabelele de calcul binar ale functiilor OR, XOR, AND si NOT sunt red
ate mai jos si
se realizeaza bit cu bit, rang binar cu rang binar:
x
y
x OR y
x XOR y
x AND y
NOT x
NOT y
--------------------------------------------------------------------------------------0
0
0
0
0
1
1
0
1
1
1
0
1
0
1
0
1
1
0
0
1
1
1
1
0
1
0
0
--------------------------------------------------------------------------------------Operatia operand1 SHL operand2 inseamna deplasarea binara la stanga
a valorii operandului operand1, reprezentat in memorie pe lungimea tipului sau,
cu atatea ranguri binare cate arata valoarea operandului operand2. Practic rezul
tatul executiei operatiei operand1 SHL operand2 = operand1 * 2operand2.
Operatia operand1 SHR operand2 inseamna deplasarea binara la dreapta
a valorii operandului operand1, reprezentat in memorie pe lungimea tipului sau,
cu atatea ranguri binare cate arata valoarea operandului operand2. Practic rezu
ltatul executiei operatiei operand1 SHR operand2 = operand1 : 2operand2.
Operatorii intregi (+, -, *, DIV, MOD, NOT, OR, XOR, AND, SHL, SHR)
aplicati asupra unor variabile de tip intreg furnizeaza tot valoari intregi.
Operatia operand1 OperatorIntreg operand2 se vor efectua corect daca
:
abs(operand1 OperatorIntreg operand2) <= Maxint

abs(operand1) <= Maxint


abs(operand2) <= Maxint
f. Proceduri si functii cu valori intregi in LTP
In LTP standard (PASCAL) exista urmatoarele functii implicit definit
e (predefinite), care furnizeaza valori intregi:
- functia abs(x) returneaza valoarea absoluta a numarului intreg x
- functia sqr(x) returneaza patratul valorii intregi x daca x<=Maxin
t div x
- functia trunc(x) returneaza partea intreaga a valorii reale x
Exemple:
y=trunc(91.17); => y:=91
y=trunc(-12.130; => y:=-12
Daca x este real si x>=0 atunci 0<=x-trunc(x)<1 si daca x<0 atunci 1<x-trunc(x)<=0
- functia round(x) returneaza valoarea reala x rotunjita la cel mai
apropiat intreg de x. In plus avem relatiile:
round(x) = trunc(x+0.5) pentru x>=0
round(x) = trunc(x-0.5) pentru x<0
- functia ODD(x) returneaza valoarea logica TRUE daca argumentul x e
stee un intreg impar si FASE daca x este par.
- procedura DEC(x,[n]) - decrementeaza cu n (si prin omiterea lui n
cu 1) valoarea variabilei intregi de tip LONGINT x.
- procedura INC(x,[n]) - incrementeaza cu n (si prin omiterea lui n
cu 1) valoarea variabilei intregi de tip LONGINT x.
Daca x este o valoare intreaga atunci avem:
pred (x) = x-1
succ(x) = x+1 si
ord(x) = x
DEC(x,n) implica x:=x-n
INC(x,n) implica x:=x+n
g. Expresii intregi in LTP
O expresie intreaga este un ansamplu de date intregi (literali, cons
tante, variabile, funcii sau expresii) legate prin operatorii intregi tinandu-se
seama de prioritatile operatorilor si de prioritatile introduse de prezenta par
antezelor rotunde.
Evaluarea unei expresii intregi se executa astfel:
- Se evalueaza mai intai expresiile din paranteze (de la cele mai in
terioare pana la cele mai exterioare.
- Operatiile din paranteza se executa in ordinea naturala a priorita
tilor acestora:
. evaluarea functiilor intregi
. operatiile unare: NOT, +, . operatiile multiplicative: *, DIV, MOD, AND, SHL, SHR
. operatiile aditive: +, -, OR, XOR
h. Operatia de atribuire intreaga
Prin operatia de atribuire intreaga se intelege operatia prin care u
nei variabile intregi numita rezultat, declarata corespunzator in sectiunea VAR,
i se asociaza valoarea unei expresii intregi, ca mai jos"
v:= ExpresieIntreaga;
unde:
:= este operatorul de atribuire in LTP;
- v este o variabila intreaga de un anumit tip, numita si variabila
rezultat, declara corespunzator in sectiunea de variabile VAR;
- ExpresieIntreaga este o expresie de tip intreg conform celor preci
zate la g.
Mod de executie:
pasul 1 - se evalueaza expresia ExpresieIntreaga in tinandu-se seama
de tipul operanzilor expresiei, de prioritatile operatorilor si de prioritatile
introduse de paranteze.
pasul 2 - se converteste tipul valorii expresiei la tipul variabilei

rezultat v.
pasul 3 - se atribuie variabilei rezultat v valoarea expresiei conve
rtita la pasul anterior
i. Relatii intre datele de tip intreg
Intre datele de tip intreg se pot stabili relatii de comparare dupa
cum urmeaza:
operand1 OperatorRelatie operand2
unde:
- operand1 si operand2 sunt date de tip intreg (literali, constante,
variabile, functii sau expresii)
OperatorRelatie este un operator de comparare apartinand multimi {<,
<=, >, >=, =, <>} cu semantica urmatoare:
<
mai mic;
<=
mai mic sau egal;
>
mai mare;
>=
mai mare sau egal;
=
egal;
<>
diferit
Operatia de comparare a doua date de tip intreg este o operatia exte
rna deoarece in urma executiei sale rezulta o valoare logica: TRUE (adevarat) da
ca relatia este verificata si FALSE (fals) daca relatia nu este verificata.
Exemple:
PROGRAM OperatiiCuDateIntregi;
CONST
a=27; b:BYTE=3;
VAR
c,d,e,f,g,h,i,j,e1,e2:INTEGER;
k,l,m,n,o,p:WORD;
l1,l2,l3:BOOLEAN;
BEGIN
c:=35:
{35 in baza 2 pe 16 cifre binare
0000000000100011}
d:=c+b;
{38 in baza 2 pe 16 cifre binare
0000000000100110}
e:=d-a;
{11 in baza 2 pe 16 cifre binare
0000000000001011}
f:=e*9;
{99 in baza 2 pe 16 cifre binare
0000000001100011}
g:=f DIV 3;
{33 in baza 2 pe 16 cifre binare
0000000000100001}
h:=g MOD (b+4); {05 in baza 2 pe 16 cifre binare
000000
0000000101}
{deplasarea binara la stanga cu b+4=7 ranguri a valorii continu
ta in variabila d
adica inmultirea lui d cu 27=128}
i:=d SHL 7;
{38*128=4864 pe 16 cifre binare
0001
001100000000}
{deplasarea binara la drapta cu b=3 ranguri a valorii continute
in variabila i
adica impartirea lui i cu 23=8}
j:=i SHR 3;
{4864:8=608 pe 16 cifre binare
0
000001001100000}
k:=77;
{77 in baza 2 pe 16 ranguri binare
0000000001001101}
l:=4436;
{4436 pe 16 ranguri binare
0001000101010100}
m:=k OR l;
{4429 pe 16 ranguri binare
0001000101011101}
n:=k XOR l;
{4377 pe 16 ranguri binare
0001000100011001}

o:=k AND l;

{68 in binar pe 16 ranguri binare

00

00000001000100}
{reprezentarea numerelor negative se face in cod complementar s
chimbandu-se fiecare cifra binara in opusul sau si adaugandu-se in final un 1}
e1:=-35
{-35 in binar pe 16 ranguri binare
1111111111011101}
{negatia aritmetica NOT presupune schimbarea fiecarei cifre bi
nare in opusul sau}
p:=NOT k;
{65535-77=65458 pe 16 cifre binare 111111
1110110010}
e2:=-e1;
{35 in baza 2 pe 16 cifre binare
0000000000100011}
WRITELN ('a=',a,' b=',b,' c=',c,' d=',d,' e=',e,' f=',f,' g=',
g,' h=',h,' i=',i,' j=',j,' k=',
k,' l=',l,' m=',m.' n=',n,' o=',o,' p=',p,
' e1=',e1,' e2=',e2);
l1:=(a<=k);
l2:=(m<>n);
l3:=(e2=-e1);
WRITELN('l1=',l1,' l2=',l2,' l3=',l3);
END.
Observatie: Programul de mai sus se poate executa urmarindu-se valor
ile variabilelor initializate si rezultatele executarii diverselor operatii asup
ra datelor de tip intreg.
Tipul rezultatului obtinut in urma unei operatii aritmetice asupra a
doi operanzi intregi (operand1 OperatorIntreg operand2) va fi:
- LONGINT - daca unul din operanzi este de tip LONGINT.
- WORD - daca un operand este de tip WORD, iar celalalt de tip WORD
sau BYTE.
- INTEGER - in toate celelalte cazuri.
In cazul in care operanzii sunt de tip interval, al unui tip intreg,
tipul rezultatului va depinde de tipurile la care apartin intervalele respectiv
e.
2.5.3. Date de tip caracter (CHAR). Operatii asupra datelor de tip c
aracter
a. Tipul caracter de date (CHAR)
O valoare de tip caracter (Char) este un element al multimii finite si ordo
nate a caracterelor ASCII (0..255) extinsa recunoscute de sistemul de calcul. Or
icarui caracter recunoscut de computer ii corespunde o anumita valoare intreaga
(0..255) reprezentata in memorie pe un byte (octet=8 biti) in conformitate cu ta
belul de mai jos. Pentru determinarea valorii unui caracter ASCII se insumeaza n
umerele specificate pe linia si coloana pe care se gaseste caracterul in tabel.
De exemplu codul literei K este: 11+64=75 reprezentat pe 7 biti in binar.
75 = 64 + 8 + 2 + 1 = 1*26 + 1*23 + 1*21 + 1*20 = 1001011
Un caracter cuprins intre apostrofuri desemneaza valoarea codului acelui ca
racter.
Exemple de valori de tip char: 'a', ',', ' ', '!'
Setul complet al caractere ASCII
00
16
32
48

64
80
96
112
-----------------------------------------------------------------------------0

NUL

DLE

SOH

DC1

'

p
1

q
2

STX

DC2

"

r
3

ETX

DC3

4
5
6
7
8
x
9

EOT
ENQ
ACK
BEL
BS
HT

DC4
$
NAK
%
SYN &
ETB
''
CAN
(

5
6

E
F
7
8

G
H
9

U
V
W
X

EM

SUB

e
f

u
v
g

w
h

y
10

LF

z
11

VT

SC

{
12

FF

FS

<

|
13

CR

GS

SO

RS

>

}
14

~
15

SI
US
\
?
O
_
o
DEL
---------------------------------------------------------------------------------Oricare ar fi implementarea limbajului Pascal, tipul Char trebuie sa indepl
ineasca conditiile:
- literele mari cuprinse intre 'A' si 'Z' sunt ordonate alfabetic s
i nu se considera ca o multime compacta (exemplu: 'C'<'D');
- literele mici cuprinse intre 'a' si 'z' sunt ordonate alfabetic cr
escator (exemplu: 'g'<'h');
- cifrele zecimale curinse intre '0' si '9' sunt ordonate numeric si
se considera ca o multime compacta in multimea caracterelor (de exemplu succ('7
') = '8' si pred('4')='3').
- oricare doua caractere din tabela ASCII sunt intr-o relatie de ord
ine (<) corespunzator relatiei de ordine ale locurilor ocupate de acestea in tab
ela.
Tipul caracter de date este un tip standard, simplu, de tip ordinal
si se precizeaza prin identificatorul standard CHAR.
b. Literali caracter
Un literal caracter (LiteralCaracter) este un caracter ASCII care po
ate in 3 moduri:
- un caracter intre doua apostrofuri ('caracter'): 'b' '=' '*' '7' '
%' '@'
- un numar intreg zecimal (0..255) precedat de caracterul # (#NumarZ
ecimal); #13(ENTER), #65('A'), #71(HOME), #83(DEL), #27(ESC).
- un numar hexazecimal precedat de caracterele #$ (#$NumarHexa): #$3
5('5'), #$4F(END), #$64('D')
- un caracter precedat de simbolul ^ (^caracter): ^[ (valoarea ASCII
27=1B, respectiv ESC), ^A (valoarea ASCII 01)
c. Constante de tip caracter
Constantele de tip caracter se declara in sectiunea CONST si pot fi
constante caracter simbolice ale caror valori raman nemodificate pe parcursul e
xecutarii programului si constante caracter cu tip care de fapt sunt variabile d
e tip caracter initializate la compilare
CONST
{declararea unei constante caracter simbolica}
ConstCaracterSimbolica=LiteralCaracter;
{declararea unei constante caracter cu tip}
ConstCaracterCuTip:CHAR=LiterarCaracter;
unde:
- ConstCaracterSimbolica este un identificator utilizator care denum
este constanta caracter simbolica declarata a carei valoare ramane nemodificata

pe parcursul executarii programului.


- ConstCaracterCuTip este un identificator utilizator care denumeste
constanta caracter cu tip declarata, care de fapt reprezinta o variabila de tip
caracter initializat si a carei valoare poate fi modificata pe parcursul execut
arii programului.
- LiterarCaracter este un literar de tip caracter in una din cele pa
tru forme ('caracter', #NumarZecimal, #$NumarHexa sau ^caracter).
Exemple:
CONST
LiniutaDeUnire='-';
LiniutaDe Subliniere=';
LiteraMare:CHAR='U';
TastaEnter=#13;
Break =^C;
Spatiu:CHAR=#$20;
d. Variabile de tip caracter (CHAR)
Toate variabilele de tip caracter utilizate intr-o structura de prog
ram (program principal, procedura sau functie) trebuie declarate in sectiunea de
variabile VAR impreuna cu tipul lor standard CHAR astfel:
VAR
v1[,v2][,v3] ... :CHAR;
unde: v1,v2,v3, ... sunt identificatori utilizatori care denumesc variabile de t
ip CHAR.
e. Operatii asupra datelor de tip caracter
Pe multimea datelor de tip caracter nu este definita nici-o operatie
interna. Singura operatie externa definita pe multimea datelor de tip caracter
este concatenarea:
operand1 + operand2;
unde operand1 si operand2 sunt date de tip caracter (literali si/sau variabile).
Rezultatul operatiei de concatenare este un sir de 2 caractere.
f. Functii asupra datelor de tip caracter
Functiile implicit definite pe tipul ordinal CHAR sunt ord si chr ca
re permit sa se puna in corespondenta biunivoca setul de caractere cu numerele o
rdinale ale caracterelor setului. Ord si Chr se mai numesc functii de transport
sau de conversie.
Functia CHR returneaza caracaterul ASCII extins corespunzator argume
ntului de tip BYTE care reprezita pozitia caracterului in tabela ASCII iar funct
ia ORD returneaza pozitia in tabela ASCII a unui caracter dat.
De exemple:
y:=ORD(S) - reprezinta rangul caracterului S in multimea ordonata a
setului de caractere ASCII.
y:=ORD(S):=3+80=83 (din tabela) si
CHR(93):=CHR(80+13)= {reprezinta codul ASCII al caracterului de rang
83}. Iar
CHR(ORD(S)):=C si ORD(CHR(I):=I
Datele de tip caracter fiind date de tip ordinal atunci li se pot ap
lica toate functiile predefinite pe tipurile ordinale (SUCC, PRED, ORD) astfel:
PRED(C):=CHR(ORD(C)-1);
SUCC(C):=CHR(ORD(C)+1);
unde C este o data de tip caracter (literar, constanta sau variabila).
Succesorul si predecesorul unui caracter depind de succesiunea setul
ui de caractere. Cele doua proprietati exista numai daca exista succesor, respec
tiv predecesor.
g. Expresii de tip caracter
Exista expresii simple de tip caracter, fara operatori, care sa aiba
o valoare de tip caracter, in schimb poate exista o expresie cu operatorul de c
oncatenare +, care contine date de tip caracter, si a carei valoare sa fie un si
r de caracter (STRING).
ExpresieCaracter poate fi un literar caracter (LiteralCaracter) o co
nstanta caracter (ConstCaracter) sau variabila caracter (VariabilaCaracter);

h. Operatia de atribuire caracter


Prin operatia de atribuire caracter se intelege operatia prin care u
nei variabile caracter numita rezultat, declarata corespunzator in sectiunea VAR
, i se asociaza valoarea unei expresii caracter, ca mai jos"
v:= ExpresieCaracter;
unde:
:= este operatorul de atribuire in LTP;
- v este o variabila caracter de tip CHAR, numita si variabila rezul
tat, declara corespunzator in sectiunea de variabile VAR;
- ExpresieCaracter este un literar de tip caracter (LiterarCaracter)
, o constanta de tip caracter (ConstCaracter) sau o variabila caracter (Variabil
aCaracter).
Mod de executie:
- se atribuie variabilei rezultat v valoarea expresiei ExpresieCarac
ter (valoarea literalului, a constantei sau a variabilei de tip caracter.
i. Relatii intre datele de tip caracter
Setul caracterelor ASCII este multime ordonata deoarece pentru orica
re 2 caractere C1 si C2 avem C1<C2 daca ord(C1)<ord(C2). Doua date de tip caract
er se compara comparand pozitiile ocupate de acestea in tabela ASCII
Aceasta definitie poate fi extinsa pentru orice operator de relatie
(<, <=, >, >=, =, <>) dupa relatia urmatoare:
operand1 OperatorRelatie operand2;
unde:
- operand1 si operand2 sunt date de tip caracter (literali, constant
e, variabile);
- OperatorRelatie este unul din operatorii de relatie (<, <=, >, >=,
=, <>) ;
Rezultatul unei operatii de relatie (comparatie) asupra a 2 operanzi
de tip caracter este o valoare logica TRUE daca relatia se verifica (adevarata)
sau FALSE daca relatia nu se verifica (falsa).
Exemplu:
PROGRAM caractere;
CONST
c1:CHAR='+'; c2:CHAR='a'; c3:CHAR='b'; c4='=';
VAR
x,y,z,u,v:CHAR; e1,e2:STRING[4];
a,b,c,d,r1,r2,r3,r4,r5:INTEGER;
BEGIN
a:=25;
b:=35;
c:=-50;
d:=-75;
e1:=c2+c1+c3+c4;
r1:=a+b; {r1 va contine 60}
WRITELN(e1,r1); {afiseaza pe ecran a+b=60}
c1:='-';
e1:=c2+c1+c3+c4;
r2:=a-b; {r2 va contine -10}
WRITELN(e1,r2); {afiseaza pe ecran a-b=-10}
c1:='*';
c2:='c';
c3:='d';
e1:=c2+c1+c3+c4;
r3:=c*d; {r3 va contine 3750}
WRITELN(e1,r3); {afiseaza pe ecran c*d=3750}
c1:='/';
c2:='d';
c3:='a';
e1:=c2+c1+c3+c4;
r3:=d DIV a; {r3 va contine -3}

WRITELN(e1,r3); {afiseaza pe ecran d/a=-3}


x:=#97; {x va contine litera a}
y:=#$64; {y va contine litera d}
z:=#$62; {z va contine litera b}
u:='c';
{u va contine litera c}
v:='*';
r4:=a*c; {r4 va contine -1250}
e1:=x+v+u+c4; {e1 va contine sirul a*c=}
v:='-';
r5:=b-d; {r5 va contine 110}
e2:=z+v+y+c4; {e1 va contine sirul b-d=}
WRITELN(e1,r3,',',e2,r5); {se afisaza: d/a=-3,b-d=110}
END.
2.5.4. Date de tip logic. Operatii asupra datelor de tip logic
a. Tipul logic de date (BOOLEAN)
O valoare logica sau booleana este desemnata prin valorile prestabil
ite FALSE (fals) si TRUE (adevarat). Tipul logic sau boolean de date este un tip
ordinal special de date desemnat prin identificatorul standard BOOLEAN si are c
a domeniul de definitie multimea valorilor logice {FALSE, TRUE}. Reprezentarea u
nei date de tip logic in memorie se face pe un byte sau octet (8 biti) avand val
orile 0 pentru FALSE si 1 pentru TRUE.
b. Literali logici
Un literal logic (LiteralLogic) este una dintre valorile logice FALS
E sau TRUE.
c. Constante logice
O constanta logica este un identificator ales de programator care de
numeste constanta respectiva si poate fi o constanta logica simbolica, care nu-s
i modifica valoarea pe parcursul executarii programului, sau o constanta logica
cu tip, care nu este decat o variabila logica initializata ce-si poate modifica
valoarea pe parcursul executarii programului. Constantele logice se declara in s
ectiunea de constante CONST astfel:
CONST
{declararea unei constante logice simbolica}
ConstLogicaSimbolica=ExpresieLogicaConstanta;
{declararea unei constante logice cu tip}
ConstLogicaCuTip=ExpresieLogicaConstanta;
unde:
- ConstLogicaSimbolica este un identificator utilizator care desemne
aza o constanta logica simbolica;
- ConstLogicaCuTip este un identificator utilizator care desemneaza
o constanta logica cu tip, in speta o variabila initializata;
- ExpresieLogicaConstanta poate fi un literal logic (TRUE sau FALSE)
, o alta constanta logica anterior definita sau o expresie de literali sau const
ante logice anterior definite, legate prin operatorii logici NOT, OR, XOR si/sau
AND, evaluata in timpul compilarii;
Exemple:
CONST
eof=FALSE; {constanta simbolica}
eoln:BOOLEAN=TRUE; {constanta cu tip}
ok:BOOLEAN=TRUE; {constanta cu tip}
conditie:BOOLEAN=eof XOR eof AND ok; {constanta cu tip de tip exp
resie}
d. Variabile de tip logic
Toate variabilele de tip logic (BOOLEAN) utilizate intr-o structura
de program (program principal, procedura sau functie) trebuie declarate in secti
unea de variabile VAR impreuna cu tipul lor standard BOOLEAN astfel:
VAR
v1[,v2][,v3] ... :BOOLEAN;
unde: v1,v2,v3, ... sunt identificatori utilizatori care denumesc variabile de t

ip BOOLEAN.
care se vor folosi in structuri de program (program principal, procedura sau fun
ctie).
Exemple:
VAR
log1,log2,b21,ab10:BOOLEAN:
e. Operatii asupra datelor de tip logic (BOOLEAN)
O operatie de tip logic se aplica asupra a doi operanzi logici (oper
atii logice binare: OR, XOR si AND) sau asupra unui singur operand (operatia log
ica unara NOT) dupa relatiile:
- operand1 OperatorLogicBinar operand2; pentru operatiile logice bin
are, sau
- NOT operand; pentru negatia logica;
unde:
- operand1, operand2 si operand sunt date de tip logic (literali, co
nstante, variabile, functii, expresii relationale, expresii logice) care pot lua
valorile TRUE sau FALSE
- OperatorLogicBinar apartine multimii operatorilor logici definiti
pe multimea valorilor logice (OR=SAU inclusiv, XOR=SAU exclusiv si AND=Si)
Evaluarea rezultatelor operatiilor logice se face conform tabelei de
adevar de mai jos:
-------------------------------------------------------------------------------------------------------op1 op2 (NOT op1) (NOT op2) (op1 OR op2) (op1 XOR op2) (op1 AND op2)
-------------------------------------------------------------------------------------------------------F
F
T
T
F
F
F
F
T
T
F
T
T
F
T
F
F
T
T
T
F
T
T
F
F
T
F
T
------------------------------------------------------------------------------------------------------unde:
- op1 si op2 sunt operanzi de tip logic, F si T valorile logice prescurtate, FAL
SE sau TRUE
f. Operatii relationale
Operatiile relationale se definesc pe multimi de date ale caror elem
ente pot fi supuse compararii iar rezultatul compararii a doi operanzi din acest
e multimi este o valoare logica. Sintaxa unei operatii relationale este urmatoar
ea:
operand1 OperatorRelational operand2;
unde:
- operand1 si operand2 sunt operanzi compatibili, comparabili defini
ti pe multimi care contin elemente comparabile.
- OperatorRelational este operator de comparare din multimea {<, <=,
>, >=. =. <>}
Din punct de vedere al tipului operanzilor se disting trei categorii
de relatii:
- relatii intre tipurile simple (intreg, real, CHAR, BOOLEAN, interv
al, enumerare) si siruri de caractere (STRING) (<, <=, >, >=, =, <>).
- relatii intre variabile de tip referinta (=, <>)
- relatii intre multimi (<=, >=, =, <> si IN )
Intre datele de tip logic avem totdeauna toate relatiile de comparar
e considerand ca totdeauna FALSE<TRUE (0<1).
Fiecare dintre operatorii de relatie (=, <, <=, >, >=, <>) aplicat la doua
expresii comparabile furnizeaza o valoare logica (false sau true).

g. Expresii logice
O expresie logica este o multime de date logice (literali, constante
, variabile, functii, expresii relationale legate prin operatorii logici (NOT, O
R, XOR, AND) tinandu-se seama de prioritatile operatorilor logici si de priorit
atile introduse de prezenta parantezelor rotunde.
Evaluarea unei expresii logice incepe cu perechea de paranteze rotun
de cea mai interioara. In cadrul acesteia se executa in ordinea prioritatilor ur
matoarele operatii:
- se evalueaza expresiile relationale;
- se evalueaza functiile cu valori logice;
- se executa negatiile logice;
- se executa operatia logica AND
- se executa operatiile logice OR si XOR, de la stanga la dreapta;
h. Operatia de atribuire logica
Prin operatia de atribuire logica se intelege operatia prin care une
i variabile logice numita rezultat, declarata corespunzator in sectiunea VAR, i
se asociaza valoarea unei expresii logice, ca mai jos"
v:= ExpresieLogica;
unde:
:= este operatorul de atribuire in LTP;
- v este o variabila logica, numita si variabila rezultat, declara c
orespunzator in sectiunea de variabile VAR;
- ExpresieLogica este o expresie de tip logic conform celor precizat
e la punctul g.
Mod de executie:
pasul 1 - se evalueaza expresia ExpresieLogica tinandu-se seama de t
ipul operanzilor expresiei, de prioritatile operatorilor si de prioritatile intr
oduse de paranteze.
pasul 2 - se atribuie variabilei rezultat v valoarea expresiei evalu
ata la pasul anterior
i. Relatii intre datele de tip logic
Intre datele de tip logic se pot stabili relatii de comparare dupa c
um urmeaza:
operand1 OperatorRelatie operand2
unde:
- operand1 si operand2 sunt date de tip logic (literali, constante,
variabile, functii sau expresii)
- OperatorRelatie este un operator de comparare din ultimea {<, <=,
>, >=, =, <>}
Operatia de comparare a doua date de tip logic este o operatie interna deoarece
in urma executiei sale rezulta o valoare logica: TRUE (adevarat) daca relatia es
te verificata si FALSE (fals) daca relatia nu este verificata. In evaluarea rela
tiilor logice se tine seama ca intotdeauna FALSE < TRUE (0<1).
Tipul boolean este astfel definit incat FALSE<TRUE deoarece ORD(F
ALSE):=0 si ORD(TRUE):=1. Mai mult daca X si Y sunt date booleene se poate scrie
X<=Y (implicatia logica), X=Y (echivalenta), X<>Y (sau exclusiv).
j. Functii cu valori logice
Exista in LTP functii booleene predeclarate care furnizeaza rezultat
e booleene:
- functia ODD(x) = TRUE daca x:=2k+1 si
ODD(x) = FALSE daca x:=2k
- functia EOLN(x) = TRUE daca x:=EOLN (End Of LiNe) (daca x este car
acter de sfarsit de linie) si EOLN(x) = FALSE daca x<>EOLN (End Of LiNe) (daca x
nu este caracterul de sfarsit de linie.
- functia EOF(x) = TRUE daca x:=EOF (End Of File) (daca x este carac
terul de sfarsit de fisier) si EOF(x) = FALSE daca x<>EOF (End Of File) (daca x
nu este caracterul de sfarsit de fisier).
Exemplu:
PROGRAM logice;
CONST

c1=TRUE; v1:BOOLEAN=FALSE;
ci1=25; ci2:WORD=32000;
VAR
l1,l2,l3,l4:BOOLEAN;
vi1,vi2,vi3,vi4,vi5:INTEGER;
BEGIN
vi1:=75; vi2:=125; vi3:=ci1+ci2 DIV ci1;
vi4:=vi1 MOD 17 + vi1 AND vi2 XOR vi3 OR NOT (vi2 SHL 2);
vi5:= ci2 DIV (ci1+vi1) - NOT (vir - 10*ci1);
l1:=(vi1 <= vi3) AND NOT(vi2<>75)XOR(((vi1+vi4)>15) XOR
(vi3>vi1*ci1);
l2:=(vi5>vi1*ci1) XOR (ci2 DIV 28 <>(vi2 MOD vi1) AND NOT l1;
l3:=ODD(vi1*vi5-34) AND NOT (vi5 = vi3) XOR l1 AND l2;
l4:=c1 AND NOT v1 OR (l1 XOR (vi5 MOD 13 <> 0);
WRITELN('vi1=',vi1,' vi2=',vi2,' vi3=',vi3,' vi4=',vi4,' vi5=',v
i5);
WRITELN('l1=',l1,' l2=',l2,' l3=',l3,' l4=',l4);
END.
2.5.5. Date de tip enumerare
a. Tipul enumerare de date
Un tip enumerare defineste o multime ordonata de identificatori, def
initi de utilizator, asemanator cu multimile ordonate predefinite, cum ar fi mul
timea numerelor intregi sau multimea caracterelor ASCII. Acesti identificatori
sunt unici, in sensul ca un identificator nu poate aparea decat intr-o singura l
ista de tip enumerare. Acesti identificatori nu pot fi folositi pentru identific
area unor parti ale structurilor de program, dar pot fi folositi ca si constante
le. Orice identificator dintr-o lista de enumerare trebuie privit ca orice elem
ent al unei multimi ordonate, din acest motiv, fiind posibila determinarea numar
ului de ordine in lista al acestuia Primul identificator din lista desemneaza ce
a mai mica valoare care are numarul ordinal (de ordine) 0. Deci identificatorii
constanta apar in ordinea crescatoare a valorilor lor (a numerelor lor de ordine
)
Tipul enumerare se defineste in sectiunea TYPE cu sintaxa urmatoare:
TYPE
TipEnumerare=(identificator1[,identificator2][,identificator3] ..
. );
unde:
- TipEnumerare este un identificator utilizator, ales de programator
, care denumeste si identifica tipul enumerare respectiv.
- identificator1, identificator2, ... sunt identificatori alesi de p
rogramator numiti si constantele listei enumerare, care constitue elementele mul
timii enumerare definita.
Domeniul de definitie sau valorile posibile ale datelor de tip enume
rare sunt chiar identificatorii precizati in lista
Exemplu:
type
TipFormaGeometrica=(liniara,plana,curba,cilindrica,conica,sferica
);
TipLuna=(ianuarie,februarie,martie,aprilie,mai,iunie,iulie,august
,septembrie,
octombrie,noiembr
ie,decembrie);
TipCuloare=(negru, maron,rosu,portocaliu,galben,verde,albastru,gr
i,violet,alb);
TipZi=(luni,marti,miercuri,joi,vineri,simbata,duminica);
TipZilePost=(luni,miercuri,vineri);
b. Literali de tip enumerare
Literalii de tip enumerare sunt chiar identificatorii precizati in l
istele de enumerare (cum ar fi in exemplu de mai sus: liniara, plana, .... sau i
anuarie, februarie, ... sau negru, maron ... sau luni, marti ...).
c. Constante de tip enumerare

Constantele de tip enumerare sunt, ca si in cazul literalilor, ident


ificatorii din lista
(cum ar fi in exemplu de mai sus: liniara, plana, .... sau ianuarie, februarie,
... sau negru, maron ... sau luni, marti ...).
d. Variabile de tip enumerare
Variabilele de tip enumerare, ca orice variabile, se declara in sect
iunea de variabile VAR dupa sintaxa urmatoare:
VAR
v1[,v2][,v3] ... :TipEnumerare;
unde:
- v1, v2, v3, ... sunt identificatori utilizator care denumesc vari
abile de tip enumerare care pot lua valori din multimea identificatorilor preciz
ati in lista de enumerare;
- TipEnumerare este identificatorul tipului enumerare (al listei enu
merare) definit corespunzator in sectiunea TYPE
Exemplu:
VAR
a,v1,forma:TipFormaGeometrica;
LunaIarna,LunaPrimavara,LunaVara,LunaToamna,luna:TipLuna;
CuloriCalde,CuloriReci,culoare:TipCuloare;
ZiLucratoare,ZiRepaus,zi:TipZi;
ZiDePost,ZiPost:TipZilePost;
d. Operatii asupra datelor de tip enumerare
Un element al unei liste de enumerare se refera prin: identificatoru
l acelui element (plana, sferica, cilindrica, ... sau ianuarie, iulie, .. sau ga
lben, violet, ... sau luni, miercuri, ..), prin numele tipului enumerare din car
e face parte identificatorul urmat, intre paranteze rotunde, de numarul de ordin
e al elementului in lista (TipFormaGeometrica(i), i=0..5 sau TipLuna(i), i=0..11
sau TipCuloare(i), i=0..9 sau TipZi(i), i=0...6 etc.) sau prin numele unei vari
abile care contina ca valoare identificatorul respectiv.
Cu datele de tip enumerare se pot efectua urmatoarele operatii:
d.1. Atribuirea
Prin operatia de atribuire se atribuie unei variabile de tip enumera
rea un identificator din lista de enumerare dupa cum urmeaza:
VariabilaEnumerare:=IdentificatorEnumerare; sau
VariabilaEnumerare:=TipEnumerare(i).
VariabilaEnumerare:=AltaVaribilaEnumerare
unde:
- VariabilaEnumerare este o variabila de tip enumerare definita core
spunzator in sectiunea VAR, impreuna cu numele tipului enumerare din care face p
arte variabila.
- IdentificatorEnumerare este un identificator din lista de enumerar
e la care este asociata variabila
- TipEnumerare este numele tipului enumerare la care este asociata v
ariabila
- TipEnumerare(i) precizeaza identificatorul din lista de enumerare c
are se va atribui variabilei VariabilaEnumerare, iar i=0..nmax-1 este numarul de
ordine al identificatorului care urmeaza sa se atribuie variabilei VaribilaEnum
erare, iar nmax este numarul maxim al elementelor din lista de enumerare.
- AltaVaribilaEnumerare este o alta variabila enumerare de acelasi t
ip cu VaribilaEnumerare a carei valoare se atribuie varabilei rezultat VaribilaE
numerare.
Variabilele si identificatorii utilizati in operatiile de atribuire
trebuie sa apartina aceluiasi tip enumerare.
Exemple:
a:=sferica; v1:=FormaGeometrica(2); forma:=a;
LunaIarna:=TipLuna(0); LunaVara:=iulie; LunaToamna:=TipLuna(9);
CuloriCalde:=rosu; CuloriReci:=TipCuloare(6);
ZiDePost:=TipZilePost(1);
ZiLucratoare:=TipZi(4);ZiRepaus:=duminica;

d.2. Determinarea elementului succesor respectiv predecesor


Exista, dupa cum s-a precizat la datele de tip ordinal, doua functii
predefinite: SUCC care determina elementul urmator din lista si PRED care deter
mina elementul anterior din lista. In afara primului element, orice element din
lista are un predecesor, si in afara ultimului element, orice element are un suc
cesor.
Exemple:
a:=curba:
forma:=PRED(a); {forma va avea valoarea plana}
v1:=SUCC(forma); {v1 va avea valoarea curba}
luna:=PRED(TipLuna(6)) {va avea valoarea iunie}
LunaVara:=iulie;
luna:=SUCC(LunaVara); {luna va avea valoarea august}
culoare:=TipCuloare(0); {culoare va avea valoarea negru}
CuloriCalde:=SUCC(culoare); {culoare va avea valoarea maron}
zi:=PRED(TipZi(4)); {zi va avea valoarea vineri}
ZiPost:=PRED(vineri); {zi va avea valoarea miercuri}
d.3. Determinarea numarului de ordine al unui element din lista
Primul element al unei liste enumerare are rangul (numarul de ordine
) 0, iar in continuare, pentru celelalte elemente din lista, rangul creste cu 1
pana la ultimul element care are rangul nmax-1, unde nmax este numarul total de
elemente din lista. Determinarea rangului unui element din lista se face cu func
tia predefinita ORD, definita de altfel pe toate tipurile ordinale de date astfe
l :
y:=ORD(x); unde x este un identificator dintr-o lista de enumerare s
au o variabila care contine un identificator.
Exemple:
................................................................................
.............
VAR
a,b,c:INTEGER;
v1,v2,v3:TipZi:
................................................................................
.............
BEGIN
v1:=TipZi(3); {v1 va avea valoarea joi}
v2:=PRED(v1); {v2 va avea valoarea miercuri}
v3:=luni;
a:=ORD(v1); {a va avea valoarea 3}
b:=ORD(PRED(v2)); {b va avea valoarea 1}
c:=ORD(duminica); {c va avea valoarea 6}
................................................................................
..............
d.4. Compararea datelor de tip enumerare
Compararea datelor de tip enumerare se face comparandu-se rangurile
ocupate de acestea in lista de enumerare. Compararea se realizeaza dupa relatia:
operand1 OperatorRelatie operand2
unde:
- operand1 si operand2 sun date de tip enumearare (identificatori de
terminati prin numele lor sau prin rangurile lor din lista, sau variabile de tip
enumerare.
- OperatorRelatie apartine multimii operatorilor de relatie {<, <=,
>, >=, =, <>}
Rezultatul unei relatii de comparare asupra datelor de tip enumerare
este o valoare logica: TRUE daca relatia este adevarata si FALSE daca relatia e
ste falsa. Prin urmare operatia de comparare a datelor de tip enumerare este o l
ege externa.
Exemplu:

................................................................................
.............
VAR
a,b,c:INTEGER;
v1,v2,v3:TipZi:
l1,l2,l3:BOOLEAN;
................................................................................
.............
BEGIN
v1:=TipZi(3); {v1 va avea valoarea joi}
v2:=PRED(v1); {v2 va avea valoarea miercuri}
v3:=luni;
a:=ORD(v1); {a va avea valoarea 3}
b:=ORD(PRED(v2)); {b va avea valoarea 1}
c:=ORD(duminica); {c va avea valoarea 6}
l1:=(v1>v2); {l1 va avea valoarea TRUE}
l2:=v3=TipZi(0); {l2 va avea valoarea TRUE}
l3:=(SUCC(TipZi(ORD(SUCC(marti))))<>joi); {l3 va avea valoarea FA
LSE}
................................................................................
..............
Exemplu complet cu date de tip enumerare:
PROGRAM enumerare:
TYPE
TipFormaGeometrica=(liniara,plana,curba,cilindrica,conica,sferica
);
TipLuna=(ianuarie,februarie,martie,aprilie,mai,iunie,iulie,august
,septembrie,
octombrie,noiembr
ie,decembrie);
TipCuloare=(negru, maron,rosu,portocaliu,galben,verde,albastru,gr
i,violet,alb);
TipZi=(luni,marti,miercuri,joi,vineri,simbata,duminica);
TipZilePost=(luni,miercuri,vineri);
VAR
a1,v10,forma:TipFormaGeometrica;
LunaIarna,LunaPrimavara,LunaVara,LunaToamna,luna:TipLuna;
CuloriCalde,CuloriReci,culoare:TipCuloare;
ZiLucratoare,ZiRepaus,zi:TipZi;
ZiDePost,ZiPost:TipZilePost;
a,b,c:INTEGER;
v1,v2,v3:TipZi:
l1,l2,l3:BOOLEAN;
BEGIN
a1:=curba:
forma:=PRED(a1); {forma va avea valoarea plana}
v10:=SUCC(forma); {v10 va avea valoarea curba}
luna:=PRED(TipLuna(6)) {va avea valoarea iunie}
LunaVara:=iulie;
luna:=SUCC(LunaVara); {luna va avea valoarea august}
culoare:=TipCuloare(0); {culoare va avea valoarea negru}
CuloriCalde:=SUCC(culoare); {culoare va avea valoarea maron}
zi:=PRED(TipZi(4)); {zi va avea valoarea vineri}
ZiPost:=PRED(vineri); {zi va avea valoarea miercuri}
v1:=TipZi(3); {v1 va avea valoarea joi}
v2:=PRED(v1); {v2 va avea valoarea miercuri}
v3:=luni;
a:=ORD(v1); {a va avea valoarea 3}
b:=ORD(PRED(v2)); {b va avea valoarea 1}
c:=ORD(duminica); {c va avea valoarea 6}

l1:=(v1>v2); {l1 va avea valoarea TRUE}


l2:=v3=TipZi(0); {l2 va avea valoarea TRUE}
l3:=(SUCC(TipZi(ORD(SUCC(marti))))<>joi); {l3 va avea valoarea FA
LSE}
WRITELN('rangul lui v1,a=',a,' b=',b,' c=',c,' l1=',l1,' l2=',l2,
' l3=',l3);
END.
Observatie:
Datele de tip enumerare nu pot face obiectul unor operatii de citire
(de pe un anumit periferic de intrare) si nici obiectul unor operatii de scrier
e (pe un periferic de iesire).
2.5.6. Date de tip interval
a. Tipul interval de date
Tipul interval este un tip de date care se genereaza dintr-un tip or
dinal, de baza (intreg, caracter, logic, enumerare). Un asemenea tip de data poa
te fi definit, deci, ca un interval al oricarui alt tip ordinal definit anterior
, numit tip de baza al intervalului.
La definirea unui interval se indica valoarea constanta cea mai mica
si cea mai mare din interval si cuprinde toate valorile dintre el. Limita infer
ioara trebuie sa fie mai mica sau egala cu limita superioara. Definirea tipului
interval de date se face in sectiunea TYPE cu sintaxa urmatoare:
TYPE
TipInterval=PrimaValoare..UltimaValoare;
unde:
- TipInterval este un identificator utilizator care denumeste tipul
interval de date.
- PrimaValoare si UltimaValoare sunt literali sau constante ale tipu
lui de baza al intervalului si reprezinta limita inferioara, respectiv superioar
a, ale intervalului si PrimaValoare<=UltimaValoare;
Exemple:
................................................................................
............
CONST
c1=1; c2=60; PrimaLitera='f'; UltimaLitera='s';
TYPE
TipZile=(luni,marti,miercuri,joi,vineri,sambata,duminica);
TipIntLitereMici='a'..'z';
TipIntLitereMari='A'..'Z';
TipSubIntLitereMici=PrimaLitera..UltimaLitera;
TipIntCifre='0'..'9';
TipIntNumeric=c1..c2;
TipIntZile=marti..vineri; {un interval al unui tip enumerare}
b. Literalii si constantele tipului interval
Literalii si constantele tipului interval sunt aceeasi ca literalii
si constantele tipului de baza din care face parte intervalul si anume:
- Daca tipul de baza al intervalului este intreg atunci literalii si
constantele tipului interval sunt aceeasi ca literalii si constantele tipului i
ntreg.
- Daca tipul de baza al intervalului este caracter (CHAT) atunci lit
eralii si constantele tipului interval sunt aceeasi ca literalii si constantele
tipului caracter.
- Daca tipul de baza al intervalului este logic (BOOLEAN) atunci lit
eralii si constantele tipului interval sunt aceeasi ca literalii si constantele
tipului logic.
- Daca tipul de baza al intervalului este enumerare atunci literalii
si constantele tipului interval sunt aceeasi ca literalii si constantele tipulu
i enumerare, adica sunt identificatorii din lista de enumerare.
c. Variabile de tip interval
Variabilele de tip interval se declara in sectiunea VAR dupa cum urm
eaza:

VAR
v1[,v2][,v3] ...
v1[,v2][,v3] ...

:TipInterval; sau
:PrimaValoare..UltimaValoare;

unde:
- v1,v2,v3, ... sunt identificatori utilizator care denumesc variabi
lele de tip interval care, pe parcursul executarii programului, iau valori in mu
ltimea de valori definita de TipInterval, declarat in sectiunea TYPE sau in inte
rvalul [PrimaValoare..UltimaValoare]. Prima declarare are un caracter de general
itate deoarece tipul interval respectiv (TipInterval) poate fi utilizat in struc
tura curenta de program precum si in toate structurile de program apelabile din
structura curenta (proceduri sau functii).
- TipInterval sau PrimaValoare..UltimaValoare definesc intervalele i
n care variabilele de tip interval iau valori.
Exemplu:
................................................................................
..
VAR
a,b1,d12:TipIntLitereMici;
aplusb,alfa,beta:TipIntLitereMari;
t1,t10,t100:TipSubIntLitereMici;
x,y,z,xyz:TipIntNumeric;
suma,produs:20..2000;
................................................................................
..
d. Operatii cu date de tip interval
Operatiile care se pot aplica asupra datelor de tip interval sunt ac
eleasi cu operatiile care se pot aplica asupra tipului de baza la care apartine
intervalul si anume:
- Daca tipul de baza al intervalului este intreg atunci operatiile a
dmise asupra datelor de tip interval sunt aceleasi cu operatiile definite pe mul
timea numerelor intregi (+, -, *, DIV, MOD, NOT, XOR, OR, AND aritmetici, SHL, S
HR, compararea).
- Daca tipul de baza al intervalului este caracter (CHAR) atunci ope
ratiile admise asupra datelor de tip interval sunt aceleasi cu operatiile defini
te pe multimea caracterelor ASCII (+ = concatenarea, compararea).
- Daca tipul de baza al intervalului este logic (BOOLEAN) atunci ope
ratiile admise asupra datelor de tip interval sunt aceleasi cu operatiile defini
te pe multimea valorilor logice ( NOT, XOR, OR, AND logici, compararea).
- Daca tipul de baza al intervalului este enumerare atunci operatiil
e admise asupra datelor de tip interval sunt aceleasi cu operatiile definite pe
multimea identificatorilor din lista de enumerare (atribuirea, determinarea elem
entului precedent (PRED) si succesor (SUC), determinarea rangului unui element (
ORD), compararea ).
In cazul operatiilor aplicate asupra datelor de tip interval trebuie
sa se aiba grija ca valorile rezultatelor sa se incadreze in intervalul de defi
nitie, in caz contrar operatiile respective vor fi abandonate cu mesaje corespun
zatoare de eroare
Exemplu:
program intervale;
VAR
a:1..10;
{tip interval}
b:0..30;
{tip interval}
c,d,e:20..30; {tip imterval}
begin
b:=8;
a:=b;
{a va contine valoarea 8, in interval}
c:=b+15; {c va contine valoarea 23, in interval}
d:=c*3; {d va contine valoarea 69, in afara intervalului}
e:=25+d {e va contine valoarea 84, in afara intervalului}
END.

Instructiunile de atribuire de mai sus sunt corecte numai daca rezul


tatele executiei lor dau valori in intervalele pe care sunt definite variabilele
de tip rezultat. Astfel valorile variabilelor d si e sunt in afara intervalului
pe care sunt acestea definite.
Tipurile interval ofera un mijloc pentru formularea sugestiva si concisa a
problemelor. In plus se furnizeaza compilatorului Pascal mijloace de economisire
a spatiului de memorie gestionat si de a introduce elememnte de validare in exe
cutia atribuirilor.
De exemplu o variabila de tip interval x:0..20 se poate reprezenta, in majo
ritatea implementarilor limbajului Pascal pe 1 bytes (8 biti) in timp ce aceeasi
variabila decalarata Intreg ar putea ocupa mai multi octeti.
2.5.7. Date de tip multime (SET)
a. Tipul de date multime (SET)
Tipul multime (SET) defineste o multime de elemente apartinand unui
tip ordinal standard (char, byte, boolean) sau unui tip enumerare definit de pro
gramator.
Valorile acestui tip sunt in realitate submultimi ale multimii defin
ite de tipul de baza specificat in declararea tipului multimii. Numarul de eleme
nte depinde de cardinalul multimii de baza si poate fi cuprins intre 0 si numaru
l de valori posibile ale tipului de baza. Astfel, daca tipul de baza este CHAR s
au BYTE atunci numarul de elemente ale tipului de baza eate 256, daca tipul de b
aza este BOOLEAN atunci numarul de elemente este 2, iar daca tipul de baza este
enumerare atunci numarul de elemente este egal cu numarul identificatorilor din
lista respectiva de enumerare.
O multime este, de asemenea, o structura cu acces aleator, ale carei
elemente sunt toate de acelasi tip cu tipul de baza, care trebuie sa fie un tip
ordinal.
Declararea unui tip multime se face dupa cum urmeaza:
TYPE
TipMultime=SET of TipOrdinal;
unde:
- TipMultime este un identificator utilizator care denumeste tipul m
ultime de date.
- TipOrdinal este tipul de baza ordinal din care sunt formate submul
timile de tipul TipMultime (CHAR, BYTE, BOOLEAN sau un tip enumerare definit ant
erior).
Exemplu:
TYPE
TipCuloare=(negru, maron,rosu,portocaliu,galben,verde,albastru,gr
i,violet,alb);
TipZi=(luni,marti,miercuri,joi,vineri,simbata,duminica);
TipMultimeCar=SET OF CHAR; {numarul de elemente = 256}
TipMultimeLogic=SET OF BOOLEAN; {numarul de elemente = 2}
TipMultimeByte=SET OF BYE; {numarul de elemente = 256}
TipMultimeCulori=SET OF TipCuloare; {numarul de elemente = 10}
TipMultimeZile=SET OF TipZi; {numarul de elemente = 7}
b. Literali de tip multime
Literalii de tip multime sunt submultimi concrete ale unui tip ordin
al de baza si se scriu insiruindu-se literalii tipului de baza si/sau intervale
ale tipului de baza, separate prin virgula si incadrate intre paranteze drepte,
[ si ].
Exemple de literali multime:
- [3..8,45,80..85,90]- o submultime literal a tipului BYTE, formata
din elementele intregi:3,4,5,6,7,8,45,80,81,82,83,84,85,90.
- ['c'..'g','2'..'4','+','*','$',#13,^[] - o submultime literal a ti
pului CHAR formata din caracterele:'c','d','e','f','g','2','3','4','+','*','$',#
13(codul tastei ENTER),^[(codul tasteiESC).
- [negru..galben,gri,alb] - o submultime literal a tipului enumerare
TipCuloare continand elementele:negru,maron,rosu,portocaliu,galben,gri si alb.
- [FALSE..TRUE] - submultime literal a tipului BOOLEAN avand element

ele FALSE si TRUE;


- [] - reprezinta submultimea literal vida apartinand oricarui tip d
e multime
c. Constantele de tip multime
Constantele de tip multime se definesc in sectiunea de constante CON
ST si sunt constante multime simbolice si constante multime cu tip dupa cum urme
aza:
CONST
{declararea unei constante multime simbolica}
ConstMultSimbolica=LiteralMultime/AltaConstMult;
{declararea unei constante multime cu tip}
ConstMultCuTip:SET OF TipOrdinal=LiteralMultime/AltaConstMult;
unde:
- ConstMultSimbolica este un identificator care denumeste constanta
multime simbolica respectiva, nemodificabila pe parcursul executarii programului
.
- ConstMultCuTip este un identificator care denumeste constanta mult
ime cu tip respectiva, modificabila pe parcursul executarii programului (deci o
variabila multime initializata).
- LiteralMultime este un literal multime in sensul precizat mai sus;
- AltaConstMult este o alta constanta multime anterior definita.
Exemple:
CONST
CifreImpare=['1','3',5','7','9'];
LitereMici=['a'..'z'];
LitereMari=['A'..'Z'];
ZileDePost:SET OF TipZi=[luni,TipZi(2),PRED(sambata)];
CuloriCalde:SET OF TipCuloare=[rosu,portocaliu,TipCuloare(4)];
CuloriReci:SET OF TipCuloare=[albastru,gri,violet];
NumerePrime:BYTE=[3,7,11,13,17,19,23,29];
d. Variabile de tip multime
Variabilele de tip multime se declara in sectiunea VAR cu urmatoarea
sintaxa:
VAR
v1[,v2][,v3] ... :TipMultime;
sau
v1[,v2][,v3] ... :SET OF TipOrdinal;
unde:
- v1,v2,v3, ... sunt identificatori care denumesc variabile de tip m
ultime precizat de TipMultime sau direct prin SET OF TipOrdinal.
VAR
a,b,c:TipMultCar; {a,b,c sunt variabile care vor contine submul
timi de caractere}
x,y,z:TipMultByte; {x,y,z sunt variabile care vor contine submul
timi de numere
intregi intre
0 si 255}
m1,m2,m3,m4:SET OF BOOLEAN; {m1,m2,m3,m4 sunt submultimi de valori
logice TRUE si FALSE}
subm1,subm2,subm3:TipMultimeZile; {submultimi de elemente de tip e
numerare}
e. Operatii cu date de tip multime (SET)
e1. Operatia de atribuire
Prin operatia de atribuire se asociaza unei variabile rezultat de ti
p multime valoarea unei expresii de tip multime dupa sintaxa urmatoare:
v:=ExpresieMultime;
unde:
- v este o variabila rezultat de tip multime de un anumit tip standa
rd sau definit de utilizator, declarat corespunzator in sectiunea de variabile V
AR.

- ExpresieMultime este expresie de tip multime, adica un ansamblu de


date de tip multime (literali, constante sau variabile) legate prin operatorii
definiti implicit pe tipul multime de date (intersectia, reuniunea, diferenta);
................................................................................
..........................................
CONST
CifreImpare=['1','3',5','7','9'];
LitereMici=['a'..'z'];
LitereMari=['A'..'Z'];
ZileDePost:SET OF TipZi=[luni,TipZi(2),PRED(sambata)];
CuloriCalde:SET OF TipCuloare=[rosu,portocaliu,TipCuloare(4)];
CuloriReci:SET OF TipCuloare=[albastru,gri,violet];
NumerePrime:BYTE=[3,7,11,13,17,19,23,29];
VAR
v1,v2,v3:TipMultimeCar;
a,b,c,d,e:TipMultimeByte;
x,y,z,u,v:TipMultimeCulori;
BEGIN
v1:=LitereMici;
v2:=['A'..'F'];
v3:=CifreImpare;
a:=NumerePrime;
b:=[0,2,4,6,8];
c:=a;
d:=b;
e:=d;
x:=[negru..galben];
y:=x;
z:=[rosu, portocaliu,galben];
u:=CuloriCalde;
v:=CuloriReci;
END.
................................................................................
.......................................................
e2. Operatia de intersectie (*)
Intersectia a doua multimi este data de relatia:
operand1 * operand2
unde operand1 si operand2 sunt date de tip multime de acelasi tip iar rezultatul
intersectiei este tot o multime de acelasi tip care contine elementele comune a
le celor doua multimi
Exemplu:
Fie multimile:
x:=['1'..'6','a'..'f']; si
y:=['4'..'9','c'..'i'];
atunci u:=x*y va contine elementele comune celor doua multimi, adica u:=['4'..'6
','c'..'f'];
e3. Operatia de reuniune (+)
Reuniunea a doua multimi este data de relatia:
operand1 + operand2
unde operand1 si operand2 sunt date de tip multime de acelasi tip iar rezultatul
reuniunii este tot o multime de acelasi tip care contine elementele celor doua
multimi
Exemplu:
Fie multimile:
x:=['1'..'6','a'..'f']; si
y:=['4'..'9','c'..'i'];
atunci u:=x+y va contine elementele celor doua multimi, adica u:=['1'..'9','a'..
'i'];
e4. Operatia de diferenta (-)
Diferenta a doua multimi este data de relatia:

operand1 - operand2
unde operand1 si operand2 sunt date de tip multime de acelasi tip, iar rezultatu
l diferentei este tot o multime de acelasi tip, formata din elementele primei mu
ltimi (operand1) care nu apartin la cea de-a doua multime (operand2).
Exemplu:
Fie multimile:
x:=['1'..'6','a'..'f']; si
y:=['4'..'9','c'..'i'];
atunci u:=x-y va contine elementele primei multimi care nu apartin celei de-a do
ua multimi, adica u:=['1'..'3','a','b'] iar v:=y-x va contine elementele celei d
e-a doua multime care nu apartin la prima multime, adica v:=['7'..'9','g','i']
e5. Operatia de comparare a doua multimi
Operatiile anterioare (atribuirea, intersectia, reuniunea si diferen
ta) sunt operatii interne deoarece rezultatele acestora apartin tipului multime
al operanzilor.
Operatia de comparare este o lege externa deoarece in urma comparari
i a 2 multimi rezulta o valoare logica. Compararea a 2 multimi se face dupa rela
tia:
operand1 OperatorRelatie operand2
unde:
- operand1 si operand2 sunt date de tip multime de un anumit tip (li
terali, constante, variabile sau expresii).
- OperatorRelatie apartine multimii operatorilor de comparare a 2 mu
ltimi {<=, >=, =, <>, IN) cu semnificatiile urmatoare:
. a <= b defineste operatia de incluziune a doua multimi (ab) si are
valoarea TRUE daca toate elementele multimii a sunt incluse si in multimea b si
FALSE in caz contrar.
. a >= b defineste operatia de incluziune a doua multimi (ab) si are
valoarea TRUE daca toate elementele multimii b sunt incluse si in multimea a si
FALSE in caz contrar.
. a = b defineste operatia de egalitate a doua multimi (a=b) si are
valoarea TRUE daca ab si daca ba si FALSE in caz contrar.
. a <> b defineste operatia de inegalitate a doua multimi (a<>b) si
are valoarea TRUE daca a<>b si FALSE in caz contrar (a=b).
. x IN a defineste apartenenta unui element la o multime de un tip c
ompatibil, si are valoarea TRUE daca elementul x apartine la multimea a (xa) si
FALSE in caz contrar.
Exemplu:
PROGRAM multimi1;
TYPE
TipCuloare=(negru, maron,rosu,portocaliu,galben,verde,albastru,gr
i,violet,alb);
TipZi=(luni,marti,miercuri,joi,vineri,simbata,duminica);
TipMultimeCar=SET OF CHAR; {numarul de elemente = 256}
TipMultimeLogic=SET OF BOOLEAN; {numarul de elemente = 2}
TipMultimeByte=SET OF BYE; {numarul de elemente = 256}
TipMultimeCulori=SET OF TipCuloare; {numarul de elemente = 10}
TipMultimeZile=SET OF TipZi; {numarul de elemente = 7}
CONST
CifreImpare=['1','3',5','7','9'];
LitereMici=['a'..'z'];
LitereMari=['A'..'Z'];
ZileDePost:SET OF TipZi=[luni,TipZi(2),PRED(sambata)];
CuloriCalde:SET OF TipCuloare=[rosu,portocaliu,TipCuloare(4)];
CuloriReci:SET OF TipCuloare=[albastru,gri,violet];
NumerePrime:BYTE=[3,7,11,13,17,19,23,29];
VAR
v1,v2,v3:TipMultimeCar;
a,b,c,d,e:TipMultimeByte;
x,y,z,u,v:TipMultimeCulori;

m1,m2,m3:TipMultimeZile;
l1,l2,l3,l4,l5,l6:BOOLEAN;
BEGIN
v1:=CifreImpare;
v2:=['0','2','4','6','8'];
v3:=v1*v2+LitereMici+LitereMari;
a:=NumerePrime-[13,17,19,23];
b:=[1..50,60,70,80,90..100]-NumerePrime*[1,3,5,7,9,11,13,];
c:=a+b-a*b;
d:=[1..100,110,120..127]-(a+b);
e:=(a+b)*(c-d);
x:=CuloriCalde+CuloriReci*[negru..galben,gri,alb];
y:=(CuloriCalde+[negru..rosu]*x)-(CuloriReci+[albastru..gri]);
z:=(y-CuloriCalde)*(x+CuloriReci);
u:=x+y*x;
v:=x*y-z*u;
m1:=[luni..joi,sambata];
m2:=ZileDePost*m1;
m3:=m2+m1-[luni..miercuri];
l1:=(v1<>v2) XOR (v1*v3<=v3) AND (m3>=m2);
l2:=NOT(a=b) OR (b>=a) AND (x+y>=z-u*v);
l3:=(luni IN m1) AND NOT (31 IN NumerePrime);
l4:=l1 OR NOT l3 XOR (maron IN x);
l5:=(m2<=m3) XOR (miercuri IN m1);
l6:=(rosu < galben) AND (l1 XOR (z<=CuloriCalde);
WRITELN('l1=',l1,' l2=',l2,' l3=',l3,' l4=',l4,' l5=',l5,' l6=',l
6);
END.
PROGRAM multimi2;
TYPE
codculori=(negru,maron,rosu,portocaliu,galben,verde,albastru,viol
et,gri,alb);
culoare=SET of codculori;
VAR
cul1,cul2,cul3:culoare;
vocale,consoane,literemari,literemici:SET of char;
multime1:SET of 0..6;
xlogic1,xlogic2,xlogic3:boolean;
BEGIN
cul1:=[verde]; cul2:=[];cul3:=[];
cul2:=cul2+[pred(verde)];
cul3:=cul3+[succ(verde)];
LitereMari:=['A','B','C','D','E','F','G','H','I','J','K','L','M',
'N','O','P','Q','R','S','T','U','V','W','X','Y
','Z'];
vocale:=['A','E','I','O','U'];
consoane:=literemari-vocale;
xlogic1:=[4..5]>=multime1;
xlogic2:=LitereMari>=vocale;
xlogic3:=galben IN cul2;
WRITELN('l1='l1,' l2=',l2,' l3=',l3);
END.
Operatiile cu multimi sint mai rapide si elimina teste complicate. T
estarea:
IF(ch='A' OR ch='E' OR ch='I' OR Ck='O' OR ch='U') THEN
cul3:=cul3+[succ(gri)];
poate fi scrisa utilizand multimi astfel:
IF ch in ['A','E','I','O','U'] THEN
cul3:=cul3+[succ(gri)];
2.5.8. Date de tip real. Operatii asupra datelor de tip intreg.

a. Tipuri reale de date


O data de tip real este un element al multimii numerelor reale.In fu
nctie de modul de reprezentare in memoria calculatoarelor si de domeniul de defi
nitie al acestor date in LTP exista mai multe tipuri de date reale dupa cum urme
aza:
TipReal
Domeniul valorilor Mod de reprezentare Cifre semnificativ
e
--------------------------------------------------------------------------------------------------REAL
2.9E-39..1.7E38
6 bytes
11-12 cifre
SINGLE
1.5E-45..3.4E38
4 bytes
7-8 cifre
DOUBLE
5.0E-324..1.7E308
8 bytes
15-16
cifre
EXTENDED
3.4E-4932..1.1E4932
10 bytes
19-20 cifre
COMP
-2E63+1..2E63-1
8 bytes
1920 cifre
--------------------------------------------------------------------------------------------------Trebuie aratat ca tipul real COMP ia numai valori intregi in interva
lul specificat iar in calcule se considrea ca un numar real fara parte fractiona
ra.
Datele de tip real se reprezinta in memoria calculatoarelor sub form
a de caracteristica si mantisa (ccmmmmmm), unde caracteristica contine informati
i relative la exponentul bazei 2, la care se ridica baza 2 ce inmulteste caracte
ristica normalizata (0.mmmmmm);
b. Literali reali
Un literal real este de fapt un numar real din multimea numerelor re
ale R si poate fi scris sub forma zecimala in virgula fixa sau sub forma zecimal
a in virgula flotanta externa.
In forma zecimala in virgula fixa, un literal real este un sir de fo
rma [+/-]CifreZecimale.CifreZecimale (cu parte intreaga si parte fractionara sep
arate prin caracterul punct (.)
Exemple: -345.753, +1753.0065, 789.543).
In forma zecimala in virgula flotanta externa, un literal real este
un sir de forma [+/-]CifreZecimale.CifreZecimale[E/e][+/-]xx unde E sau e reprez
inta baza 10 a puterii, iar [+/-]xx reprezinta exponentul puterii cu baza 10 (si
deci literalul reprezinta numarul real [+/-]CifreZecimale.CifreZecimale*10).
Exemple:
-345.753E-4 corespunde numarului -345.753*10-4, +1753.0065e20 coresp
unde numarului +1753.0065*1020, iar 789.543E-10 corespunde numarului 789.543*1010.
Forma zecimala in virgula flotanta externa se foloseste pentru repre
zentarea numerelor reale foarte mari sau foarte mici (apropiate de 0)
c. Constante de tip real
Constantele de tip real se declara in sectiunea CONST a unei struct
uri de program (program principal, procedura sau functie) si pot fi constante si
mbolice sau constante cu tip dupa cum urmeaza:
CONST
{declararea unei constante reale simbolice}
ConstRealaSimbolica=ExpresieReala;
{declararea unei constante reale cu tip}
ConstRealaCuTip:TipReal=ExpresieReala;
unde:
- ConstRealaSimbolica este un identificator utilizator ales de progr
amator care denumeste simbolic o constanta reala si a carei valoare ramane nemod
ificata pe tot parcursul executiei programuluui.

- ConstRealaCuTip este un identificator utilizator ales de programat


or care denumeste o constanta reala cu tip, care in esenta nu este alceva decat
o variabila initializata si care pe parcursul executarii programului se comporta
ca o variabila veritabila.
- TipReal este unul din tipurile reale cunoscute (REAL, SINGLE, DOUB
LE, EXTENDE, COMP).
- ExpresieReala poate fi un literal real, o constanta reala anterior
definita sau o expresie reala formata dintr-o multime de literali si constante
anterior definite legate prin operatori reali (+, -, *, /). Expresia ExpresieRea
la este evaluata si atribuita constantei respective in timpul compilarii program
ului.
Exemple:
CONST
c1=23.75; c2=65335.725; unu=1.0,minus1=-1.0;
c3:REAL=-4500.565; ab23:SINGLE=155.755; suma:DOUBLE=2500.75;
csuma:REAL=c1*4.5+(unu+15.5)*(25.0-minus1);
cprodus:REAL=(c2/25)-c3* ab23;
divprod=(c1 / suma) - (c2 * ab23);
Constantele cu tip, indiferent de valoarea lor, se genereaza pe lung
imea tipului real specificat. Constantele csuma, cprodus si divprod primesc valo
rile reale de tipul specificat, dupa evaluarea expresiilor reale, pe parcursul c
ompilarii.
d. Variabile de tip real
Variabilele de tip real se declara in sectiunea VAR a unei structuri
de program (program principal, procedura sau functie) astfel:
VAR
v1[,v2][,v3]......:TipReal;
unde:
- v1,v2,v3,... sunt identificatori utilizator definiti de programato
r care denumesc, pe parcursul programului, variabile reale.
- TipReal este unul din tipurile reale (REAL, SINGLE, DOUBLE, EXTEND
ED, COMP) cunoscute si implementate in LTP.
Exemplu:
VAR
x1,n100,kx7:REAL; {variabile cu date reale pe 6 bytes}
v1,t,tact,low:SINGLE; {variabile cu date reale pe 4 bytes}
a,b,cab,suma:DOUBLE; {variabile cu date reale pe 8 bytes}
produs,cat,y1:EXTENDED; {variabile cu date reale pe 10 bytes}
minus10,plus4:COMP; {variabile cu date reale intregi pe 8 bytes}
e. Operatii asupra datelor de tip real
Operatiile se aplica asupra a doi termeni numiti operanzi. Orice ope
ratie reala se aplica asupra a doi operanzi dupa relatia:
operand1 OperatorReal operand2; unde:
- operand1 si operand2 sunt termenii operatiei si sunt date de tip r
eal (literali, constante, variabile, functii sau expresii).
- OperatorReal este un operator din multimea operatorilor reali {+,
-, *, /}, unde:
+ este operatorul pentru adunare reala;
- este operatorul pentru scadere reala;
* este operatorul pentru inmultire reala;
/ este operatorul pentru impartire reala;
Operatorii reali (+,-,*,/) aplicati asupra datelor de tip real furni
zeaza tot valoari reale.
Daca intr-o operatie reala unul dintre operanzi este de tip real (ce
lalalt putind fi de tip integer), atunci rezultatul operatiilor de inmultire (*)
, impartire (/), adunare (+), scadere (-) este de tip real.
f. Functii cu valori reale in LTP
In Limbajul Turbo Pascal exista functii predeclarate, implicit defin
ite, care accepta un argument real si furnizeaza un rezultat real.
- functia ABS(x) - returneaza valoarea reala a modulului unui numar

real (x).
- functia SQR(x) - returneaza in multimea numerelor reale paratul un
ui numar real x.
Exista de asemenea functii predeclarate sau implicit definite care a
u argument real sau intreg si furnizeaza un rezultat real.
- functia SIN(x) - returneaza valoarea reala a sinusului unei valori
de tip intreg sau real care reprezinta valoarea unui unghi in radiani.
- functia COS(x) - returneaza valoarea reala a cosinusului unei valo
ri de tip intreg sau real care reprezinta valoarea unui unghi in radiani.
- functia ARCTAN(x) - returneaza valoarea reala in radiani a unui un
ghi a carui tangenta x este data, de tip real sau intreg.
- functia LN(x) - returneaza valoarea reala a logaritmului natural a
unui numar x de tip intreg sau real.
- functia EXP(x) - returneaza valoarea reala a exponentialei e unde
x este un numar de tip intreg sau real.
- functia SQRT(x) - returneaza in real, radacina patrata a unui numa
r x de tip real sau intreg.
- functia INT(x) - returneaza in real, partea intreaga a unui numar
x de tip real.
- functia PI - returneaza in real, valoarea numarului PI (3.14159265
35897932385)
g. Expresii reale in LTP
O expresie reala este un ansamplu de date reale (literali, constante
, variabile, funcii sau expresii) legate prin operatorii reali tinandu-se seama
de prioritatile operatorilor si de prioritatile introduse de prezenta parantezel
or rotunde.
Evaluarea unei expresii reale se executa astfel:
- Se evalueaza mai intai expresiile din paranteze (de la cele mai in
terioare pana la cele mai exterioare.
- Operatiile din paranteza se executa in ordinea naturala a priorita
tilor acestora:
. evaluarea functiilor reale
. operatiile unare: +, . operatiile multiplicative: *, /
. operatiile aditive: +, h. Operatia de atribuire reala
Prin operatia de atribuire reala se intelege operatia prin care unei
variabile reale numita rezultat, declarata corespunzator in sectiunea VAR, i se
asociaza valoarea unei expresii reale, ca mai jos:
v:= ExpresieReala;
unde:
:= este operatorul de atribuire in LTP;
- v este o variabila reala de un anumit tip real, numita si variabil
a rezultat, declara corespunzator in sectiunea de variabile VAR;
- ExpresieReala este o expresie de tip real conform celor precizate
la punctul g.
Mod de executie:
pasul 1 - se evalueaza expresia ExpresieReala tinandu-se seama de t
ipul operanzilor expresiei, de prioritatile operatorilor si de prioritatile intr
oduse de paranteze.
pasul 2 - se converteste tipul valorii expresiei la tipul variabilei
rezultat v.
pasul 3 - se atribuie variabilei rezultat v valoarea expresiei conve
rtita la pasul anterior
i. Relatii intre datele de tip real
Intre datele de tip real se pot stabili relatii de comparare dupa cu
m urmeaza:
operand1 OperatorRelatie operand2

unde:
- operand1 si operand2 sunt date de tip real (literali, constante, v
ariabile, functii sau expresii)
OperatorRelatie este un operator de comparare apartinand multimi {<,
<=, >, >=, =, <>}
Operatia de comparare a doua date de tip real este o operatia extern
a deoarece in urma executiei sale rezulta o valoare logica: TRUE (adevarat) daca
relatia este verificata si FALSE (fals) daca relatia nu este verificata.
Exemple:
PROGRAM OperatiiCuDateReale;
CONST
a=27.75; b:REAL=-3.25;
VAR
c,d,e,f,g,h,i,j,e1,e2:REAL;
l1,l2,l3:BOOLEAN;
BEGIN
c:=35.56
d:=c+b;
e:=d-a;
f:=e*9.75;
g:=f / 3.17;
e1:=-35.73
e2:=-e1;
WRITELN ('a=',a,' b=',b,' c=',c,' d=',d,' e=',e,' f=',f,' g=',
g,' e1=',e1,' e2=',e2);
l1:=(a<=f);
l2:=(d<>e);
l3:=(e2=-e1);
WRITELN('l1=',l1,' l2=',l2,' l3=',l3);
END.
Observatie: Programul de mai sus se poate executa urmarindu-se valor
ile variabilelor initializate si rezultatele executarii diverselor operatii asup
ra datelor de tip real.
Tipul rezultatului obtinut in urma unei operatii reale asupra a doi
operanzi reali (operand1 OperatorReal operand2) va fi dat de tipul operandului
cu prioritatea cea mai ridicata (COMP>EXTENDED>DOUBLE>REAL>REAL>SINGLE:
2.5.9. Date de tip sir de caractere (STRING). Operatii asupra datelo
r de tip sir.
a. Tipul sir de caractere
Tipul sir de caractere (STRING) este un tip special de date, specifi
c LTP. Valoarea posibila a unei date de tip STRING este un sir de caractere ASCI
I de o anumita lungime maxima precizata la declararea acestei date. Lungimea max
ima posibila a unei date de tip STRING este de 255 bytes (octeti). In memorie o
data de tip STRING se reprezinta prin insiruirea codurilor ASCII ale caracterelo
r componente precedate de lungimea sirului plus 1 exprimata in binar pe un byte
(8 biti)
Tipul sir de caractere se poate declara in sectiunea TYPE astfel:
TYPE
TipSir=STRING[LungimeSir];
unde:
- TipSir este un identificator utilizator ales de programator pentru
a identifica tipul sir de caractere respectiv si care poate fi utilizat ulterio
r la declararea datelor de tip STRING.
- LungimeSir poate fi un literar sau o constanta intreaga cuprinsa i
ntre 0 si 255 si precizeaza lungimea maxima a datelor de tip STRING declarata pr
in TipSir.
Neprecizarea lungimii sirului antreneaza declararea implicita a unui
tip sir de caractere de lungime 255 bytes
Exemplu:
TYPE

TipSir1=STRING[75];
TipSir2=STRING[125];
TipSir3=STRING;
b. Literali de tip sir (STRING)
Un literal de tip sir (LiteralSir) se reprezinta prin insiruirea car
acterelor ASCII, in una din cele patru forme prezentate la datele de tip CHAR: '
caracter', #CodCaracterIntreg, #$CodCaracterHexa sau ^caracter
Exemple:
'acesta este un sir de caractere ASCII sau un "STRING".'
'a1'#43'b1'#$3D'200' ceea ce reprezinta sirul 'a1+b1=200'
'200'#2A'30'#61'60'#48#$30 reprezentand sirul '200*30=6000'
c. Constante de tip sir (STRING)
Constantele de tip sir de caractere se declara in sectiunea de const
ante CONST si pot fi constante sir simbolice, care nu-si modifica valoarea pe pa
rcursul executarii programului, si constante sir cu tip, care nu sunt altceva de
cat variabile de tip STRING initializate. Sintaxa generala este urmatoarea:
CONST
ConstSirSimbolica:ExpresieSir;
ConstSirCuTip:STRING[n]/TipSir=ExpresieSir;
unde:
- ConstSirSimbolica este un identificator utilizator care denumeste
constanta simbolica respectiva.
- ConstSirCuTip este un identificator utilizator care denumeste cons
tanta de tip sir respectiva.
- STRING[n] sau TipSir reprezinta tipul special STRING de lungime n
bytes, respectiv tipul sir declarat anterior intr-o srctiune TYPE.
- ExpresieSir poate fi un literal de tip sir (LiteralSir), o constan
ta STRING anterior definita, sau o expresie de tip sir (concatenarea (+) mai mul
tor literali sau constante anterior definite.
CONST
c1:'apa'; c2:STRING[2]='ac'; s1=#96#$72'e';
SirSuma:STRING[9]=c2+c1+s1; {SirSuma va avea valoarea 'acaparare'
}
d. Variabile de tip sir (STRING)
Variabilele de tip sir se declara in sectiunea VAR astfel:
VAR
v1[,v2][,v3] ... :TipSir/STRING[n];
unde:
- v1,v2,v3, ... sint identificatori utilizator care denumesc variabi
le de tip STRING.
- TipSir este un tip STRING declarat corespunzator in sectiunea TYPE
iar STRIN[n] este tipul sir de n caractere declarat direct in sectiunea VAR.
Lungimea efectiva a sirulului este incarcata, in momentul atribuirii
, in primul byte (octet) al sirului. Valoarea acestui byte poate fi fortata de c
atre programator prin urmatoarea instructiune de atribuire:
v1[0]:=#NumarDeCaractereDinSir; Exemplu: v1[0]:=#25;
e. Referirea la date de tip sir
Referirea la o data de tip sir (constanta sau variabila) se poate fa
ce in totalitatea caracterelor sirului, prin precizarea numelui acesteia, sau pa
rtial prin referirea la caracterele sirului, prin precizarea numelui acesteia si
a pozitiei caracterului referit din sir.
Exemplu:
- prin c1, c2, s1, SirSuma, v1, v2 ne referim la sirurile corespunza
toare in totalitatea caracterelor componente ale acestora
- prin c1[i], c2[i], s1[i], SirSuma[i], v1[i], v2[i] ne referim la c
aracterul existent in sir pe pozitia i (1<=i<=lungimea sirului);
f. Operatii asupra datelor de tip sir (STRING)
f.1. Operatia de concatenare a doua siruri
Singura operatie definita pe multimea sirurilor de caractere este co
ncatenarea (+) definita astefel:

operand1 + operand2
unde:
- operand1 si operand2 sunt date de tip STRING de lungimi l1 si resp
ectiv l2
- rezultatul concatenarii este dat de alaturarea celor doua siruri o
btinandu-se un sir de lungime l1+l2;
f.2. Operatia de comparare a doua date de tip sir (STRING)
Operatia de comparare a doua date de tip STRING se desfasoara dupa r
elatia:
operand1 OperatorRelatie operand2
unde:
- operand1 si operand2 sunt date de tip STRING (literali, constante,
variabile sau expresii de tip STRING).
- OperatorRelatie este un operator de comparare (<, <=, >, >=, =, <
>).
Compararea a doua date de tip sir se face comparandu-se de la stang
a la dreapta codurile ASCII (pozitiile ocupate in tabela) ale caracterelor compo
nente aflate pe pozitii omoloage. Rezultatul compararii este o valoare logica TR
UE (adevarata) daca compararea este verificata si FALSE daca compararea nu este
verificata
f.3. Operatia de atribuire sir de caractere (STRING)
Operatia de atribuire se defasoara dupa relatia:
v:=ExpresieSir;
unde:
- ExpresieSir este o expresie de tip sir (literal, constanta, variab
ila sau expresie de tip sir de caractere).
- v este o variabila rezultat de tip sir declarata corespunzator in
sectiunea VAR.
Mod de executie:
pasul 1: Se evalueaza expresia de tip sir ExpresieSir;
pasul 2: Se atribuie variabilei rezultat v valoarea expresiei de la
pasul 1.
Exemplu de program cu siruri:
PROGRAM siruri;
CONST
c1:'apa'; c2:STRING[2]='ac'; s1=#96#$72'e';
SirSuma:STRING[9]=c2+c1+s1; {SirSuma va avea valoarea 'acaparare'
}
VAR
v1,v2,v3:STRING;
ch1,ch2,ch3:CHAR;
l1,l2,l3,l4:BOOLEAN;
BEGIN
v1:=SirSuma;
{v1 va contine sirul 'acaparare'}
v2:=c2+'cele'+s1; {v2 va contine sirul 'accelerare'}
v3:=c1+s1;
{v3 va contine sirul 'aparare'}
ch1:=v2[5];
{ch1 va contine caracterul 'l'}
ch2:=v3[2];
{ch2 va contine caracterul 'p'}
ch3:=v1[8];
{ch3 va contine caracterul 'r'}
l1:=v1=SirSuma;
l2:= (v3<>v1) AND (s1<SirSuma);
l3:= (ch1<>ch2) XOR (ch1<v5);
l4:=(ch1+ch2) <= (ch3+c1);
WRITELN('c1=',c1,' c2=',c2,' s1=',s1,'SirSuma=',SirSuma,' v1=',v1
,' v2=',v2,
' v3=',v3,' ch1=',ch1,' ch2=',ch2,' ch3=',ch3);
WRITELN('l1=',l1,' l2=',l2,' l3=',l3,' l4=',l4);
END.
g. Functii predefinite asupra sirurilor de caractere
In LTP exista mai multe proceduri si functii predefinite asupra date

lor de tip sir de caractere in unit-ul SYSTEM cum ar fi:


g.1. procedura DELETE(VarSir,PozSir,NumarCaractere) - sterge din sir
ul VarSir (variabila sau constanta) un numar de caractere precizat de NumarCara
ctere incepand cu pozitia PozSir din sir.
g.2. procedura INSERT(SirDeInserat,SirDestinatie,PozSir) - insereaza
sirul sursa (variabila sau constanta) "SirDeInserat" in sirul destinatie "SirD
estinatie" (variabila sau constanta) incepand cu pozitia PozSir din sirul destin
atie. Sirul rezultat nu poate depasi 255 de caractere.
g.3. functia COPY(SirSursa,PozSir,NumarCaractere) - extrage un subsi
r din sirul SirSursa (variabila sau constanta) de lungime precizata de NumarCara
ctere incepand cu pozitia PozSir.
g.4. functia CONCAT(sir1[,sir2] ....) - concateneaza (alatureaza) si
rurile specificate.
g.5. functia POS(SubSir,Sir) - furnizeaza pozitia din sirul Sir de l
a care incepe susirul SubSir. Daca subsirul specificat nu exista functia returne
aza valoarea 0.
g.6. functia LENGTH(sir) - furnizeaza (returneaza) lungimea unei dat
e de tip sir (variabila sau constanta).
g.7. procedura STR(VarNumerca[:LungimeSir[:NumarZecimale]],Sir) - co
nverteste valoarea variabilei numerice VarNumerica (intreaga sau reala) intr-un
sir de caractere de lungime LungimeSir cu un numar de cifre zecimale egal cu Num
arZecimale (daca variabila numerica este de tip real), aliniat la dreapta.
g.8. procedura VAL(Sir,VarNumerica,CodEroare) - conversteste expresi
a de tip sir "Sir " in valoarea numerica VarNumerica (variabila sau constanta).
CodEroare va avea valoarea 0 daca nu s-a detectat nici-un caracter nepermis in s
ir sau va avea pozitia caracterului din sir neconform cu caracterele unei date n
umerice.
Exemplu:
PROGRAM FunctiiCuSiruri;
CONST
c1:'apa'; c2:STRING[2]='ac'; s1=#96#$72'e';
SirSuma:STRING[9]=c2+c1+s1; {SirSuma va avea valoarea 'acaparare'
}
VAR
v1,v2,v3,v4,v5,v6,v7,v8:STRING;
n1,n2,CodEroare:BYTE;
a,b:REAL;
sira,sirb:STRING;
BEGIN
v1:=SirSuma;
{v1 va contine sirul 'acaparare'}
v2:=c2+'cele'+s1; {v2 va contine sirul 'accelerare'}
v3:=c1+s1;
{v3 va contine sirul 'aparare'}
{stergerea unui subsir dintr-un sir dat}
\
v4:=v1;
DELETE(v4,2,2);
{v4 va contine sirul 'aparare'}
{inserarea unui subsir intr-un sir dat}
v5:=v4;
INSERT('toa',v5,5);
{v5 va contine sirul
'aparatoare'}
{copierea unui subsir dintr-un sir dat}
v6:=COPY(v2,3,4);
{v6 va contine sirul 'cele'}
v7:=COPY(v1,6,4);
{v7 va contine sirul 'rare'}
{concatenarea de siruri}
v8:=CONCAT(v6,'b',v7);
{v8 va contine sirul 'celebrare'}
{determinarea pozitiei unui subsir intr-un sir dat}
n1:=POS(c1,v1);
{c1='apa' va avea pozitia 3 in v
1='acaparare'}
n2:=LENGTH(v2);
{v2 are lungimea de 10 caractere}
{convertirea unei valori reale intr-un sir de caractere}
a:=-125.758;

STR(a:12:5,sira);
{convertirea unui sir de caractere cu cifre zecimale intr-o valoa
re reala}
sirb:='-125.12345e3';
VAL(sirb,b,CodEroare);
WRITELN('c1=',c1,' c2=',c2,' s1=',s1,'SirSuma=',SirSuma,' v1=',v1
,' v2=',v2,
' v3=',v3,' v4=',v4,' v5=',v5,' v6=',v6,' v7=',
v7,' v8=',v8);
WRITELN(' n1=',n1:1,' n2=',n2:1,' a=',a:8:3,' sirA=',sira);
IF (CodEroare=0) THEN
WRITELN('conversie sir- valoare numerica reusita: sirb=',sir
b,' si b=',b:14:5)
ELSE
WRITELN('eroare:sirul contine un caracter nepermis in pozitia '
,CodEroare:1);
END.
3. Probleme propuse pentru rezolvare:
3.1. Se dau date intregi alese arbitrar (literali, constante, variab
ile) si de diverse tipuri intregi (SHORTINT, BYTE, INTEGER, WORD, LONGINT). Sa s
e construiasca diverse expresii intregi dupa exemplele din lucrare, folosindu-se
toti operatorii intregi si functiile intregi cunoscute, si sa se urmareasca, pr
in afisare, evaloarea acestora.
3.2. Se dau date reale alese arbitrar (literali, constante, variabil
e) si de diverse tipuri reale (REAL, SINGLE, DOUBLE, EXTENDED, COMP). Sa se cons
truiasca diverse expresii reale dupa exemplele din lucrare, folosindu-se toti op
eratorii reali si functiile reale cunoscute, si sa se urmareasca, prin afisare,
evaloarea acestora.
3.3. Se dau date relationale si logice alese arbitrar (literali, con
stante, variabile). Sa se construiasca diverse expresii logice dupa exemplele di
n lucrare, folosindu-se toti operatorii
relationali si logici precum si functiile logice cunoscute, si sa se urmareasca,
prin afisare, evaloarea acestora.
3.4. Se dau date de tip caracter si sir, alese arbitrar (literali, c
onstante, variabile). Sa se construiasca diverse expresii de tip sir dupa exempl
ele din lucrare, folosindu-se operatiile si functiile asupra datelor de tip CHAR
si STRING , si sa se urmareasca, prin afisare, evaloarea acestora.
3.5. Se dau date de tip interval si enumerare, alese arbitrar (liter
ali, constante, variabile). Sa se construiasca diverse expresii cu aceste tipuri
de date, dupa exemplele din lucrare, folosindu-se operatiile si functiile asupr
a acestor tipuri de date, si sa se urmareasca, prin afisare, evaloarea acestora.
3.6. Se dau date de tip multime, alese arbitrar (literali, constante
, variabile). Sa se construiasca diverse expresii cu aceste tipuri de date, dupa
exemplele din lucrare, folosindu-se toate operatiile cu multimi, si sa se urmar
easca, prin afisare, evaloarea acestora.
3.7. Se da valoarea unei temperaturi in grade Celsius. Sa se scrie p
rogramul in LTP pentru convertirea acestei temperaturi in grade absolute si in g
rade Farenheit.
3.8. Folosindu-se date de tip sir (literali, constante si variabile)
, sa alcatuiasca urmatorul cap de tabel si sa se afiseze pe ecran:
----------------------------------------------------------------------------------------Nr.crt
Cod matricol
Nume si prenume
Anul
Grupa
Media
----------------------------------------------------------------------------------------3.9. Sa se scrie un program in LTP care sa afiseze pe ecran constant
e si variabile de toate tipurile standard invatate in lucrare, ale caror valori
sunt stabilite prin operatii de atribuire.
4. Continutul referatului

1. Scopul lucrarii de laborator


2. Prezentarea succinta a tematicii lucrarii de laborator
3. Rezolvarea problemelor propuse.

S-ar putea să vă placă și