Sunteți pe pagina 1din 8

Lucrarea 6 Utilizarea şi programarea calculatoarelor I

Lucrarea 6

TIPURI DE DATE ÎN LIMBAJUL TURBO PASCAL

6.1 Scopul lucrării

Prezentarea principalelor tipuri de date utilizate în limbajul Turbo Pascal.

6.2. Consideraţii teoretice

6.2.1 Noţiuni generale, clasificări

Prin tip de date se înţelege modul în care informaţia este reprezentată în memoria
calculatorului. Tipul datei oferă două informaţii esenţiale:
- mulţimea de definiţie a valorilor unei variabile de tipul respectiv;
- mulţimea operaţiilor asociate tipului respectiv, acceptate de limbajul de programare;
Folosirea unor operaţii care nu sunt specifice cu tipul de operanzi, generează o eroare semnalizată la
compilarea programului.
În funcţie de modul de definire, tipurile de date pot fi:
- standard, ele fiind predefinite în cadrul limbajului Pascal şi având prioritatea ca ele sunt
larg folosite în aplicaţii;
- declarate, deci definite explicit de programator în conformitate cu necesităţile sale în cazul
în care tipurile standard nu satisfac dorinţele programatorului.
Pascalul standard în general şi deci Turbo Pascal în particular, este un limbaj bazat pe o
verificare strictă a tipului, în care orice variabilă trebuie asociată explicit, printr-o declaraţie, unui
anumit tip de date. Această caracteristică conferă o bună protecţie contra erorilor cauzate de o
folosire inadecvată a variabilelor, prin sesizarea nepotrivirilor încă în faza de compilare (acest tip de
erori ar fi deosebit de dificil de depanat în faza de rularea programului), dar ea determină o mare
rigiditate în programare. Pentru a relaxa acesta constrângere, Turbo Pascalul permite - spre
deosebire de Pascalul standard - o operaţie de modificare a tipului (typecast) pentru variabilele
dinamice definite prin intermediul pointerilor. Desigur această facilitate creşte probabilitatea de
eroare, lăsând exclusiv în responsabilitatea programatorului ca operaţia de schimbarea a tipului să
fie corect realizată, fără posibilitatea de verificare în faza de compilare a eventualelor greşeli.

După natura tipurilor de date, putem enumera:

* Tipul simplu (simple) care cuprinde

* Tipul ordinal (ordinal) - cuprinde mulţimi finite de valori de tip simplu. Mulţimile acestor
valori sunt ordonate, prin urmare fiecare element are o poziţie în mulţime la care ne putem
referi.
Tipul ordinal cuprinde 7 tipuri predefinite:
* Tipul întreg (integer)
* Tipul întreg scurt (shortint)
* Tipul întreg lung (longint)
* Tipul octet (byte)
* Tipul cuvânt (word)
* Tipul logic (boolean)
* Tipul caracter (char)

1
Lucrarea 6 Utilizarea şi programarea calculatoarelor I

* tipul enumerat (enumerated) defineşte mulţimi ordonate de valori


descrise prin enumerare (lista de identificatori ce se referă la aceste
valori).
* tipul submulţime (subrange) este un domeniu de valori al unui tip
ordinal numit tip gazdă
* tipul referinţă ordinală (ordinal identifier)

* Tipurile reale - constituie o clasă separată în care nu se poate pune în evidenţă o poziţie a
unui element în mulţime, nici succesorul sau predecesorul unui element. Este format dintr-o
submulţime a numerelor reale precizată de cea mai mică şi cea mai mare valoare
reprezentată în notaţie în virgulă mobilă.
Tipul ordinal cuprinde:
* Tipul real (real)
* Tipul simpla precizie (single)
* Tipul dublă precizie (double)
* Tipul precizie extinsă (extended)
* Tipul precizie specială (comp)

* Tipul şir de caractere (string) sau pe scurt tipul şir este format dintr-o secvenţă de caractere de
lungime variabilă (maxim 255)

