+ All Categories
Home > Documents > Tipuri de date(ref)

Tipuri de date(ref)

Date post: 09-Apr-2018
Category:
Upload: nicug
View: 237 times
Download: 0 times
Share this document with a friend

of 24

Transcript
  • 8/7/2019 Tipuri de date(ref)

    1/24

    Ministerul Educaiei al Republicii Moldovacoala medie de cultur general Pohrebeni

    Disciplina: Informatica

    ReferatTema: Tipuri de date ale limbajului PASCAL.

    Profesor: Clapaniuc Silvia

    A elaborat eleva clasei a IX-a A: Codrean Alina

  • 8/7/2019 Tipuri de date(ref)

    2/24

    Pohrebeni 2011.

    Introducere

    Avantajele folosirii unui limbajputernic tipizatsunt apreciate de orice programator

    experimentat. Printre ele sunt: uureaz nelegerea programului de ctre om; ncurajeaz o gndire i formulare disciplinat a problemei; uureaz munca de optimizare a compilatorului; permit depistarea erorilor ntr-o faz timpurie.

    Un limbaj se numete ``puternic tipizat'' dac n faza de execuie a unui program nu potaprea erori cauzate de tipuri incorecte ale expresiilor. Acest articol i propune s explice

    ntr-un cadru ct se poate de riguros o colecie foarte simpl de fapte care descriesemnificaia noiunii de ``tip de date''.

    Ce este un tip de date

    Exist mai multe definiii posibile pentru tipurile de date, din mai multe perspective.O privire global definete simultan att tipurile de date ct i operaiile care se pot face cuele, pentru c acestea sunt de fapt cele dou faete ale unei aceleiai monezi: nu pot existauna fr cealalt. Noi vom trata cele dou subiecte pe rnd i n mod inegal, acordnd ooarecare prioritate tipurilor de date.

    Astfel, n cea mai simpl accepiune posibil, un tip de date nu este altceva dect o mulimede valori.

    Ce este o valoare? Nu are nici o importan! Este un nume special dat elementelor careaparin unui tip. Termenul ``aparin'' este justificat, pentru c, reinei, tipul este o mulime,

    n cel mai precis sens matematic.

    Exemple n Pascal tipul boolean este o mulime cu dou elemente. Aceste dou elementese noteaz n Pascal cu false i true. False i true se numesc de aceea valori booleene.Tipul integer este tot o mulime care include, printre altele, nite elemente (valori) care nPascal se noteaz cu -2, -1, 0, 1, 2, 3 etc. Tipul integer este un tip interesant, pentru c ipropune s mimeze mulimea matematica Z a numerelor ntregi, dar nu reuete prea bine,pentru c mulimea integer este finit, iarZ nu! Care sunt limitele mulimii integer nu se

    specific. n dialectul Turbo Pascal (cel mai rspndit pe PC-uri) integer are 65536 deelemente, de la cel notat -32768 la cel notat 32767. Elementele tipului integer sunt numitevalori ntregi (sau mai precis integer values).

    Dac ai citit textul de mai sus cu atenie ai observat c ne-am ferit s spunemca false este un element (valoare) boolean. Am spus false este o notaie (o reprezentare) aunui element boolean! De aici ncolo nu vom mai fi att de scrupuloi; dealtfel cele dounoiuni (element i reprezentare) se pot adesea interschimba fr ambiguitate.

    2

  • 8/7/2019 Tipuri de date(ref)

    3/24

    Vom zice de aceea:boolean = { false, true }

    unde acoladele sunt notaia uzual pentru mulime.

    Tipuri de date

    n Turbo Pascal exist urmtoarele clase de tipuri de date: Ordinal Real Mulime Fiier Reper ir de caractere Tablou Articol Procedur / funcie Obiect

    Tipurile ordinale reprezint mulimi finite i ordonate de valori. Se poate face referire lanumrul de ordine al unei valori cu funcia Ord, se poate specifica elementul succesor cufuncia Succ, respectiv elementul predecesor cu funcia Pred al unui element dat.

    Tipurile ordinale snt: Tipuri logice (boolean) Caracter De enumerare Tipuri ntregi Tipuri interval

    Prin tip simplu se nelege fie un tip ordinal, fie un tip real.

    Prin tip compus se nelege tipul ir de caractere, tablou, articol sau obiect.

    Tipuri logice

    n Turbo Pascal snt definite trei tipuri logice : Boolean, WordBool i LongBoolValorile de tip Boolean snt reprezentate n memorie pe un octet, cele de tip WordBool pedoi octei (cuvnt), iar cele de tip LongBool pe patru octei (cuvnt dublu). Ultimele doutipuri au fost introduse n vederea asigurrii compatibilitii programelor Pascal cuprogramele destinate aplicaiilor care se execut sub Windows.

    Valorile tipului logic snt desemnate de constantele predefinite False (Fals) i True(Adevrat). n memorie constanta False se reprezint cu 0 (zero), iar constanta True prin 1(unu). Tipul logic este ordinal. Ordinul lui False este 0, iar ordinul lui True este 1.Succesorul lui False este True, predecesorul lui True este False i are loc relaia:

    ord(False)

  • 8/7/2019 Tipuri de date(ref)

    4/24

    operator binar;x and y, este True dac i numai dac att x ct i y au valoarea True.

    Ordisjuncie logic (sau logic);operator binar;x or y este False dac i numai dac att x ct i y au valoarea False.

    Xorsau exclusiv;operator binar;x xor y este True dac i numai dac unul din operanzi este True i cellalt este False.

    Notnegaie logic;operator unar;not x este True dac i numai dac x este False.

    Exemplu:

    Program logica;var x,y,u,v:boolean;Begin{}x:=true;y:=false;u:=(not x) and y;v:=x or y;

    {}u:= 2=1 {Valoarea lui u este False}v:= 2>1 {Valoarea lui v este True}{}end.

    Tipul caracter

    Valorile tipului Char (caracter) snt cele 256 de caractere ASCII set extins,numerotate de la 0 la 255. Tipul Char este ordinal. n memorie se reprezint pe un octet.Valoarea acestui tip se poate scrie n diferite moduri :Caracter imprimabil cuprins ntre apostroafe, de exemplu a.Un numr de la 0 la 255, precedat de caracterul # (simbol numeric). Numrul poate fi scris

    n zecimal (#65 este codul caracterului A) sau n hexazecimal (#$30 este codul cifrei zero).Un caracter precedat de caracterul ^, pentru exprimarea caracterelor de control de la 0 la31, de exemplu ^A (valoarea ASCII 01).

    4

  • 8/7/2019 Tipuri de date(ref)

    5/24

    Funciile predefinite Ord i Chr permit realizarea corespondenei ntre setul decaractere ASCII extins i numerele ordinale ale caracterelor setului.Astfel funcia Ord(c) returneaz rangul caracterului c n mulimea ordonat a setului decaractere iar funcia Chr(i) returneaz valoarea caracterului de rangul i. Funciile Ord i Chrsnt inverse i snt adevrate urmtoarele relaii : Chr(Ord(c))=c i Ord(Chr(i))=i.

    Asupra valorilor de tip Char snt permise operaiile relaionale. Fie v1 i v2 douvalori de tip Char, iar r una din relaiile , . Rezultatul operaiei : v1 r v2 estede tip logic. Acest rezultat este True, dac i numai dac operaia relaional :Ord(v1) r Ord(v2) furnizeaz rezultatul True.

    Program Functiile_Chr_si_Ord;Uses Crt;Const A=65;B=66; {Constantele A i B}BeginClrScr; {Func ie ncorporat care terge ecranul}WriteLn('Functia Chr:');WriteLn; {Afieaz textul dintre apostroafe}

    WriteLn('65 = ',Chr(65)); {Afiseaza '65 = ' i caracterul echivalent}WriteLn('66 = ',Chr(66)); {Afieaz '66 = ' i caracterul echivalent}WriteLn('67 = ',Chr(67)); {Afieaz '67 = ' i caracterul echivalent}WriteLn;WriteLn('Functia Ord:'); {Afieaz textul dintre apostroafe}WriteLn(Ord(Chr(65))Ord(B)); {Evalueaz mrimea constantelor -False}WriteLn(Ord(Chr(A))

  • 8/7/2019 Tipuri de date(ref)

    6/24

    n acest program s-a folosit afiarea prin coduri de control, folosind funcia Chr careafieaz caracterul al crui cod se afl ntre paranteze.

    Tipuri ntregi

    Mulimea valorilor tipurilor ntregi este o submulime a numerelor ntregi. Exist cinc

    tipuri de ntregi : integer, word, shortint, byte i longint. Domeniul de valori i numrul deoctei necesari pentru reprezentare depind de tipul utilizat.

    Tip Domeniu de valori OcteiInteger - 215 215 - 32768 32767 2Word 0 216 - 1 0 65535 2Shortint - 27 27 - 1 - 128 127 1Byte 0 28 - 1 0 255 1Longint - 231 231 - 1 -2.147.483.648 2.147.483.647 4

    Prin constanta predefinit MaxInt se nelege valoarea ntreag 32767, adic valoarea

    maxim reprezentat pe 16 bii, cu semn. Tipul ntreg este ordinal. Succesorul lui x estex+1. Predecesorul lui x este x-1. Ordinul ntregului x este egal cu x. Operaiile care se potface cu valorile tipului ntreg, snt urmtoarele :+ adunare;- scdere sau schimbare de semn;Div mprire ntreag.

    A Div B returneaz ctul mpririi ntregi ntre A i B. Rezultatul este de tip ntreg.

    Mod restul mpririi ntregi;A Mod B returneaz restul mpririi ntregi a lui A cu B. Rezultatul este de tip ntreg.

    / mprire real;A / B returneaz ctul mpririi lui A la B. Rezultatul este de tip real.

    And ir aritmetic;A And B returneaz o valoare ntreag.Rezultatul se obine prin efectuarea conjunciei ntre biii corespunztori ai lui A cu B.

    Or sau aritmeticA or B returneaz o valoare ntreag.Rezultatul se obine prin efectuarea disjunciei ntre biii corespunztori ai lui A i B.

    Xor Sau exclusiv aritmetic;A Xor B returneaz o valoare ntreag.Rezultatul se obine prin efectuarea operaiei sau exclusiv ntre biii corespunztoriai lui A i B.

    Shl deplasare la stngaA Shl B returneaz o valoare ntreag care se obine prin deplasarea la stnga,a lui A de B ori.

    6

  • 8/7/2019 Tipuri de date(ref)

    7/24

    Shr deplasare la dreapta;A Shr B returneaz o valoare ntreag care se obine prin deplasarea la dreapta,a lui A de B ori.

    Not negaie aritmeticOperator unar cu rezultat ntreg.Not A se obine prin efectuarea operaiei de negare asupra fiecrui bit al lui A.

    Asupra valorilor de tip ntreg snt permise urmtoarele operaii relaionale : mai mare;>= mai mare sau egal cu; diferit.

    Rezultatul operaiei v1 r v2 este de tip logic, unde r este o operaie relaional, iar v1i v2 snt dou valori ntregi. Acest rezultat este adevrat, dac i numai dac Ord(v1) rOrd(v2) este True.Regulile referitoare la operaiile aritmetice care utilizeaz operatori ntregi snt urmtoarele Tipul unei constante ntregi se deduce din valoarea ei. Se alege acel tip predefinit, care aredomeniul cel mai restrns, dar care include valoarea respectiv.

    La un operator binar, adic un operator care are doi operanzi, mai nti operatorii sntconvertii n tipul lor comun i apoi se efectueaz operaia. Prin tipul comun se nelege acetip predefinit, care are domeniul cel mai restrns dar care include toate valorile posibile alecelor dou tipuri. De exemplu, tipul comun al unui integer i al unui byte este integer, tipucomun al unui integer i al unui word este longint. Operaia se efectueaz cu precizia tipulucomun, iar rezultatul este de tip comun.

    Expresia din membrul drept al unei instruciuni de atribuire este evaluatindependent de dimensiunea sau tipul variabilei din membrul stng.Un operand de tip ShortInt este convertit ntr-un tip string intermediar naintea efecturiioricrei operaii aritmetice.O valoare de tip ntreg poate fi convertit explicit ntr-un alt ntreg, folosind conversia de tip.

    Exemple:

    Program Operaii_aritmetice;

    Uses Crt;VarA,B:LongInt;C,D:Real;BeginTextBackGround(1);TextColor(14);ClrScr;{Fond albastru,scris galben,terg ecran}GoToXY(30,2);Write('Operaii aritmetice');

    7

  • 8/7/2019 Tipuri de date(ref)

    8/24

    GoToXY(1,23);Write(' Introducei A > B');GoToXY(1,24);Write(' Introducei valoarea lui A ');ReadLn(A); {Se citete valoarea lui A}GoToXY(1,5);Write(' Valoarea lui A este ');

    GoToXY(25,5);Write(A:5); {Se afieaz valoarea lui A}GoToXY(1,24);ClrEol; {Se terg caracterele pn la sfritul liniei}Write(' Introducei valoarea lui B ');ReadLn(B); {Se citete valoarea lui B}GoToXY(1,23);ClrEol; {Se terg caracterele pn la sfritul liniei}GoToXY(1,24);ClrEol; {Se terg caracterele pn la sfritul liniei}GoToXY(1,6);Write(' Valoarea lui B este ');GoToXY(25,6);Write(B:5); {Se afieaz valoarea lui B}

    GoToXY(1,9);Write(' Adunarea (A + B)');GoToXY(1,10);Write(' A + B = ',A,' + ',B,' = ',A+B);

    GoToXY(1,12);Write(' Scderea (A - B)');GoToXY(1,13);Write(' A - B = ',A,' - ',B,' = ',A-B);

    GoToXY(1,15);Write(' nmulirea (A * B)');GoToXY(1,16);Write(' A * B = ',A,' * ',B,' = ',A*B);

    GoToXY(1,18);Write(' mprirea ntreag cu rest (A Div B i A Mod B)');GoToXY(1,19);Write(' A Div B = ',A,' Div ',B,' = ',A Div B,' Rest ',A Mod B);

    GoToXY(1,21);Write(' mprirea real cu zecimale (A / B)');C:=A;D:=B;GoToXY(1,22);Write(' A / B = ',A,' / ',B,' = ',C/D:5:3);ReadKey;End.

    Program Operaii_logice_pentru_numere_ntregi;Uses Crt;Vari,j,k,l,m,n,o,sl,sr:integer;Begin

    8

  • 8/7/2019 Tipuri de date(ref)

    9/24

    ClrScr;WriteLn(' Operaii logice pentru numere ntregi');I:=291;

    j:=255;WriteLn(' i = ',i,' j = ',j);

    k:=i And j;WriteLn(' And = ',k);l:=i Or j;WriteLn(' Or = ',l);m:=i Xor j;WriteLn(' Xor = ',m);n:=52;o:=Not n;WriteLn(' Not = ',o);

    sr:=3 shr 4;WriteLn(' Shr = ',sr);sl:=3 shl 4;WriteLn(' Shl = ',sl);ReadKey;End.

    Tipuri reale

    Mulimea valorilor tipului real este o submulime a numerelor reale. n timp cerezultatele operaiilor asupra unor valori ntregi reproduc exact rezultatele, operaiile asupravalorilor reale snt n general aproximative datorit erorilor de rotunjire. Se folosete unnumr finit de cifre pentru reprezentarea unui numr real.

    Exist cinci tipuri reale : real, single, double, extended i comp. Ultimele patru tipurpot fi utilizate doar atunci cnd calculatorul este prevzut cu coprocesorul matematic 80x87Domeniul de valori, numrul de octei necesari pentru reprezentare i numrul de cifresemnificative depind de tipul real utilizat, conform tabelului de mai jos.

    Tip Domeniul de valori Octei Cifre

    semnificativeReal 2.9E-39 1.7E38 6 1 12Single 1.4E-45 3.4E38 4 8 8Double 5.0E-324 1.7E308 8 15 16Extended 3.3E-4932 1.1E4932 10 19 20Comp -2E63 + 1 2E63 1 8 19 20

    La primele patru tipuri au fost specificate doar intervalele numerelor pozitive din domeniude valori. Intervalele numerelor negative snt simetricele acestora. Dei tipul Comp are

    9

  • 8/7/2019 Tipuri de date(ref)

    10/24

    numai valorintregi n intervalul [263 + 1,263 1], aproximativ [9.2E18 9.2E18], ncalcule aceti ntregi vor fi considerai ca i cum ar fi numere reale fr zecimale.

    Tipul real este singurul tip simplu care nu este de tip ordinal. Astfel, valorile reale nuau numere ordinale, deci o valoare real nu are nici succesor, nici predecesor.Pentru generarea operaiilor de tip real, compilatorul folosete dou modele, care pot fselectate din meniul de opiuni, comanda opiunii de compilare, grupa prelucrare numeric.Cu comutatorul 8087 / 80287 nepoziionat (sau cu directiva {$N}, valoare implicit), toateoperaiile cu numere reale snt efectuate prin apelarea unor subprograme de bibliotec.Datorit vitezei i lungimii codului, n acest model este admis numai tipul real, astfefolosirea tipurilor single, double, extended, comp va genera o eroare.

    Cu comutatorul 8087 / 80287 poziionat (sau cu directiva {$N+}), codul generat vaconine toate instruciunile coprocesorului numeric 80x87. n acest caz snt permise toatecele cinci tipuri reale, dar prezena coprocesorului 80x87 este obligatorie att la compilarect i la execuie.Cu comutatorul Emulation poziionat (sau cu directiva {$E+}), este posibil emularea unucoprocesor numeric 80x87 inexistent. Astfel, dac snt folosite simultan directivele {$N+} {$E+}, fiierul .EXE creat poate fi rulat pe orice calculator, indiferent de faptul dac existsau nu un coprocesor numeric 80x87. Dac coprocesorul este prezent, atunci programul lva utiliza efectiv, n caz contrar acest coprocesor va fi emulat, adic simulat pe cale soft.Datorit faptului c tipul real nu este ordinal, variabilele reale nu pot fi folosite pentru adesemna :Un indice de tablouUn contor de ciclu pentru instruciunea ForUn tip de baz pentru tipul Set (mulime)O limit pentru tipul intervalUn selector ntr-o instruciune Case.Operaiile care se pot face cu valorile reale snt : + (adunare), (scdere), * (nmulire), /(mprire). Rezultatul unei astfel de operaii este de tip real, chiar dac una din valori estede tip ntreg.Pentru valorile reale snt permise operaiile relaionale = i . Rezultatul uneastfel de operaii este de tip logic, cu valorile True sau False.

    Tipul enumerare

    Tipul enumerare definete o mulime ordonat de valori : se enumer un ir deidentificatori care desemneaz valorile posibile. Primul identificator desemneaz cea mamic valoare, cu numrul de ordine zero. Ceilali identificatori desemneaz succesoruvalorii specificate de ctre identificatorul precedent. Identificatorii apar n ordinea

    cresctoare a valorii lor.Tipul enumerare se definete n seciunea Type astfel :Type nume_tip = (identif,identif, , identif);

    Exemplu:

    Type gen=(brbat, femeie);Studii=(elementare, medii, superioare);

    10

  • 8/7/2019 Tipuri de date(ref)

    11/24

    Variabilele de tip enumerare snt declarate n seciunea var. Ele pot lua una din valorilenirate n lista de enumerare.

    Var s:gen;Pregtire:studii;Limba:(engleza,franceza);

    Aici variabila s poate s ia una din valorile brbat sau femeie, variabila pregtire poate saia una din valorile superioare, medii sau elementare.Tipul lgic este de fapt un tip de enumerare :Type boolean=(False,True);

    Operaiile care se pot face cu valorile unui tip de enumerare snt urmtoarele :AtribuireaS:=brbat; studii:=superioare;Limba:=germana;

    Determinarea numrului de ordineSe face cu funcia Ord. De exemplu Ord(brbat) returneaz valoarea 0, Ord(mediireturneaz valoarea 1.

    Determinarea succesorului se face cu funcia Succ sau a predecesorului se face cu funciaPred. De exemplu, prin instruciunea de atribuire :Limba:=Succ(engleza);Variabila limba va avea valoarea franceza, iar prin instruciunea :Pregtire:=Pred(medii);Variabila pregtire va avea valoarea elemetare.

    ncercarea determinrii succesorului ultimului element din list sau a predecesoruluprimului element din list, constituie o eroare.

    Comparaia (, ). Dou valori v1 i v2 snt ntr-una din relaiileanterioare dac Ord(v1) i Ord(v2) snt n aceiai relaie. De exemplu, comparaiaelementare < superioare furnizeaz rezultatul True, deoarece Ord(elementare)=0 estemai mic dect Ord(superioare)=2.

    Tipul interval

    Fiind dat un tip ordinal, din acest tip se poate genera un nou tip, numit tipul interval

    Definiia unui interval indic valoarea constant cea mai mic i cea mai mare din interva(n sensul numrului de ordine) i cuprinde toate valorile dintre ele. Sintaxa unui tip intervaeste :

    Type nume_tip=valoarea_minim..valoarea_maxim;

    Se subliniaz faptul c nu este permis definirea unui interval al tipului real,deoarece acesta nu este de tip ordinal. Valoarea minim trebuie s fie mai mic sau egalcu valoarea maxim.

    11

  • 8/7/2019 Tipuri de date(ref)

    12/24

    Exemplu :

    TypeIndice=1..10; {interval de integer}Litera=A..Z; {interval de char}Zile=(Lu,Ma,Mi,Jo,Vi,S,Du); {tip de enumerare}Zile_lucrat=Lu..Vi; {interval de tip enumerare}VarI:indice; {valori posibile : 1, 2, , 10}L:litera; {valori posibile : A,B, ,Z}Z:zile_lucrat; {valori posibile : Lu,Ma, , Vi}

    O variabil de tip interval motenete proprietile variabilelor tipului de baz, darvalorile variabilei trebuie s fie numai din intervalul specificat. Dac este validat opiuneaRange checking (meniul de opiuni, comanda de opiuni de compilare, grupa de erori deexecuie), sau dac este prezent directiva {$R+}, atunci n execuia programului se vaverifica apartenena valorii unei variabile de tip interval, la intervalul desemnat. n caz deneapartenen este semnalat o eroare de execuie i programul se oprete. Implicit nu seefectueaz nici o verificare, deoarece codul generat n acest caz, este mult mai scurt.

    Program Interval;Uses Crt;Type cifra=0..9; {Intervalul n care se pot lua valori}Var C1,C2,C3:cifra; {Valorile posibile pt.C1, C2 si C3snt 0,1, ...,9}BeginClrScr;{$R+} {Se activeaz directiva de verificare}C1:=5; {Valoare valid}C2:=C1+3; {Valoare valid}{$R-} {Se dezactiveaz directiva de verificare}C3:=15; {Valoare invalid,dar nu se semnaleaz eroare}{$R+} {Se activeaz directiva de verificare}

    C3:=15; {Valoare invalid,dar se semnaleaz eroare}End.

    12

  • 8/7/2019 Tipuri de date(ref)

    13/24

    Tipul mulime

    Un tip mulime (Set) se definete n raport cu un tip de baz, care trebuie s fie un

    tip ordinal. Dndu-se un asemenea tip de baz, valorile posibile ale tipului Set snt formatedin mulimea tuturor submulimilor posibile ale tipului de baz, inclusiv mulimea vid.Tipul mulime se definete astfel :Type nume_tip=Set of Tip_de_baz;unde: Tip_de_baz este tip ordinal (char, interval, enumerare, logic).

    Cu toate c tipurile ntregi snt ordinale, nu este permis dect tipul set of byte. Dactipul de baz are N valori, tipul mulime va avea 2N valori, cu restricia ca n

  • 8/7/2019 Tipuri de date(ref)

    14/24

    BeginN:=[2..4,8,10..12];{elementele din constructor : 2, 3, 4, 8, 10, 11, 12]i:=10;

    N:=[i-1..i+1, 2*i,30];{elemente : 9, 10, 11, 20, 30}c:=[A..C,K,S];{elemente : A,B,C,K,S}a:=[alb,gri];readln;End.

    Dac tipul de baz are n valor, o variabil tip mulime corespunztoare tipului de baz, va

    fi reprezentat n memorie pe n bii, depui ntr-o zon de memorie contigu (continu) de(n div 8) +1 octei, dac n nu este divizibil cu 8;(n div 8) octei, dac n este divizibil cu 8.De exemplu, o variabil de tip set of char va fi reprezentat pe 256 div 8, adic pe 32 octei.

    Operaii cu mulimi:Operaiile care se pot efectua cu valorile tip mulime snt :+ reuniuneo valoare de tip ordinalc este n a+b, dac c este n a sau n b;- diferen

    o valoare de tip ordinalc este n a-b, dac c este n a i c nu este n b;* intersecieo valoare de tip ordinalc este n a*b, dac c este n a i n b.

    Relaiile referitoare la mulimi:Dac a i b snt operanzi tip mulime, atunci relaia :a = b, este adevrat dac a i b conin aceleai elemente, altfel aba=b, este adevrat dac fiecare element al lui b este de asemenea un element al lui a

    x in a, este adevrat, dac primul operand este elementul operandului al doilea(apartenen). Primul operand este de tip ordinal t, al doilea operand este de tip mulime, acrui tip de baz este compatibil cu tipul t.

    n operaiile i relaiile de mai sus, a i b trebuie s fie tipuri mulime compatibile.Dac se noteaz cu elmin cea mai mic valoare ordinal a rezultatului unei operaii cumulimi, iar cu elmax cea mai mare valoare ordinal a operaiei, tipul rezultatului va fi set ofelmin..elmax .Constructorii pot fi folosii pentru scrierea mai comod a unor condiii. De exemplu, dac cheste o variabil tip caracter, condiia :

    14

  • 8/7/2019 Tipuri de date(ref)

    15/24

    If (ch=T) or (ch=U) or (ch=R) or (ch=B) or (ch=O) then {}poate fi exprimat prin :

    if ch in [T,U,R,B,O] then {}iar condiia :if (ch>=0) and (ch

  • 8/7/2019 Tipuri de date(ref)

    16/24

    If i in dif then write(i:3); WriteLn; End.

    Tipul fiier

    Fiierul este un tip interesant. Este prima metod de a construi un tip care -- teoreticvorbind -- este infinit! (Toate tipurile de pn acum sunt finite pentru c sunt construite princombinaii finite ale unor mulimi finite). Bine-neles c practic i acest tip este finit, dar cu o

    dimensiune maxim neprecizat.

    Fiind dat un tip T (care nu e fiier la rndul su) ce face operaia:

    file of T

    ?

    Un fiier este asemnator unui array, dar are o lungime neprecizat. El conine la unmoment dat 0 sau 1 sau 2, ... valori de tipul T. Deci dac F e definit

    type F = file of T;

    atunci ca mulime

    unde N este mulimea numerelor naturale.

    (O astfel de operaie aplicat lui T (reuniunea tuturor puterilor) se numete operaia lui

    Kleene, i se noteaz cu T*

    ).

    Tipuri pentru ir de caractere

    n Turbo Pascal snt definite dou categorii de iruri de caractere :Cele clasiceCele cu terminaia nul

    Valoarea unei variabile de tip ir de caractere este format dintr-o succesiune decaractere. irurile clasice au lungime maxim de 255 de caractere, iar lungimea unui astfel

    de ir este specificat ntr-un octet care precede irul. irurile cu terminaia nul aulungimea maxim de 65535 octei (64Ko). La aceast categorie de iruri, primul octet numai memoreaz lungimea irului, ci un caracter nul #0 semnaleaz sfritul irului. Ambeletipuri snt considerate ca fiind tipuri compuse.Tipul ir de caractere clasic se specific prin construcia string[lungime] sau numai princuvntul cheie string. n primul caz lungime reprezint lungimea maxim a irului decaractere, avnd valori de la 1 la 255. Un tip ir de caractere, fr specificarea atributului delungime reprezint un ir de lungime maxim, implicit egal cu 255. Variabilele de tipstring[lungime] pot avea ca valori orice succesiune de caractere a crei lungime, nu

    16

  • 8/7/2019 Tipuri de date(ref)

    17/24

    depete lungimea declarat. Valoarea actual a atributului de lungime, este returnat defuncia standard Length.Variabilele de tip ir de caractere clasice snt memorate n locaii succesive de memorie,pe Lungime+1 octei, unde octetul de nceput conine lungimea actual a irului. Aceastvaloare poate fi modificat de utilizator, printr-o instruciune de atribuire de forma :Sir[0]:=#nr;

    Sau Sir[0]:=Chr(Ord(nr));unde :nr este cuprins ntre 0 i lungimea maxim admis. Dac nr are valoarea zero, atunciirul este considerat vid.

    O variabil de tip ir clasic poate fi folosit n totalitatea ei, fie parial, prin referireaunui caracter din ir. n primul caz referirea se face numai prin numele variabilei. n cel de-al doilea caz trebuie specificat ntre paranteze ptrate, poziia caracterului din ir, printr-oconstrucie de forma [expresie] , unde expresia trebuie s aibe o valoare ntreag nintervalul cuprins ntre 0 i lungimea maxim declarat a irului.Asupra irurilor de caractere se poate efectua operaia de concatenare care se noteaz cusemnul plus (+). Dac s i t snt doi operanzi de tip ir de caractere sau de tip char,rezultatul concatenrii s+t este compatibil cu orice tip de ir de caractere, dar nu i cu tipuChar. Dac irul rezultat depete 255 de caractere, irul se trunchiaz dup caracterul al255-lea.

    Operatorii relaionali =, , , = compar iruri de caractere, nconformitate cu ordonarea setului extins de caractere ASCII. Deoarece toate irurile decaractere snt compatibile, pot fi comparate dou valori arbitrare de tip ir.O valoare de tip caracter este compatibil cu o valoare de tip ir de caractere. Cnd acestevalori snt comparate, valoarea de tip caracter este considerat ca i cum ar fi un ir delungime 1 (unu).

    Exemplu:

    Program Prg_0022_Concatenare;Uses Crt;VarS1:String[10]; {irul S1 are lungimea maxim = 10}S2:String[20]; {irul S2 are lungimea maxim = 20}L:Integer; {Lungimea irului este un numr ntreg}

    BeginClrScr;S1:=Borland; {irul S1 este Borland}S2:=S1+ +Pascal; {irul S2 se obine prin adugareaunui spaiu i a irului Pascal}L:=Length(S2); {Variabila L este egal cu lungimeairului S2}

    17

  • 8/7/2019 Tipuri de date(ref)

    18/24

    WriteLn(S2); {Se tiprete irul S2}WriteLn(Lungime actuala = ,L); {Se afieaz lungimea irului} ReadKey; End.

    Introducerea tipului ir de caractere cu terminaia nul permite folosirea irurilor delungime mai mare ca 255. Primul octet nu mai memoreaz lungimea maxim actual, cconine efectiv primul caracter din ir. Sfritul irului este semnalat cu caracterul #0Lungimea maxim este 65535. Conversia ntre irurile clasice i cele cu terminaia nul

    este realizat cu ajutorul funciilor StrPCopy i StrPas. Aceste funcii, precum i toate acelefuncii care prelucreaz irurile cu terminaia nul, snt depuse n unit-ul Strings.irurile cu terminaia nul au urmtoarea declaraie de tip :

    Array[0..n] of charUnde n desemneaz numrul caracterelor din ir, deci fr aracterul de sfrit #0. irurilecu terminaia nul snt utilizate sub forma variabilelor de tip reper. Pentru acest scop a fostintrodus un tip predefinit PChar astfel:Type Pchar=^char;

    Acest tip desemneaz un tip reper, care repereaz un ir de caractere cu terminaia nul

    Tipul PChar este compatibil din punct de vedere al atribuirii cu un ir de caractere clasiceO variabil de acest tip poate s primeasc i o valoare tip reper cu funcia Addr sau @.La variabilele de tip ir de caractere de terminaie nul, la fel ca la irurile clasice i latabele, se pot folosi indici. Astfel s[i] desemneaz un reper la caracterul al i-lea al irului.La transmisia de parametri se permite ca parametrului formal de tip ir clasic s-corespund un parametru actual tip ir cu terminaia nul.

    Tipul tablou

    Tipul tablou este un tip compus, care const dintr-un numr fixat de componente, fiecarecomponent avnd acelai tip. La definirea tipului tablou trebuie precizat att tipul comun acomponentelor, ct i tipul indicilor, care stabilete numrul componentelor tabloului.Tipul tablou se definete printr-o construcie de forma:

    Type nume_tip=array[T1] of T2;Unde:T1 este tipul indicelui, care trebuie s fie ordinalT2 este tipul componentelor i care poate fi un tip oarecare.T1 fiind ordinal, exist un numr finit de valori, deci i de componente.

    Exemplu:

    Type t=array[1..10] of integer;Var a,b:t;

    Fiecare component a unei variabile de tip tablou poate fi specificat explicit, prin numelevariabilei urmat de indice, ncadrat de paranteze ptrate, de exemplu : A[7], B[9].Fiind date dou variabile de tip tablou, de acelai tip, numele variabilelor pot aprea ntr-oinstruciune de atribuire.

    18

  • 8/7/2019 Tipuri de date(ref)

    19/24

    Exemplu:A:=B;

    Aceast atribuire nseamn copierea tuturor componentelor din membrul drept n membrustng, adic instruciunea precedent este echivalent cu ciclul:Var i:integer;{}For i:=Liminf to Limsup do a[i]:=b[i];Unde:Liminf i Limsup, desemneaz limita inferioar i limita superioar a indicilor. Tablourilefurnizeaz un mijloc de a grupa sub acelai nume mai multe variabile cu caracteristiciidentice.Pentru specificarea tipului indicelui T1 se folosesc de regul intervale ale tipului ntreg.Deoarece T2 poate fi de orice tip, n particular poate fi tot un tip tablou. Astfel devineposibil definirea tipului tablou multidimensional.Astfel:Array[T1] of Array[T2] of T3Reprezint un tip tablou bidimensional (matrice). Accesul la o component oarecare, a unevariabile tab de acest tip, se realizeaz cu o construcie de forma:

    Tab[ind1][ind2]

    Unde :Ind1 este o expresie de tip T1Ind2 este o expresie de tip T2

    Aceast construcie selecteaz elementul din linia ind1 i din coloana ind2 a matricei tabSe poate folosi i o scriere simplificat : tipul poate fi scris sub forma :Array [T1,T2] of T3;Iar o referin sub frma :Tab[Ind1,Ind2];

    Exemplu :

    Program Tablouri;Type T1:Array[1..5] of Integer;T2:Array[0..3,0..5] of Real;T3:Array[a..c,2..5] of Char;T4:Array[Char,Boolean] of Char;Var V1:T1; {5 componente de tip ntreg dintr-un vector}

    V2:T2; {4 x 6 = 24 componente de tip Real}V3:T3; {3 x 4 = 12 componente de tip Char}V4:T4; {256 x 2 = 512 componente de tip Char}

    Se pot citi valorile de la tastatur sau se pot atribui n cadrul programului.

    Exemplu :

    V1[4]:=25;V1[5]:=V1[4]x2; {Vector}

    19

  • 8/7/2019 Tipuri de date(ref)

    20/24

    V2[2,3]:=1.25De la tastatur se citete cu Read (Read(V2[2,3]);)

    Componentele unei variabile de tip tablou snt memorate n locaii consecutive dememorie, n stil linie dup linie. Spaiul de memorie ocupat se obine prin nmulirea lungimi

    n octei a unei componente cu numrul componentelor.

    Program Matrice_BiDimensionala;Uses Crt;Type T1=Array[1..2,1..3] of Integer;Var V1:T1; {2 x 3 = 6 componente de tip intreg}BeginTextBackGround(1);TextColor(14);ClrScr;GoToXY(29,3);Write('Matrice bidimensionala');GoToXY(35,5);Write('Coloanele');GoToXy(21,7);Write(' ');

    GoToXy(21,8);Write(' ');GoToXy(21,9);Write(' 1 2 3');GoToXY(11,10);Write('');GoToXY(11,11);Write(' V1[1,1] = V1[1,2] = V1[1,3] = ');GoToXY(11,12);Write('');GoToXY(11,13);Write(' V1[2,1] = V1[2,2] = V1[2,3] = ');GoToXY(11,14);Write('');GoToXY(2,11);Write('Linia 1 >');GoToXY(2,13);Write('Linia 2 >');

    GoToXY(2,23);Write('Linia 1 Coloana 1 (V1[1,1]) = ');Read(V1[1,1]);GoToXY(2,23);ClrEol;GoToXY(25,11);Write(V1[1,1]:4);

    GoToXY(2,23);Write('Linia 1 Coloana 2 (V1[1,2]) = ');Read(V1[1,2]);GoToXY(2,23);ClrEol;GoToXY(44,11);Write(V1[1,2]:4);

    GoToXY(2,23);Write('Linia 1 Coloana 3 (V1[1,3]) = ');Read(V1[1,3]);GoToXY(2,23);ClrEol;GoToXY(63,11);Write(V1[1,3]:4);

    GoToXY(2,23);Write('Linia 2 Coloana 1 (V1[2,1]) = ');Read(V1[2,1]);GoToXY(2,23);ClrEol;

    20

  • 8/7/2019 Tipuri de date(ref)

    21/24

    GoToXY(25,13);Write(V1[2,1]:4);

    GoToXY(2,23);Write('Linia 2 Coloana 2 (V1[2,2]) = ');Read(V1[2,2]);GoToXY(2,23);ClrEol;GoToXY(44,13);Write(V1[2,2]:4);

    GoToXY(2,23);Write('Linia 2 Coloana 3 (V1[2,3]) = ');Read(V1[2,3]);GoToXY(2,23);ClrEol;GoToXY(63,13);Write(V1[2,3]:4);GoToXY(1,23);

    ReadKey;End.

    Tipul articol

    Tipul articol este un tip compus format dintr-un numr de componente, numitecmpuri. Spre deosebire de tablouri, cmpurile pot fi de tipuri diferite. Fiecare cmp are unnume care este un identificator de cmp. Numrul componentelor poate s fie fix sauvariabil. n primul caz spunem c avem o structur cu articole fixe, n cel de-al doilea cazavem o structur cu variante.

    Forma general a unei structuri cu articole fixe este :

    TipArt=RecordNume_cmp_1:Tip_1;Nume_cmp_2:Tip_2;{}End;

    Exemplu :

    Type data=RecordAn:1900..2100;Luna: (Ian,Feb,Mar,Apr,Mai,Iun,Iul,Aug,Sep,Oct,Noi,Dec);

    Ziua:1..31;End;Var Astazi:Data;

    Tipul reper

    21

  • 8/7/2019 Tipuri de date(ref)

    22/24

    n Turbo Pascal variabilele pot fi statice sau dinamice. Variabilele statice snt alocaten timpul compilrii, iar spaiul ocupat de ele n memorie nu poate fi modificat n execuieEle exist pe durata ntregii execuii a blocului (program, procedur, funcie). Variabilelestatice snt declarate n seciunea Var.O variabil poate fi creat i distrus dinamic n timpul execuiei programului. O astfel devariabil este denumit variabil dinamic. Variabilele dinamice nu apar ntr-o declaraieexplicit, n seciunea Var i accesul la astfel de variabile nu se poate face direct.Crearea i distrugerea variabilelor dinamice se realizeaz cu procedurile New i GetMemrespectiv Dispose i FreeMem. Aceste proceduri aloc, respectiv elibereaz spaiul dememorie pentru variabilele dinamice. Adresa zonei de memorie alocat unei variabiledinamice este depus ntr-o variabil de tip special, numit reper. Lungimea zonei dememorie atribuit unei variabile dinamice depinde de tipul variabilei dinamice : n funcie detip se aloc un numr variabil de de octei, variabilei respective. De exemplu, dac tipuvariabilei dinamice este Integer, se aloc 2 octei, iar dac tipul este Real, se aloc 6 octei

    n consecin, variabila de tip reper care va conine adresa zonei alocate variabiledinamice, trebuie s comunice procedurilor de alocare de memorie, tipul variabiledinamice. Se menioneaz c variabilele dinamice snt alocate ntr-o zon special dememorie, numit Heap.Definirea unui tip reper se poate face n seciunea Type,n felul urmtor:

    Type tip_reper=^ tip_variabil_dinamic;

    Unde semnul ^ (caret) semnific o adres.

    Mulimea valorilor tip_reper const dintr-un numr delimitat de adrese. Fiecare adresidentific o variabil tip_variabil_dinamic. La aceast mulime de valori se mai adaug ovaloare special, numit nil, care nu identific nici o variabil.Limbajul permite ca n momentul ntlnirii tipului variabilei dinamice, aceasta s nu fi fostdefinit nainte, ns acest tip trebuie declarat mai trziu, ntr-o declaraie de tip.Type rep=^Art; {Referire nainte}Art=RecordX,Y:integer;End;Var R1,R2:Rep; {Pentru reperarea variabilei dinamice tip Art}R3:^integer; {Pentru reperarea variabilei dinamice tip Integer}R4:^Char; {Pentru reperarea variabilei dinamice tip Char}

    O alt facilitate a limbajului const n posibilitatea utilizrii tipurilor care se autorefer, adicsnt definite recursiv.

    Type Lista=^Articol;Articol=RecordA,B:Integer;Urmator:Lista;End;Var L:Lista;

    22

  • 8/7/2019 Tipuri de date(ref)

    23/24

    Aici tipul reper Lista, repereaz un tip articol, n care n cmpul urmtor la rndul lui este deasemenea de tip Lista. Aceast facilitate poate fi folosit de exemplu, la alctuirea listelor

    nlnuite.Dup crearea unei variabile dinamice a crei adres este depus ntr-o variabil de tipreper, ea poate fi accesat prin operaia numit dereperare adic numele variabilei de tipreper este urmat de semnul ^ (caret).Acest semn poate fi urmat i de un alt calificator (de cmp, de tablou). Dereperarea uneivariabile de tip reper cu coninut nil declaneaz o eroare de execuie.Variabilele de tip reper snt alocate pe 4 octei (2 octei pentru memorarea adresei desegment, 2 octei pentru memorarea deplasamentului).Operaiile relaionale care snt permise cu operanzii de tipul reper, compatibile snt egal (=)i diferit (). Dac p1 i p2 snt dou valori tip reper compatibile, relaia p1=p2 esteadevrat dac snt egale prile de segment i deplasament.

    Tipul pointer

    Tipul predefinit pointer este un tip reper care nu are tip de baz. Astfel, o variabil deacest tip poate s repereze o variabil de tip arbitrar i din aceast cauz acest tip se mainumete i tip reper liber. Declararea se face astfel :Var ReperLiber:pointer;Variabilele de tip pointer nu pot fi dereperate. Scrierea simbolului ^ dup o astfel devariabil constituie o eroare. Variabilele de tip pointer snt utilizate pentru memorarea valoriunor variabile de tip reper legat. Unei variabile de acest tip i poate fi atribuit i valoareapredefinit nil.Valori de tip reper pot fi create i cu operatorul @ i cu funcia standard Ptr. Aceste valorsnt tratate ca i cum ar fi repere pentru variabilele dinamice.

    Compatibilitatea tipurilorn anumite construcii ale limbajului Turbo Pascal dou tipuri trebuie s fie identice sau eletrebuie s fie compatibile sau compatibile doar din punct de vedere al atribuirii.

    Tipuri identiceIdentitatea de tip se impune ntre parametrii actuali i parametrii formali variabili, adic ceispecificai cu atributul Var.Tipuri compatibileCompatibilitatea de tipuri se impune n cazul expresiilor i al operaiilor de relaie. Doutipuri snt compatibile atunci cnd este adevrat cel puin una din urmtoarele afirmaii :Cele dou tipuri snt identice

    Ambele tipuri snt reale (real, simple, double, estended, comp)Ambele tipuri snt ntregi (integer, word, shortint, byte, longint)Ambele tipuri snt logice (boolean, wordbool, longbool)Un tip este un interval al celuilalt tipAmbele tipuri snt intervale ale aceluiai tip de bazAmbele tipuri snt tipuri mulime, cu tipurile de baz compatibileUnul din tipuri este de tip string iar cellalt este de tip string sau charUnul din tipuri este pointer, iar cellalt este tip reper, dar dou tipuri reper cu tipurile debaz diferite, nu snt compatibile.Ambele tipuri snt de tip procedur, unde numrul i tipul parametrilor snt identice.

    23

  • 8/7/2019 Tipuri de date(ref)

    24/24


Recommended