Documente Academic
Documente Profesional
Documente Cultură
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
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
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;
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
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
................................................................................
.............
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}
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.
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.
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
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