* Tipul reper (pointer) - folosit în memorarea dinamică a datelor.

* Tipul structurat (structured) cuprinde mai multe componente (valori), el caracterizându-se prin
metoda sa de structurare şi prin tipul componentelor sale. Dacă o componentă a tipului structurat
este şi ea de tip structurat, atunci tipul structurat care se obţine în final are mai multe nivele de
structurare. În acest fel este posibilă definirea unor tipuri de date cu organizare foarte complexă.

* Tipul tablou (array) are un număr fixat de componente de un anumit tip - tipul
componentei. Numărul de componente este dat de indexul tabloului care şi el este de un
anumit tip numit tipul indexului.

* Tipul mulţime (set) este un domeniu de valori a unui tip ordinal particular - referit ca tip
de bază al mulţimii.

* Tipul înregistrare este format dintr-un anumit număr de component numite câmpuri
(field); fiecare câmp are propriul tip, care poate diferi de la câmp la câmp.

* Tipul obiect este compus din două tipuri de componente:


- câmpuri care sunt similare câmpurilor unei înregistrări;
- metode care definesc acţiuni ale obiectului descrise prin funcţii sau proceduri.

* Tipul fişier (file) constă dintr-o secvenţa liniară de componente de un anumit tip, a căror
număr nu este declarat explicit. Desigur tipul componentei poate fi de orice tip, cu excepţia
tipului fişier.

La declararea unui tip anumit de date întotdeauna trebuie precizate implicit sau explicit următoarele
informaţii:
- numele tipului
- domeniul de valori
- felul în care noul tip este compus din combinarea tipurilor standard.

2
Lucrarea 6 Utilizarea şi programarea calculatoarelor I

Declararea tipului se face într-o secţiune de program care începe cu cuvântul cheie TYPE.
Sintaxa unei declaraţii este următoarea:

<nume_tip> = <relaţie de definiţie a tipului>, unde <relaţie de definiţie a tipului>


corespunde tipului de data definit aşa cum se va prezenta mai jos.

6.2.2 Detalii referitoare la tipurile de date descrise anterior

A. Tipul logic (tip ordinal)

În Turbo Pascal sunt definite trei tipuri logice:


- Boolean - reprezentate în memorie pe un octet
- WordBool - reprezentate în memorie pe doi octeţi
- LongBool - reprezentate în memorie pe patru octeţi

Valorile tipului logic sunt desemnate de constante predefinite TRUE (adevărat), reprezentată
în memorie prin 1 şi FALSE (fals), reprezentată în memorie prin 0. Operaţiile ce se pot face cu
valorile tipului logic sunt : and,or, xor, not.

B. Tipul caracter

Tipul caracter "char" se reprezintă pe un octet iar valorile sale sunt cele 256 de caractere
ASCII. Aceste valori se pot scrie în diferite moduri:
- caracter imprimabil cuprins intre apostrofe. Ex ; 'a'
- un număr de la 0 la 255 (scris in zecimal sau hexazecimal) precedat de caracterul #.
Ex: #21
- un caracter precedat de ^ pentru a exprima caractere de control de la 0 la 31. Ex: ^A
Funcţiile predefinite Ord şi Chr permit realizarea corespondenţei biunivoce între setul de
caractere ASCII extins cu numele ordinale ale caracterelor setului. Ord(c) - returnează rangul
caracterului c în mulţimea setului de caractere. Chr(i) - returnează valoarea caracterului de rangul i.
Asupra valorilor de tip char sunt permise operaţii relaţionale: <, <=, =, >=, > şi <>.

C. Tipul întreg

Există cinci tipuri de întregi:

Tip Domeniul de valori Octeţi

integer -32768...32767 2
word 0...65535 2
shortint -128...127 1
byte 0...255 1
longint -2147483648...21474836647 4

Asupra valorilor tipului întreg se pot face următoarele operaţii: adunare (+), scădere (-),
împărţire întreaga (div), restul împărţirii întregi (mod), împărţire reală (/), şi aritmetic (and), sau
aritmetic (or), sau exclusive aritmetic (xor), deplasare la stânga (shl), deplasare la dreapta (shr),
negaţie aritmetică (not), şi operaţii relaţionale: <=, <, =, >=, >, <>.

3
Lucrarea 6 Utilizarea şi programarea calculatoarelor I

D. Tipuri reale - nu sunt de tip ordinal !

Există cinci tipuri reale:

Tip Domeniul de valori Octeți Cifre semnificative

real 2.9E-39 .. 1.7E38 6 1-12


single 1.4E-45 .. 3.4E38 4 8-8
double 5.0E-324 .. 1.7E308 8 15-16
extended 3.3E-4932 .. 1.1E4932 10 19-20
comp -2E63 + 1 .. 2E63 -1 8 19-20

La primele patru tipuri, intervalul numerelor negative e simetric cu cele prezentate. Ultimele
patru tipuri pot fi utilizate doar când calculatorul e prevăzut cu coprocesor numeric. Operaţiile ce se
pot face cu valori reale sunt: adunare, scădere, înmulţire, împărţire, operaţii relaţionale (al căror
rezultat e de tip logic True sau False).

E. Tipul enumerare

Defineşte o mulţime de valori. Primul identificator reprezintă cea mai mică valoare , cu
numărul de ordine zero. Identificatorii apar în ordinea crescătoare a valorii lor. Tipul enumerare
poate fi definit în secţiunea type astfel:

type nume_tip = (identif1, ...identifn);

Operaţiile ce se pot efectua cu valorile unui tip enumerare sunt: atribuirea, determinarea
numărului de ordine (Ord), determinarea succesorului (Succ), determinarea predecesorului (Pred),
comparaţia (<, <=, = , >=, >, <>).

F. Tipul interval

Fiind dat un tip ordinal, din acest tip se poate genera un nou tip, numit tip interval. Definiţia
unui interval indică valoarea constantă cea mai mică şi cea mai mare din interval.
Sintaxa unui tip interval este :

type nume_tip = valoare_minimă .. valoare_maximă;

G. Tipul mulţime (set)

Se defineşte în raport cu un tip de bază care trebuie să fie un tip ordinal. Valorile posibile ale
tipului set sunt formate din mulţimea submulţimilor tipului de baza. Sintaxa unui tip mulţime:

Type nume_tip = set of tip_de_bază

unde : tip_de_bază este tip ordinal (char, interval, enumerare, logic) Operaţiile care se pot efectua
cu valorile tip mulţime sunt: reuniune, diferenţa, intersecţie, operaţii relaţionale.

H. Tipul şir de caractere

În Turbo Pascal sunt definite două categorii de şiruri de caractere:


* clasice - max 255 caractere

4
Lucrarea 6 Utilizarea şi programarea calculatoarelor I

* cu terminaţie nulă - maxim 65535 caractere


Valoarea unei variabile şir de caractere e formată dintr-o succesiune de caractere. Tipul şir
de caractere "clasic" se specifică prin construcţia: string[lungime] sau numai prin cuvântul cheie
string. Când nu se specifică atributul de lungime înseamnă ca şirul are lungimea maximă implicit
egală cu 255. O astfel de variabilă poate fi folosită fie în totalitatea ei, când referirea se face numai
prin numele variabilei, fie numai prin referirea unui caracter din şir când trebuie specificată între
paranteze pătrate poziţia caracterului în şir. Asupra şirurilor de caractere se pot efectua operaţii de:
concatenare şi comparare. Şirurile de caractere cu terminaţie nulă permit folosirea şirurilor de
lungime mai mare de 255 iar sfârşitul şirului e semnalat cu caracterul #0. Şirurile de caractere cu
terminaţie nulă sunt izomorfe cu tabelele de caractere care au declaraţia de tip:

array[0..n] of char;

unde n e numărul de caractere din şir.

I. Tipul tablou

Este un tip compus dintr-un număr fixat de componente, fiecare componentă având acelaşi
tip. La definirea acestui tip trebuie precizat atât tipul componentelor cât şi tipul indicilor. Tipul
tablou se specifică printr-o construcţie de forma:

type nume_tip = array[T1] of T2;

unde : T1 - tipul indicelui (trebuie să fie ordinal)


T2 - tipul componentelor

Dacă tipul de bază al unui tablou este tipul tablou, se obţine structura de tablou
multidimensional. De exemplu: array[T1] of array[T2] of T3 este un tablou bidimensional.

J. Tipul articol

Este un tip compus format dintr-un număr de componente numite câmpuri care spre
deosebire de tablouri pot fi de tipuri diferite. Fiecare câmp are un nume. Numărul componentelor
poate fi fix (structura cu articole fixe) sau variabil (structura cu variante).

K. Tipul reper (pointer)

Reper = variabila de tip special în care se depune adresa zonei de memorie alocată unei
variabile dinamice. Definirea unui tip reper se poate face astfel:

type tip_reper = ^tip_variabilă_dinamică;

L. Tipul pointer - e un reper care nu are tip de bază. O variabilă de acest tip poate să
repereze o variabilă de tip arbitrar. Declararea unei astfel de variabile se face de exemplu:

var replib : pointer;

5
Lucrarea 6 Utilizarea şi programarea calculatoarelor I

M. Tipul fişier - în accepţiunea limbajului Turbo Pascal se pot defini trei structuri de tip
fişier:
* fişier cu tip - e o secvenţă de componente, fiecare componentă având acelaşi tip numit
tipul de bază al fişierului. O variabilă de acest fel poate fi declarată astfel:
var nume_fişier:file of tip_de_bază;

* fişier text - conţine caractere structurate pe linii de lungime variabilă, fiecare linie fiind
terminată cu o informaţie de sfârşit de linie. O variabilă de acest tip se declară astfel:

var nume_fiş:text;

* fişier fără tip - sunt canale de intrare/ieşire de nivel inferior, utilizate în primul rând pentru
accesul direct la orice fişier disc, indiferent de tipul şi structura fişierului. Un astfel de fişier e
compatibil cu orice fişier (cu tip sau text). O variabilă de acest tip se declară astfel:

var nume-fişier : file;

Pentru ca o variabilă de tip fişier să fie utilizată ea trebuie mai întâi asociată unui fişier
extern. Această asociere se face prin intermediul procedurii Assign. Deschiderea unui fişier existent
se face cu ajutorul procedurii Reset. Dacă se doreşte deschiderea unui fişier nou, se utilizează
procedura Rewrite. Fişierele deschise cu procedura Reset permit doar operaţii de citire iar cele
deschise cu procedura rewrite sau Append permit numai operaţii de scriere. Fişierele cu tip şi fără
tip permit atât citiri cât şi scrieri indiferent de procedura utilizată pentru deschidere.
Pentru citirea/scrierea unei componente dintr-un fişier se folosesc procedurile standard
Read/Write. În cazul fişierelor fără tip, procedurile folosite în scop de citire/scriere poartă numele
BlockRead, BlockWrite. Fişierele cu tip şi fără tip permit accesul aleator la componentele lor.
Acesta se realizează cu procedura Seek. Închiderea fişierului se face cu procedura Close.
Ştergerea fişierului etern asociat unui fişier închis se face cu procedura Erase.

N. Tipul procedură ţi tipul funcţie

O definiţie de tip procedură sau funcţie permite manipularea dinamică a subprogramelor.


Astfel, un nume de subprogram poate fi atribuit la o variabilă de tip procedură sau funcţie. La
definiţia tipului nu apare nici un fel de nume de procedură sau de funcţie. O declaraţie de
procedură/funcţie generează implicit o variabilă de tip procedură/funcţie al cărei nume e chiar
numele folosit în declaraţie. Variabila astfel generată conţine adresa codului obiect generat de
declaraţia de procedură/funcţie

Exemplu de definiţie:

type
tipf = function(x,y:integer) : integer;
tipp = procedure (var n:real; v:integer);
var
f1, f2:tipf; {variabile de tip funcţie}
p:tipp; {variabilă de tip procedură}

6
Lucrarea 6 Utilizarea şi programarea calculatoarelor I

O. Tipul obiect
Este un tip structurat în multe privinţe asemănător tipului articol. Numele acestui tip e
definit de cuvântul cheie object. Prin tipul obiect se înţelege o structură de date care conţine un
număr fix de componente. Aceste componente pot fi de doua categorii:
- câmpuri, formate din nume de câmpuri urmate de caracterul ":"şi de tipul lor,
- metode, sunt antete de proceduri şi funcţii.
Aceste componente sunt încadrate de cuvintele object şi end. La definiţia tipului obiect prima dată
se vor înşira câmpurile iar apoi metodele. Un tip obiect poate să moştenească componente dintr-un
alt tip obiect. Numele tipului obiect de la care se moşteneşte (numele tipului definitor) trebuie plasat
imediat după cuvântul cheie object. Spre deosebire de celelalte tipuri, tipul obiect poate fi declarat
numai în partea de declaraţie de tip în domeniul cel mai exterior al unui program sau unit.

6.2.3 Compatibilitatea tipurilor

În anumite construcţii ale limbajului Turbo Pascal, două tipuri trebuie să fie identice,
compatibile sau compatibile doar din punct de vedere al atribuirii.

* Tipuri identice - au acelaşi nume de tip

* Tipuri compatibile - tipurile sunt identice sau


- tipurile sunt reale
- tipurile sunt întregi
- un tip este un interval al celuilalt tip
- ambele tipuri sunt în intervalele aceluiaşi tip de baza
- ambele tipuri sunt tipuri mulţime, cu tipurile de bază compatibile
- un tip e string iar celălalt string sau char
- un tip e pointer iar celălalt reper
- unul din tipuri e PChar iar celălalt un tip tablou de bază zero
- ambele sunt de tip procedură, unde numărul şi tipul parametrilor sunt
identice
- ambele sunt de tip funcţie, unde (în afară de cele precizate la tip
procedura) şi tipul valorilor returnate sunt identice.

* Tipuri compatibile din punct de vedere al atribuirii

6.2.4 Conversii de tipuri

Tipul unei expresii poate fi schimbat într-un alt tip prin operaţia de conversie de tip. Sintaxa
acestei conversii este:

nume_tip(expresie)

unde: - nume_tip e de tip ordinal (standard sau utilizator) sau tip reper
- expresie poate fi de orice tip, valoarea ei fiind convertită în tipul desemnat de nume_tip.

6.3. Mersul lucrării

1. Se va copiază directorul aferent acestei lucrări (L6) din folderul Z:\UPC\SEM-1\ în folderul
C:\Home.

2. Se vizualizează şi se studiază conţinutul lucrării de laborator din fişierul: Lucrare Nr. 6.pdf

7
Lucrarea 6 Utilizarea şi programarea calculatoarelor I

3. Se încarcă programul LUC6.pas şi se urmăreşte modul de declarare al tipurilor de date acceptate


de Turbo Pascal.

4. Acest program este compilat şi rulat.

5. Fiecare student va realiza câte un program simplu din lista de aplicaţii (teme6.pdf) intitulat
Tema6.pas asemănător cu cel prezentat. Se compilează şi rulează acest program corectându-se
eventualele erori.

6. Tema realizată se va trimite prin mail cadrului didactic cu denumirea tema6_numestudent.pas

7. Se efectuează testul corespunzător lucrării.

8. Se şterge folderul L6 din C:\Home.

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