Está en la página 1de 40

http://tp7.info/tp_ushitel.php? directory=gl2&link=gl2_2.

htmlTABLOURI

UNIDIMENSIONALE
Structura de date este o colecie de date nzestrat cu informaii structurale care permit identificarea i selecia componentelor. Componentele unei structuri de date pot fi identificate si selectate fie prin numele, fie prin intermediul relaiilor structurale. Cea mai simpla relaie structurala este poziia fiec rei componente in cadrul structurii. Asupra unei structuri de date se pot aplica mai multe tipuri de operaii :vizualizarea elementelor structurii sub diferite forme, actualizarea(adugarea, modificarea sau tergerea unei componente), mbogirea structural(prin adugarea unor informaii de legtura) sortare(aranjarea componentelor intr-o anumita ordine stabilita de un anumit criteriu de ordonare. Din punct de vedere al coninutului, structurile pot fi: -omogene(toate componentele structurii sunt de acelai tip) -neomogene(componentele structurii sunt de tipuri diferite) in funcie de modul in care sunt memorate structurile de date se mpart in doua mari categorii: -Structuri interne, sunt create in memoria interna RAM a sistemului, i au un caracter temporar, datorit faptului ca memoria interna este volatila. -Structuri externe, sunt depozitate pe un suport de memorie externa (hard-disk.floppy-disk), avnd astfel un caracter permanent.

TABLOURI
Un sir de elemente de acelai tip, n care conteaz ordinea elementelor, se nume te vector sau tablou unidimensional. Un tablou(array) este o structura formata dintr-un numr fixat de componente de acela i tip, numit tip de baza. Numrul de componente este determinat de numrul de valori ale indicilor, care sunt obligatoriu tipuri ordinale. Poziia unui element se mai numete si indicele sau rangul elementului, iar elementele se mai numesc si componente ale vectorului. Sintaxa declarrii tipului tablou este : type_nume=array[tip_ordinal1,......tip_ordinaln] of tip_oarecare unde: n-reprezinta dimensiunea tabloului tip_ordinal1,...tip_ordinaln reprezinta tipul indicilor tabloului

tip_oarecare reprezinta tipul componentelor tabloului !Obervatii.In cazul in care tip_ordinal este unul din tipurile intregi,este obligatoriu sa folosim subdomeniile lui Exemplu: type vector=array[1..100] of integer; var v:vector; variabila v este un tablou de dimensiune 1 cu 100 componente intregi identificate prin indici din subdomeniul 1..100. Aici tipul ordinal este subdomeniu al tipului integer, iar tipul oarecare este ineger. Componentele unui tablou sunt memorate pe zone de memorii consecutive. Adresarea unei componente a tabloului se face prin indice (o valoare a tipului ordinal) care se specifica dup numele tabloului, ntre paranteze drepte. Tipul tablou array[tip_ordinal] of tip poate rmne si anonim. Astfel, putem scrie ceva de genul type vector=array ...si var x:vector pe scurt prin var x:array...Adic , tipul tablou r mne anonim, nu trebuie neaprat s primeasc un nume(aici cel de vector). tip_ordinal si tip pot fi att tipuri anonime, ct si identifictori de tip. Limbajul Turbo Pascal nu ne permite sa declaram o variabila de tip array cu un num r variabil de componente. De multe ori nu tim cate componente vor fi necesare pentru o anumita rulare a programului. Orice problema n care se lucreaz cu variabila de tip array si in care se cere prelucrare a n componente constituie un exemplu in acest sens .In acest caz ideea este sa rezervam un numr maxim de componente, att cat este necesar pentru rulare atunci cnd n este maxim. la fiecare rulare a programului se cere numrul de componente. De cele mai multe ori o parte dintre cele rezervate rmn neutilizate. Prin declararea unui vector vom nelege numrul maxim de elementele acestuia. Num rul elementelor efective folosite, care difer de la o execuie la alta se numete numr real (efectiv de elemente). "Vizualizarea" tuturor elementelor pe rnd si prelucrare acestora se numete parcurgere. Parcurgerea intr-un ciclu poziiile elementelor din vector i=1,2,3,...,n si pentru fiecare valoare a lui i, "vizitm" si prelucram elementul v[i], adic elementul aflat pe poziia i: secven a de program for i:=1 to n d0 <prelucrarea v[i] urmarirea ciclului pas cu pas Pasul 1:i:=1,prelucreza v[1] Pasul 2:i:=2,prelucreza v[2] ------------------------------------Pasul n:i:=n,prelucreza v[n]

OPERAII CU VECTORI O variabila de tip tablou nu poate fi citita sau scrisa in ntregime. In Turbo Pascal7.0 Se pot face atribuiri intre variabile de acelai tablou. Dar, e preferabil sa se lucreze pe componente .Cu componentele unui tablou Se pot face toate operaiile ce Se pot face cu orice variabil de acel tip (afiare, citire, atribuire etc) 1.citirea unui vector Aceasta nseamn citirea numrului n de componente, intr-un ciclu for, de pilda. De fapt avem de citit componenta numrului i, cu i de la 1 la n. Deci putem scrie: for i:= 1 to n do begin write('dati x[',x,']='); readln(x[i]); end; 2.Srierea unui vector cnd trebuie sa afim vectorul, adic toate componentele sale efective numrul acestora este cunoscut. Afiarea se realizeaz ciclic si poate fi astfel: -fiecare element pe un rnd(folosita mai ales cnd avem vectori si iruri de caractere) for i:1to n do writeln(x[i]); -toate elementele pe acelai rnd, desprite de virgula si/sau spatii(in cazul valorilor numerice) for i:=1 to n do write(x[i],','); writeln; 3.inversarea unui vector in alt vector vom inversa vectorul x in vectorul y, de acelai tip cu x, deci vom pune in componenta y[1] pe x[n],in componenta y[2] pe x[n-1]...,im componenta y[n] pe x[1] for i :=1 to n do y[i]:=x[n+1-i] 4.inversarea unui vector in el insasi

Va trebui sa schimbam prima componenta cu ultima,pe a doua cu penultima s.a.m.d.,pana la mijloc vom intelege n div 2 indiferent daca n este par sau impar.Asadar,va trebui sa parcurgem vectorul pana la n div 2 intershimband pe x[i] cu x[n+1-i]; for i:=1 to n do div 2 do begin aux:=x{i]; x[i]:=x [n+1-i]; x[n+1-i]:=aux; end; 5.determinarea elementului minim dintr-un vector Aceasta problema se rezolva astfel:consideram minim primul element,apoi parcurgem restul vectorului si,ori de cate ori gasim un element mai mic actualizam minimul la valoarea acelui element minim:=x[1] for i:=2 to n do if x[i]<x[1] then minim:=x[i]; In acest moment,la sfarsitul ciclului,variabila minim(de acelasi tip ca si componentele x) contine cel mai mic element din vector 6.determinarea elementului maxim dintr-un vector Se actualizeaza maximul intr-o variabila max.Algoritmul este asemanator cu cel de minim.Initializam maximul cu primul element.Parcurgem intr-un ciclu pozitiile celorlalte elemente i pentru fiecare element v[i],daca v[1] mai mic decat v[i],atunci v[i] devine noul maxim. 7.determinarea simultana a minimului si maximului dintr-un vector Pentru a realiza aceste lucruri simultan se procedeaza dupa cum urmeaza: minim:=x[1];maxim:=x[1]; for i:= 2 to n do begin if x[i]<minim then minim:=x[i] if x[i]>maxim then maxim:=x[i] end; Evident daca vectorul contine doar un singur element acela va fi si maxim si minim

8.insumarea componentelor unui vector de numere Suma componentelor unui vector se calculeaza ca orice suma,se pleaca cu suma nula,apoi la fiecare pas i (i de la 1 la n),suma creste cu elementul curent,care este x[i]. suma:=0; for i:= 1 to n do suma:=suma+x[i]; 9.Afisarea elementelor pare dintr-un vectorde numere intregi. sa consideram var x:=array{1..20] of integer,si var n,i:integer.Vom parcurge vectorul si vom afisa doar numerele pare: for i:=1 to n do if not odd(x[i]) then writeln(x[i]) 10.afisarea elementelor impare de pe pozitii pareale unui vector de intregi Vectorul are componentele intregi.Consideram aceleasi variabile ca si la problema anterioara.Daca spunem pozitie trebuie sa ne gandimla indice,iar dac spunem element trebuie sa ne gandim la elementul de pe pozitia i,deci la x[i].Asadar va trebui sa avem not odd )i)si oddx[i] for i:=1 to ndo if (not odd[i]) and odd(x[i]) writeln(x[i]) 11.numararea elementelor negative si a celor pozitive dintr-un vector de numere. Fie NN Si NP cele doua numere.Acestea se comporta ca doua contoare,initial nule,De fiecare data cand gasim in sirul de numere un element negativ se incrementeazaNN,NN:=NN+1,altfel NP. NN=0;NP=0; for i:=1to n do if x[i]<0 then inc(NN) else inc(NP); writeln('Exista',NN,'elemente negative'); writeln('Exista,'NP',elemente pozitive'); 12cautare secventiala a unui element intr-un vector

Aceasta problema necesita pentru a putea fi reolvata si o parcurgere a vectorului de la prima pozitie pana la sfarsit sau pana s-a gasit elementul cautat.Gasirea elementului cautat este marcat de o variabila logica gasit,pozitionata initial pe fals.Fie x vectorul,iar a elementul cautat gasit:=false; i:=1 while(i:=n) and (not gasit) do if x[i]:=a then gasit:=true else inc(i) 12.inserarea unui element dintr-un vector. sa inseram,pe poozitia p intr-un vector,un element nou m.Pentru aceasta vom deplasa elementele de pe pozitiile de la p la n,unde n ete numarul de elemente ale vectorului,cu o pozitie mai incolo spre dreapta.Deplasare se vaface de la pozitia ultima inspre pozitia p.In final vom pune elementul m pe pozitia p.Fireste numarul de elemnte ale vectorului vor creste cu o unitate:n:=n+1 for i:=n+1 downto p+1 do x[i]:=x[i-1]; x[p]:=m; n:=n=1; Ordonarevectorilor Metoda seleciei directe. Consideram ca avem un vector de elemente comparabile intre ele, s ordonam cresc tor elementele vectorului. Metoda este urmtoarea il punem pe cel mai mai in fata ,apoi procedam la fel cu restul elementelor .Aceasta metoda se implementeaz astfel: vom compara pe x[1] cu toate elementele de dup el. Dac gsim un element x[j] care e mai mic dect x[1],atunci interschimbam pe x[1] cu x[j] .Cnd am ajuns la ultimul element nseamn ca pe prima pozi ie va fi sigur cel mai mic element din vector(noul x[1]) in continuare, ne ocupam doar de elementele de pe pozi ia doi ncolo si vom parcurge vectorul pana la x[n] ca si in primul caz. Aceste traversri ale vectorului ,nso ite de eventualile interschimbari au loc pana la penultima poziie, cnd mai are loc doar o singura comparare, intre x[n-1] si x[n] Metoda bubble-sort se compara fiecare element x[i] cu elementul de pe poziia succesoare, deci cu elementul x[i+1].Daca elementele nu sunt puse in ordine cresctoare, se vor schimba intre ele. Procesul se repeta pana cnd la o traversare a lui x nu mai are loc nici o interschimbare Sortare prin numrare

Pentru fiecare element din vector se numra cate elemente mai mici dect el exista in vector. program ordonare alfabetica; var x:array[1..20] of string; i,j,n:integer;aux:string; begin write ('cati elevi sunt?='); readln ;

for i:=1 to n do; begin write('nume elev x ',i,':'); readln(x[i]); end; for i:=1 to n-1 do for j:=i+1 to n do if x[i]<x[j] then begin aux:=x[i];x[i]:=x[j];x[j]:=aux; end; writeln ('ordinea alfabetica este:'); for i:= 1 to n do writeln(i,'',x[i]); readln; end. Interclasareaa doi vectori Presupunem ca dispunem de doi vectori( eventual de dimensiuni diferite) ordona i, s ob inem vectorul reuniune ordonat. Fie a si b doi vectori, iar in vectorul c sa punem rezultatul. Vom proceda in felul urmtor 1 vom compara primul element din vectorul a cu primul element din vectorul b si pe cel mai mic l vom pune in c, eliminndu-l din vectorul de unde provine; 2 procesul se repeta pana cnd se epuizeaz unul din vectori;

3 Se copiaz la sfritul lui c toate elementele din vectorul rmas neterminat, care firete vor fi deja ordonate, ct i mai mari ca ultimul element din vectorul care s-a epuizat primul. Cutarebinara Cutarea binara se folosete pentru a determina existenta unui element intr-un vector. Dac elementele vectorului sunt deja ordonate cresctor sau descresctor, atunci procesul c ut rii poate deveni mai rapid, daca se aplica cutarea binara . Se compara elementul cuta cu elementul din mijloc si, daca ele nu coincid, se va trece la c utare doar in acea jumtate a vectorului in care in mod logic, elementul cutat s-ar putea gsi, in stnga sau in dreapta, dup cum elementul din mijloc este mai mare sau mai mic dect elementul c utat s.a.m.d. pana cnd domeniul in care trebuie sa mai caute sa terminat.

Tipuri de date Array (Tablou) n Pascal.


Un array (masiv) este un bloc continuu de celule din memoria calculatorului, reunit sub un nume comun. Array-ul descrie o structur de entiti (componente) care, geometric, sunt att de regulate nct oricare dintre ele pot i speci icate n mod unic prin preci!area coordonatelor. Aceste coordonate sunt numite indici. "n limba#ul Pascal indicii sunt listai n parante!e drepte care urmea!a numelui array-ului ca n a[3] (se cite$te a de %) $i b[i,j](se cite$te b de i $i #&). 'e$i (%) $i (i,#) nu pot aprea ca indici, ei sunt versiuni liniari!ate ale indicilor olosii n notaii ca a % $i bi,#. 'in moment ce array-urile sunt stocate n memorie, orice componente ale acestora pot i accesate (regsite) oarte repede, timpul de acces iind independent de locaia componentei (array-ului). Array-urile ale cror componente pot i identi icate olosind un singur indice sunt numite array-uri unidimensionale, array-urile ca b(i,#) cu doi indici sunt numite bidimensionale, iar cele cu mai mult de doi indici sunt numite multidimensionale. *atematicienii $i oamenii de $tiin olosesc recvent array-uri bidimensionale pe care le numesc matrici. Toate array-urile ilustrate mai #os respect de initia unui array, dar ele nu sunt n egal masur acceptate de Pascal Array-urile sunt olositoare, dar nu necesare pentru nsumarea numerelor. +onsideram urmatorul program pentru adunarea a cinci valori ntregi, PROGRAM suma-. var a,b,c,d,e,suma,integer. begin /riteln(01ntroduceti a,b,c,d,e 0). readln(a,b,c,d,e). suma,2a3b3c3d3e. /riteln(04uma este, 0,suma) end 5suma-6. Acum, presupunem ca n loc de cinci valori de intrare avem -7, -77 sau -777& 8vident, te9nica utili!at n programul suma5 nu :prea ine:. cine este dispus s invente!e -777 de nume di erite de variabile; Alt el stau lucrurile dac vom olosi un array, ca n programulnouasuma5.

PROGRAM nouasuma-.

const n2-777. var a,array(<..n) of integer. i,suma,integer. begin suma,27. 5 initiali!are suma 6 for i,2< to n do begin read(a(i)). suma,2suma3a(i). end. /rite(suma). end 5nouasuma-6. 4e pune urmtoarea ntrebare, a ost necesar de inirea unui array; =aspunsul este, nu. Argumentul este simplu - nu a ost e>ploatat proprietatea de acces direct a array-ului. Pentru aceast problem, soluia pre erat este cea ilustrat n programul pre!entat mai #os, care olose$te o singur variabil de intrare a, PROGRAM suma. var s,a,integer. begin s,27. while NOT eo do begin read(a). s,2s3a. end. /rite(s). end 5suma6. 3. Managementul indicilor Presupunem c a este de tip array (7..n) of integer. unde n este o constant, iar i unnteger. Pentru a atribui iecrui element a(i) valoarea indicelui este usor.

for i,27 to n do a(i),2i. Pentru a atribui iecrui element a(i) valoarea n-i procedam ca n e>emplul urmator, Exemplu: for i,27 to n do a(i),2n-i. for i,27 to n do a(n-i),2i. "n iecare ca! a trebuit s descoperim cte o relaie ntre a[i], a[n-i] $i i $i ntre a[i] $i n-i. 1ata un e>emplu mai interesant. Presupunem c procedura exchan e este corespun!tor de init ca un array ce conine cteva valori $i c dorim s inversm ordinea acelor valori. a[!]"-#a[n] a[$]"-#a[n-$] a[%]"-#a[n-%] =elaia dintre indicii succesivi este u$or de stabilit, a[i]"-#a[n-i] 'ar ce limit superioar ar trebui s ie olosit de ciclul for ast el nct s minimali!m numrul de sc9imbri necesare ; 8>primarea din e>emplul urmator, dupa cum se poate constata u$or, nu ace mai nimic& Exemplu: for i,27 to n do exchange(a(i),a(n-i)). +eea ce ne trebuie este soluia urmtoare, care lucrea! att pentru o valoare para a lui n, ct $i pentru o valoare impar. Exemplu: for i,27 to (n-<) &i' ? do exchange(a(i),a(n-i)). 8>emplele pre!entate sunt tipice utili!rii array-ului cu o dimensiune. +9eia succesului const n managementul indicilor.

ntroducere
Avantajele folosirii unui limbaj puternic tipizat sunt 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.

!n limbaj se numete ""puternic tipizat## dac n faza de execuie a unui program nu pot aprea 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 descrie semnificaia noiunii de ""tip de date##.

Ce este un tip de date


$xist mai multe definiii posibile pentru tipurile de date% din mai multe perspective. & privire global definete simultan att tipurile de date ct i operaiile care se pot face cu ele% pentru c acestea sunt de fapt cele dou faete ale unei aceleiai monezi: nu pot exista una fr cealalt. 'oi vom trata cele dou subiecte pe rnd i n mod inegal% acordnd o oarecare prioritate tipurilor de date. Astfel% n cea mai simpl accepiune posibil% un tip de date nu este altceva dect o mulime de valori. (e este o valoare) 'u are nici o importan* $ste un nume special dat elementelor care aparin unui tip. +ermenul ""aparin## este justificat% pentru c% reinei% tipul este o mulime% n cel mai precis sens matematic. $xemple) n Pascal tipul boolean este o mulime cu dou elemente. Aceste dou elemente se noteaz n Pascal cu false i true. False i true se numesc de aceea valori booleene. +ipul integer este tot o mulime care include% printre altele% nite elemente ,valori- care n Pascal se noteaz cu -2, -1, 0, 1, 2, 3 etc. +ipul integer este un tip interesant% pentru c i propune s mimeze mulimea matematica Z a numerelor ntregi% dar nu reuete prea bine% pentru c mulimeainteger este finit% iar Z nu* (are sunt limitele mulimii integer nu se specific. .n dialectul +urbo Pascal ,cel mai rspndit pe P( uri- integer are /001/ de elemente% de la cel notat -32768 la cel notat 32767. $lementele tipului integer sunt numite valori ntregi ,sau mai precis integer values-. 2ac ai citit textul de mai sus cu atenie ai observat c ne am ferit s spunem ca false este un element ,valoare- boolean. Am spus false este o notaie ,o reprezentare- a unui element boolean* 2e aici ncolo nu vom mai fi att de scrupuloi; dealtfel cele dou noiuni ,element i reprezentare- se pot adesea intersc3imba fr ambiguitate. 4om zice de aceea: boolean 5 6 false% true 7

unde acoladele sunt notaia uzual pentru mulime.

ipuri enumerate
Pascal pune la dispoziie programatorului mai multe mecanisme prin care el s i construiasc noi tipuri. (el mai simplu dintre acestea este enumerarea. $numerarea construiete un nou tip cu un numr finit de elemente descriind ntre paranteze reprezentarea canonic a fiecrui element. $xemplu ,tipic- :
(rosu, verde, albastru, galben, mov, negru, alb)

este descrierea unui nou tip care are 8 elemente cu reprezentrile Putem da acestui tip un nume folosind directiva type din Pascal.
type

rosu% verde%

etc.

uloare ! (rosu, verde, albastru, galben, mov, negru, alb)"

2in punct de vedere matematic am putea scrie culoare 5 6 rosu% verde% albastru% galben% mov% negru% alb 7 +ipul boolean din Pascal ar putea fi definit el nsui astfel:
type boolean ! (false, true)"

2e ce ne este oferit ns de a gata vom afla din urmtoarea seciune i din cele consacrate operatorilor.

ipuri fundamentale
9imbajul Pascal ,standard- conine patru tipuri gata construite. Pe acestea le numim tipuri fundamentale. $le sunt:
real, integer, #ar, boolean

Pentru boolean am vzut boolean 5 6 false% true 7 Pentru integer am putea scrie ceva de genul

limitajos i limitasus depind de dialectul de Pascal folosit. Pentru +urbo ele sunt ,dup cum am zis- -32768% respectiv 32768. Pentru #ar lucrurile sunt grele pentru c exist unele caractere care nu au o reprezentare evident* +ot ce putem spune este c aceast mulime include mulimea
$%a%, %b%, &&&%'%, %(%, &&&, %0%, &&&, %)%, &&&*

a caracterelor care pot fi tiprite. :ar pentru real lucrurile sunt i mai nclcite% pentru c% dei real se dorete o imagine a mulimii ! a numerelor reale% n realitate real este finit i are elementele distribuite ntr un mod foarte ciudat pe axa real ,nici mcar dou elemente ale ei nu sunt ec3idistante-* Aceasta mulime este subiectul analizei numerice% care studiaz cum putem face calcule cnd putem manipula numai aproximri ale valorilor.

"eri#area tipurilor
Pascal ,i nu numai el- pune la dispoziie nite puternice mecanisme prin care putem construi noi tipuri plecnd de la cele existente. ,Prin enumerare putem construi tipuri plecnd de la nimic.- 2erivarea d natere unei noi mulimi de elemente combinnd elementele unor tipuri deja existente. $xist o interesant clas de tipuri numite tipuri scalare. +ipurile boolean, #ar, integer i toate tipurile construite prin enumerare sunt scalare. Aceste tipuri au ntotdeauna un numr finit de elemente i dup cum vom vedea mai trziu% exist ,datorit operatorilor de comparaie- o relaie de ordine total pe ele ,adic dintre dou elemente unul e mai mare i cellalt mai mic- ;.

$u%domeniu
$xist o operaie prin care dintr un tip scalar putem extrage o submulime format din elemente consecutive. $a devine un nou tip care se va numi un subdomeniu,""subrange## n englez- al celui iniial. Pentru c pe tipurile scalare exist o ordine% submulimea se indic prin capetele ei. $xemplu:
1 && 100

este un tip subdomeniu al integer% avnd ;<< de elemente. :at un tip subdomeniu al tipului culoare definit mai sus% cruia i dm i un nume:
type +ul,rimara ! rosu && albastru"

+ipul numit (ulPrimara are 1 elemente:

(ulPrimara 5 6rosu% verde% albastru 7.

+ipurile subdomeniu sunt toate scalare.

&rticol 'record(
2ac avem la dispoziie tipurile +;% +=% ... +n putem forma un nou tip cu construcia:
re ord 1 - .1" 2 - .2" &&&& n - .n" end

(e mulime reprezint noul tip) & valoare de tip record subsumeaz n valori% fiecare din tipul +i respectiv. (u alte cuvinte putem asimila un record cu un tuplu ,o mulime ordonat- cu n elemente ,v;% v=%... % vn-% unde > dm un nume tipului de mai sus:
type / ! re ord 1 - .1" 2 - .2" &&& n - .n end"

atunci

sau altfel scris

unde

denot operaia de produs cartezian.


ord

!n tip construit cu re

nu este scalar.

)ot*: pentru deplina rigoare ar trebui s includem n mulimea ? i numele cmpurilor c;% c=% ...% cn. & definiie complet ar fi: produsul cartezian al tipurilor componente%

avnd fiecare component etic3etat cu numele corespunztor. $tic3etarea se poate defini i ea perfect riguros% dar o lsm pe seama cititorului.

+ector 'matrice(
2ac avem un tip oarecare @ i un tip scalar > ,cu excepia lui integer- putem forma din ele un nou tip cu operaia ,dnd i nume tipului-:
type ' ! array 012 of ("

'u este prea complicat de vzut c asta nseamn A 5 @ x @ x ... x @ 5 @A>A unde produsul este luat de cardinal din > ,numrul de elemente al lui >- ori. Aceasta pentru c un array012 of ( este o colecie de attea valori de tipul @ cte valori conine tipul >. !n tip construit cu array nu este scalar. 'ot: (a mai sus% fiecare component a unui element din produsul @ n este etic3etat cu o valoare corespunztoare din >.

,ul-ime
2ac avem un tip scalar > putem forma tipul ,dac > nu are prea multe elemente-:
set of 1

(e valori are acest nou tip) !n element al tipului set elemente din >. 2eci dac avem declaraia:
type / ! set of 1"

of 1

este o mulime format cu

atunci

adic mulimea prilor lui >. !n tip construit cu set nu este scalar.

.i/ier
Biierul este un tip interesant. $ste prima metod de a construi un tip care teoretic vorbind este infinit* ,+oate tipurile de pn acum sunt finite pentru c sunt

construite prin combinaii finite ale unor mulimi finite-. @ine neles c practic i acest tip este finit% dar cu o dimensiune maxim neprecizat. Biind dat un tip + ,care nu e fiier la rndul su- ce face operaia:
file of .

) !n fiier este asemnator unui array% dar are o lungime neprecizat. $l conine la un moment dat < sau ; sau =% ... valori de tipul +. 2eci dac B e definit
type F ! file of ."

atunci ca mulime

unde ) este mulimea numerelor naturale. ,& astfel de operaie aplicat lui + ,reuniunea tuturor puterilor- se numete operaia lui Cleene% i se noteaz cu +D-.

!ecord cu case
Ajungem la o operaie mai puin omogen de combinare a tipurilor. > considerm directiva Pascal:
type /+ 1 ase v1 v2 end ! re .1" 2 - ( - ( ord .2 of 3 - .3 )" 3 - .3 )"

!n model aproximativ este dat de

pentru c o valoare de tip ?( are primele dou cmpuri de tipurile +;% respectiv +=% i un alt cmp dintr unul din tipurile +1 sau +E. :n realitate ?( nu este att de vast% pentru c nu orice combinaie din mulimea indicat este n ?(. (nd cmpul al doilea are valoarea v;% cmpul al treilea nu poate fi de tipul +E* 2eci corect este:

6v;7 este mulimea format din elementul v; aparinnd lui +=. !n astfel de tip nu este scalar.

0ointer
!ltimul mod de derivare a tipurilor n Pascal este prin luarea referinei la ele. !n tip
type ,. ! 4."

are printre valorile sale o valoare special nil% i apoi valori care arat spre valori din tipul +. +ipul P+ este deci izomorf ,corespondent unu la unu- cu tipul + la care se adaug un nou element:

+ipul pointer din Pascal este singurul tip care poate s includ n definiia sa pe sine nsui% ca n:
type ,' ! 4'" ' ! re ord i - 5" n - ,'" end"

Asta d o interesant ""ecuaie## pentru mulimea PA:

'u este nimic contradictoriu n aceast formul* (ele dou mulimi sunt ntr adevr egale% n sensul c fiecare element care se afl n PA este fie nil fie se poate scrie sub forma ,i% pa- unde i .

2e fapt aceasta este definiia ,recursiv- a unei liste ,ai recunoscut probabil tipul PA ca fiind tipul celulei de baz care compune o list simplu nlnuit-: & list ,de tipul :- este sau

lista vid% sau

o valoare de tipul : mpreun cu o list ""mai mic## de acelai tip.

)umele tipurilor
Am folosit adesea n exemplele anterioare nume asociate tipurilor cu ajutorul directivei type. n construcia:
type t ! re ord a - array01&&102 of integer" - #ar" end"

avem dou pari: ;. una care construiete un nou tip


2& 3& 3& 6& 7& re ord a- array01&&102 of integer" - #ar" end type t ! onstru tie"

/. una care i d un nume acestei construcii: Acestea sunt dou operaii distincte. Fai mult% n Pascal tipurile t i re ord a-array01&&102 of integer" - #ar" end sunt n realitate distincte dei au aceeai structur ,sunt formate prin produsele acelorai mulimi: integer ;< x c3ar Asta putem vedea dac scriem:
var 7, 8- t" y- re ord array01&&102 of integer" #ar" end" -! y

Acum 7 i y au tipuri diferite. & operaie de felul 7 ns 7 -! 8.

nu este permis* Putem face

2eci: dou tipuri nu sunt compatibile c3iar dac au aceeai structur. $le trebuie s aib acelai nume% i atunci de fapt sunt o aceeai mulime.

1peratori
.n realitate orice definiie a unui tip ca mulime trebuie s includ i o mulime de operaii pe valorile sale% care iau natere automat odat cu crearea sa. (e este o operaie) Aparent banal ntrebarea nu are un rspuns evident. div este o operaie ntre doi ntregi. (e nseamn asta) $a combin cele dou valori ntregi crora li se aplic pentru a genera una nou. $ste deci o funcie definit astfel:

$a asociaz perec3ii ,a%b- de numere ntregi numrul ""ctul mpririi lui a la b##. este o funcie care nu se poate calcula pentru toate perec3ile de ntregi. 2ac al doilea este < atunci operaia nu are sens. 2eci funcia este parial% adic nu este definit pentru toate valorile posibile ale argumentelor.
div

2e fapt asta sunt toi operatorii n tipuri.

funcii din tipuri ,sau produse carteziene de tipuri-

2e ce sunt tipurile att de legate de operatori) Pentru c crearea unui nou tip prin oricare din operaiile de mai sus d natere n mod automat unor operatori care lucreaz cu valori din acel tip. 2e exemplu definirea unui tip enumerare ca cel uloare de mai sus d natere urmtorilor operatori:
operatori
9 : 9! :! 9: ! su pred ord

domeniu de definiie domeniu de valori culoare x culoare culoare culoare


boolean

culoare
integer

:at mai jos pentru fiecare tip ce operatori are ,dac este fundamental- i cror operatori le d natere:
boolean

operatori

domeniu de definiie domeniu de valori x boolean boolean x boolean boolean


boolean boolean integer

! 9: 9 : 9! :! boolean and or not su pred ord integer boolean boolean boolean boolean

operatori
su pred ord

domeniu de definiie domeniu de valori x integer boolean


integer integer integer integer

! 9: 9 : 9! :! integer

; - < div mod integer odd char integer

x integer integer
boolean

operatori
! 9: 9 : 9! :! su pred ord #r real

domeniu de definiie domeniu de valori


#ar #ar #ar integer

x #ar

boolean #ar integer #ar

operatori
; - = <

domeniu de definiie domeniu de valori


real

x real x real

real boolean

! 9: 9 : 9! :! real

pentru orice tip enumerare


operatori
pred su ! 9: 9 : 9! :! ord

domeniu de definiie domeniu de valori + +x+ + +


boolean integer

pentru orice tip su%range


motenete toate operaiile tipului din care este derivat

pentru orice tip T

= array[S] of B

operatori domeniu de definiie domeniu de valori


02

+x>

,operaia de indexare aplicat astfel t0s2 unde

-.

pentru orice tip mul-ime T


operatori
! 9: 9! :! in ; - < 02

= set of S

domeniu de definiie domeniu de valori +x+ >x+ +x+


boolean boolean

+ +

,discutabil- >

,ultimul este constructorul de mulime aplicat astfel:


s2&&s32

0s, s1,

unde

-.
R = record e1:T1; ... en:Tn; end

pentru orice tip record

operatori domeniu de definiie


&

domeniu de valori

? x mulimea etic3etelor

,ultima este operaia de selecie% care se aplic astfel etic3ete.-

r&e

unde

i e este una din

pentru orice tip pointer 0& = &


operatori domeniu de definiie domeniu de valori PA A

,&peraia de derefereniere% aplicat astfel: pa

unde

.-

pentru tipul fi/ier F

= file of T

operatori domeniu de definiie domeniu de valori B :

,&peraia de scriereGcitire din buffer aplicat astfel: f

unde

.-

.n plus pe lng operaiile descrise anterior o valoare din orice tip poate fi atribuit ,-!- unei variabile de acelai tip ,cu excepia fiierelor-.

0olimorfism /i supra2nc*rcare
2up cum vedei anumii operatori sunt definii pentru mai multe tipuri. 2e exemplu su merge pe orice tip scalar% dnd un rezultat de acelai tip. n realitate i sunt doi operatori diferii dar care au acelai nume. !n astfel de operator% care funcioneaz pe mai multe tipuri de date simultan i a crui comportare depinde de tipul la care se aplic se

numete suprancrcat. Adesea astfel de operatori sunt binevenii% adesea ns pot s dea natere la probleme. 2e exemplu teoretic exist patru operatori H astfel: H : integer x integer I integer H : real x real I real H : integer x real I real H : real x integer I real

+oi acetia sunt suprancrcri ale lui H. ,(a s nu vorbim de folosirea lui H ca reuniune de mulimi-. Putem s aplicm unul i s ne gndim la altul% cum ar fi n urmtorul exemplu:
var i,> - integer" r - real" i -! > ; r"

&ri asta nu se poate% pentru c aici H este presupus a fi H : integer x real I integer care nu exist* $xist un gen special de operatori care seamn cu cei suprancrcai dar care nu sunt suprancrcai ci polimorfici. 2istincia ntre ei nu este cteodat foarte precis. .n Pascal la acest titlu aspir de pild operatorii "" &## ,pentru selecie-% ""02## ,pentru indexare-% etc. 2e ce) Pentru c operatorul 02 este definit pentru orice tipuri /,
/ ! array 012 of ( 02 - / 7 1 -: ( 1, (:

i opereaz la fel independent de natura tipurilor 1 ,scalar- i (% extrgnd din valoarea de tipul / ,un arraJ- pe cea etic3etat cu valoarea dat de tipul 1. Putem spune c 02 este un singur operator% oricare ar fi tipul / format ca mai sus. 02 este atunci un operator polimorfic pentru c lucreaz cu mai multe tipuri dar n exact acelai mod. ,> observm c mai exist un operator notat tot cu 02 pentru construit mulimi% care este tot polimorfic* (ei doi operatori sunt distini dup modul n care se scriu n expresie. Acesta este tot o suprancrcare*-

3losar cu traduceri 2n engle4*


ip de date 'data type( o mulime de valori creia adesea i se adaug un set de operatori i un set de reguli de folosire a operatorilor. 0uternic tipi4at 'strongly typed( 'despre un lim%a5( care nu poate genera erori cauzate de tipuri eronate n timpul execuiei. 1perator 'operator( o operaie ntre mai multe valori dnd ca rezultat o alt valoare; strict vorbind o funcie ,parial- definit pe un produs cartezian de tipuri cu valori ntr un tip. 0olimorfic 'polymorphic( un operator care opereaz la fel asupra mai multor tipuri de date structurate asemnator. $upra2nc*rcat 'o#erloaded( ,despre un operator- n realitate mai muli operatori cu acelai nume% dar care sunt distini dup contextul n care se aplic ,tipurile argumentelor i al rezultatului-. ip scalar 'scalar type( un tip cu un numr finit de elemente asupra crora este fixat o relaie de ordine total ,cu ajutorul unor operatori-.

.ootnotes ... mic-; ?aportul Pascal marc3eaz i tipul real ca fiind scalar% dar din motive de omogenitate noi nu l vom considera astfel% pentru c el nu se comport n nici o privina ca un tip scalar

Un program in limbajul Pascal contine o descriere a actiunilor ce trebuie sa fie executate de calculator si o descriere a datelor ce sint manevrate de aceste actiuni. Actiunile sint descrise prin instructiuni, iar datele prin declaratii sau definitii. Prin tip de date intelegem o multime de valori. Se disting trei categorii de tipuri de date: simple elementare; compuse structurate; de referinta pointer.

In general, tipurile de date sint definite explicit prin declaratii type iar operatiile asociate prin declaratiifunction sau procedure sint specifice programului in care apar. xista insa tipuri de date elementare de interes mai general, numite tipuri predefinite. !alorile unui tip de date sint referite prin variabile sau constante. Anumite constante sint predefinite. type I " #; unde I este un identificator numit numele tipului, iar # specificatia sa. $eclaratia variabilelor este precedata de cuvantul c%eie var , a constantelor de cuvant c%eie const , iar a etic%etelor, de cuvant c%eie label . &umele I poate fi folosit pentru referirea la tipul # in declaratiile ulterioare de variabile sau pentru definirea altor tipuri. xista tipuri de date anonime, definite implicit prin declaratii de variabile de forma: var v ' ( , ).. , v ' n : # ; x: label (, (* ; type bin " * . . ( ; var bit : bin ; cifra : * . . + ; const ,ero " * ; var i : integer ;

etic%etele ( si (* , tipul bin cu elementele * si (, variabila bit de tipul bin, variabila I de tipul predefinit integer precum si constanta zero avand valoarea *. #ipuri de date simple si predefinite. #ipurile simple sant de trei categorii: predefinite, subdomeniu. #ipurile simple se mai numesc si tipuri scalare. enumerare si

xista cinci tipuri de date predefinite: integer , real , boolean , char si text. Tipul integer este o multime de numere intregi cuprinse intre cel mai mic si cel mai mare numar intreg ce se pot repre,enta pe un calculator ga,da al limbajului. xemplu: elementul -(- al tipului integer poate fi repre,entat prin literele -(- sau -(./. 0ie x repre,entarea in ba,a 1 a unui numar intreg . 2epre,entarea in cod complementar a lui x este:

unde ba,a b a sistemului de enumeratie, limitele l si l ale exponentului e si numarul n 3 (. xemplu: b"1, -(145e 5 (1. iar n " 16. lementele tipului real se repre,inta in programe prin literale numerice de formele i . f , i . f s sau i s , eventual precedate de semnul 3 sau - , unde i si f sint numere ,ecimale intregi fara semn repre,entand partea intreaga si respectiv partea fractionara a literalului numeric. xemplu : -*,1- al tipului real poate apare in programe Pascal in una din formele -*.1-, -1- -1, -1-.* -1. In programele Pascal elementele tipului real se presupun a fi scrise in ba,a (*. 2epre,entarea sau memorarea acestora in calculator se face in virgula mobila pe 1 cuvinte 61 biti 7 simpla preci,ie sau pe 8 cuvinte 98 biti 7 dubla preci,ie. Po,itie binara (- prima din stanga, in notatia u,uala a primului cuvant este a semnului, in po,itiile . 7 (8 ale primului cuvant se memorea,a caracteristica exponentului marit cu (14, iar in rest se memorea,a mantisa partea fractionara fara prima po,itie dupa virgula. :aracteristica este: c" (14 3 e " 1 3 (" (******( Primul cuvant al repre,entarii in calculator este * (******( ******, iar al doilea cuvant **************** in ba,a 1. 2epre,entarea octala este 8*1**, respectiv *. In mod analogic, --.* se va repre,enta prin numerele octale (8*98* si *. :el mai mare numar real repre,entabil in simpla preci,ie este *, (((((((((((((((((((((((( 1 ( 1 (* .

:el mai mic numar real po,itiv repre,entabil este: *,( 1 " 1 (* . intervalul ;<, (= in

&umerele reale de forma *,( x )).. x i,part 1 subintervale de lungime >(- <= ?1 " 1 .

Tipul boolean contine doua elemente referite prin constantele predefinite false si true . @peratiile predefinite ale aceluiasi tip and, or , not definesc o structura de algebra booleana . Tipul char este o multime finita si ordonata de caractere ce contine, printre altele, litere, cifre, si caracterul spatiu.

2epre,entarea interna a unui element de acest tip se face pe ( bAte si are ca valoare codul AS:BII al caracterului respectiv. In implementarea Pascal C si r se calculea,a prin instructiunile urmatoare:

C :" a

div b;

r : " a mod b; then

if >a 5 *= and > r 5 D *= begin r : " r 3 abs >A= ; if b 5 * end then

C : " C 3 ( else

C:"C7(

In limbajul standard, C si r se calculea,a prin: C : " a div b; if. >a 5 * = and if b D * r :"a mod b;

> r 5 D * = then then C : " C 7 (

else begin C : " C 3 ( ; r : " r 7 1 E b end EXEMP !" begin Friteln > G 4 div 6 " G , Friteln > G -4 div 6 " G , Friteln >G 4 div -6 "G , Friteln >G -4 div -6 "G , Friteln >G 4 mod 6 "G , Friteln >G -4 mod 6 "G , Friteln #G 4 mod 76="G, Friteln >G -4 mod -6 " G, end. 4 div -4 div 4 div -4 div 4 mod -4 mod 6 =; 6 =; >-6= =; >-6= =; 6 =; 6 =;

4 mod >-6= =; -4 mod >-6= =;

$peratori rationali u,uali " , 5 D , 5 , 5" , D, D" conduc la re,ultate de tip boolean. @peran,ii pot fi de tip integer prin repre,entari binare bit cu bit. x: not ( este 71 , 9 or 6 este . , 9 and 6 este 1 . Pentru tipurile integer , c%ar si boolean exista functiile succ >succesor= si pred >predecesor=. Pred >c= " c%r >ord >c= 7(= si succ >c= " c%r >ord >c= 3 (=. @peratii si functii predefinite asociate. x: var a : integer ; b : real ; c : c%ar ; d : boolean ; begin c:"GxG; a:"(; b : " (.- ; a : " a 3 trunc > -b= 3 round > b= ; a : " a mod a div a 3 ord > G x G= ; b : " succ >a= 3 b H b - pred > succ >a= =; c : " c%r >ord >c= =; d : " > b 5 " b = and true ; Frite > a , b , c , d = end.

Tipul de date integer


4e oloseIte atunci cnd se lucrea! cu numere naturale cuprinse n intervalul (-%?@AB. %?@A@). 1n momentul n care programul nu necesit numere de ordinul !ecilor de mii, putem olosi tipul b(te care este cuprins n intervalul (7. ?--). *ai mare decat inte er este )*r&, care poate stoca numere ntre 7 si A-.-%-. Pentru programe care olosesc numere mai mari decat ordinul !ecilor de mii naturale, este recomandat sa se oloseasca tipul l*n int care poate stoca, (?.<C@.CB%.ACB. ?.<C@.CB%.AC@). 4puneam ceva mai devreme ca n momentul n care compilatorul vede o variabila de init i re!erva automat un loc n memorie. +t de mare este locul n memorie; 'epinde de tipul stocat. 'e e>emplu, tipulb(te este stocat, dupa cum spune Ii numele, pe un byte sau un octet. Un octet la randul su este alctuit din B biJi. Dit-ul poate stoca doar ci rele < si 7. *ai #os, vedem un tabel n care vom pune tipurile importante de date Ii dimensiunile sale.
Tipul Marime *cteti Marime +b(te,biti Dyte < B 1nteger ? <A Iord Jongint ? C <A %? .al*are maxima ?EB F < 2G ?-Hu contine ? octeti plini. ?E<A F < 2G A-.-%Hu contine C octeti i>i. /nter'al (7. ?--) (-%?.@AB. %?@A@) (7. A-.-%-) (-?.<C@.CB%.ACB. ?.<C@.CB%.AC@)

Acum, cind am v!ut care-s dimensiunile pe care le ocupa n memorie, s trecem mai departe Ii s a lm cum putem

stoca o variabil, cum o putem a iIa, atribuire, etc. Rea&ln ,i 0riteln *ulte programe pe care le vom concepe vor interacJiona cu utili!atorul programului. +9iar Ii la un program de tipul, aria unui patrat vom KvorbiL cu utili!atorul programului cerndu-i valoarea laturii patratului. Pentru a putea primi datele corecte, trebuie sa acem pe persoana cu care KvorbimL s nteleag ce dorim. 1n Pascal, avem instructiunea )rite. Tot ce este ntre parante!e va i a iIat undeva. Pentru nceput este bine sa ItiJi c )rite a iIea! mesa#e pe ecranul calculatorului. Atunci cnd vrem s a iIm un te>t vom pune tot Iirul de caractere ntre ? semne apostro . Pentru programul nostru de calculat aria patratului, vom a isa K'ati latura patratuluiL. +um vom ace asta ; )rite+12ati latura patratului3-4 Trebuie reJinut aptul c ntotdeauna dupa instrucJiunea )rite trebuie s punem semnul punct Ii virgula 4 . Acum avem nevoie de valoarea ntrodus de la tastatur. Aceasta valoare o vom stoca ntr-o variabil numita lat. +a s nmaga!inm valoarea ntrodus de utli!ator n variabila lat, avem nevoie de instrucJiunea rea&. +are i spune compilatorului, citeIte ce s-a scris de la tastatura, iar i momentul n care s-a apasat tasta Enter toat linia

ce s-a scris de ctre utli!ator este stocata n variabila pe care i-o indicm noi instrucJiunii rea&. rea&+lat-4 AIadar, dupa ce a ost a iIat mesa#ul K'aJi latura patratuluiL, compilatorul gaseIte instrucJiunea rea& Ii aIteapt pn este ntrodus de la tastatur o valoare Ii se apas tasta Enter. +nd s-a apsat tasta Enter , tot ce s-a scris dupa mesa#ul de mai sus se stoc9ea! n variabila lat. 'ac variabila lat a ost declarat ca iind detip inte er Ii noi introducem de la tastatur altceva decat un numar intreg, vom primi o eroare. Avem, deci, valoarea laturii patratului stocata n variabila lat. Pentru ca programul nostru sa a ise!e aria patratului, trebuie s o calculam. Mormula patratului dupa cum stim este latura N latura . 'eci, vom avea nevoie de o alta variabila numita aria care s stoc9e!e valoarea ariei. Asadar, n variabila aria trebuie sa punem valoarea produsului latura ori latura. Oom avea urmatoarea linie, aria :5 lat 6 lat4 'upa cum observam avem pentru atribuire :5 . Jinia de mai sus se traduce in limba# natural cam aIa, in variabila aria stocam valoarea produsului dintre latura ori latura sau variabilei aria i este atribuit patratul dintre laturi. +e ne mai rmne s acem, trebuie doar s a iIm aria pe care tocmai am calculat-o. 'esigur, vom a isa cu a#utorul instructiunii )rite.

)rite+1Aria patratului e,te 1, aria-4 1ntre parante!e vedem c avem o porJiune ntre apostro uri, o virgula Ii un cuvant. +um va interpreta compilatorul; Trebuie s a iIe! un mesa# -G PAria patratului este Q, apoi ntlneIte virgula Ii spune c urmea! altceva dect un Iir de caractere pe care l-am introdus noi manual, n ca!ul nostru o variabil Ii a iIea! Ii valoarea variabilei aria. 'eci, mesa#ul inal va i PAria patratului este <AR. <A va a isa daca valoarea ntrodus de la tastatura va i C. 4a scriem acum programul inal, pr* ram 'ar be in )riteln+12ati rea&ln+lat-4 aria )rite+1Aria en&8 lat, aria: latura :5 patratului lat e,te 6 1, arie7patrat4 inte er4 patratului3-4 lat4 aria-4

Asupra valorilor de tipul inte er se pot ace urmtoarele operaJii, 1peratori "omeniu de defini-ie "omeniu de #alori ! 9: 9 : 9! :! integer x integer boolean su pred integer integer ord ; - < div mod integer
integer

integer integer

x integer

odd

integer

boolean

Concept de date
Srice algoritm prime$te date de intrare, le prelucrea! $i obine date de ie$ire. "n iecare ca!, datele de intrare, datele intermediare - cele create n timpul prelucrrii - $i datele de ie$ire sunt structurate (organi!ate) ntr-un anumit el care corespunde intrrii, necesitilor de prelucrare sau a celor de utili!are ulterioar. Hotiunea de date are ntelesul de in ormatii urni!ate unui program n scopul obJinerii de noi in ormaJii. "n general, datele se ntroduc sub orma de te>t. Prelucrrile cele mai simple ale acestor in ormatii sunt repre!entate de operatiile de inite asupra lor. S caracteristic important a datelor este tipul acestora.

'e iniJie, Pr* ramul p*ate c*n%ine anumite &ate a c9r*r 'al*are nu ,e m*&i:ica, numite c*n,tante8 +onstantele n limba#ul Pascal sunt de A tipuri, T constante ntregi. T constante reale. T constante caracter. T constante sir de caractere. T constante simbolice. T constante logice. +onstantele ntregi sunt numere ntregi ce pot i repre!entate n ba!a <7 sau <A. +onstantele reale sunt numere reale cuprinse ntre %.CN<7-C%-? si <.<N<7CU%?. +onstantele caracter, orice limba# de programare contine un set de caractere propriu. 4etul de caractere olosit de limba#ul Pascal se numeste setul A4+11 si contine litere, ci re si caractere speciale. +onstantele sir de caracter sunt sirurile de caractere de orice el din setul A4+11, care se pot scrie n ? orme. +onstantele simbolice sunt numele care se pot atribui unor valoriconstante de orice tip. +onstantele logice, - T=U8 va repre!inta valoarea de adevar A'8OV=AT. - MAJ48 W repre!inta valoarea de adevar MAJ4. +onstantele se declara cu a#utorul cuvantul c9eie c*n,t8 const nume 2 valoare. Exemplu: c*n,t P/ 5 38$;4

'e obicei, constantele se notea!a cu litere mari pentru a se di erentia de variabile. 8>ista o categorie de date a cror valoare trebuie modi icata n cadrul programului. Acest lucru se reali!ea!a cu a#utorul variabilelor. 'e iniJie, .ariabila e,te * entitate c9reia i ,-a a,*ciat un i&enti:icat*r &i care p*ate lua 'al*ri c*re,pun<at*are unui anumit tip8 Oariabilele se declara cu a#utorul cuvantul c9eie 'ar. var identi icator, tip. Exemplu: 'ar x: inte er4 +onceptul de tip de date este unul din conceptele undamentale ale programrii. 1n matematic, stiint, te9nic, economie Ii alte domenii ale activitJii umane se lucrea! cu date, care sunt numere ntregi, numere reale, Iiruri de caractere, valori logice sau structuri de date construite cu a#utorul acestora. 4e admite c, att mulJimea numerelor ntregi, ct Ii cea a numerelor reale, sunt mulJimi in inite. 1n programare, se are ns n vedere c este necesar s se respecte anumite restricJii, legate de modul de repre!entare a datelor n calculator. 4 considerm, de e>emplu, mulJimea numerelor ntregi. 1n matematic, aceasta este o mulJime in init. 1n calculator nsa, numarul ntreg se repre!int ntr-o !on de memorie de lungime init, de e>emplu C octeJi (%? biJi), ceeace nseamna c :multimea numerelor de tip ntreg:, care pot i ast el repre!entate, este init, conJinnd ? la puterea %? valori. Trebuie avute n vedere, de asemenea,

restricJiile privind operaJiile care pot i e ectuate pe calculator asupra acestei multimi de valori. =*nceptul &e &at9 n limba#ul PA4+AJ presupune, <. iecare mrime (variabil sau constant) ntr-un program n mod obligatoriu se asocia! cu un anumit tip de date. ?. tipul unei variabile de ineIte mulJimea de valori Ii operaJii care pot i e ectuate cu aceste valori. %. e>ist tipuri de date de interes general, di initia carora se consider cunoscuta, inte er, real, char (caracter), b**lean (logic). C. pe ba!a tipurilor cunoscute, programatorul poate crea tipuri noi.

Tipul de date real


'atele de tip real iau valori reale aparinnd domeniului de valori corespun!tor tipului respectiv. 4pre deosebire de operaiile cu valori ntregi, care reproduc e>act re!ultatele din aritmetica ntregilor, operaiile cu date de tip real produc re!ultate apro>imative, datorate erorilor de rotun#ire generate de numrul init de ci re semni icative olosite n repre!entarea valorilor reale. Tipul real X constituie o clas separat n care nu se poate pune n eviden o po!iie a unui element n mulime, nici succesorul sau predecesorul unui element. 8ste ormat dintr-o submulime a numerelor reale preci!at de cea mai mic $i cea mai mare valoare repre!entat n notaie n virgul mobil.

"n tabelul de mai #os sunt pre!entate tipurile de date real si e>tensiile sale. Tip .al*area .al*area Numar Numar ci:re Minima Maxima *cteti ,emni:icati'e >ingle ?eal 2ouble $xtended (omp ;.0$ E0 =.L$ 1L 0.<$ 1=E =/13; 1.E$1K ;.8$1K ;.8$1<K =/1 ; E / K ;< K 8K ;; ;= ;0 ;/ ;L =< ;K ;L

1.E$ EL1= ;.;$EL1=

Asupra valorilor de tip real se pot e ectua operaJiile, 1peratori "omeniu de defini-ie "omeniu de #alori ; - = < real real x real ! 9: 9 : 9! :!
real

x real

boolean

Oariabilele reale sunt caracteri!ate de, domeniul de valori, preci!ie, precum Ii de repre!entare. Speratorii care pot i utili!aJi n cone>iune cu tipul real sunt, 3. -. N. Y Ii repre!int operatiile de adunare, scdere, nmulJire Ii mprJire."ntr-o e>presie reala pot e>ista valori ntregi. 'ac unul dintre operan!i este real, atunci Ii cellalt opernd, va i convertit n mod automat, la tipul real. Oariabila creia i se atribuie re!ultatul unei e>presii reale trebuie sa ie de tip real. Speratorul 0Y0 ortea!a ambii operan!i la tipul real. Programatorul are obligatia de a asigura o preci!ie re!onabil pentru calculele ce intervin n programele PA4+AJ. n acest scop va urmri re!ultatele intermediare.

Pentru datele de tip numeric (real) pot i considerate o serie de unctii speci ice, trunc, round, abs, sZr, sZrt etc.. Ja a isarea valorilor reale trebuie s avem n vedere att preci!ia, ct Ii Iablonul de editare. =ealii nu pot i utili!ati pentru, inde>area tablouri, de inirea tipurilor subdomeniu, mulJime, n enunturile MS= Ii +A48.

Tipul de date boolean

Oariabilele de tip b**lean (boolean vine de la numele matematicianului [eorge Doole) pot avea una din valorile prede inite, true(adevarat) Ii :al,e ( als). *odul de repre!entare n calculator este (de regul) !pentru alse Ii $ pentru true ( alse \ true). 8>presiile booleene, precum ! G y, intervin mult mai des n programele PA4+AJ dec]t variabilele booleene declarate n cadrul acestor programe. Hu putine sunt ca!urile c]nd o valoare logic, re!ultat n urma evaluarii unor e>presii booleene urmea! sa ie olosit pentru di erite teste, ca n programul urmator.

4a scriem acum programul inal,

pr* ram te,t4 'ar be in )rite +3/ntr*&uceti rea&ln+'ar,ta-4 i: 'ar,ta #5 el,e )riteln+maj*r-4 en&8 'ar,ta $>

maj*r:b**lean4 'ar,ta:inte er4 &umnea'*a,tra: then 3-4

maj*r:5true maj*r:5:al,e4

=e!ultatele e>ecutiei programului,

Introduceti varsta dumneavoastra: 14... false Introduceti varsta dumneavoastra: 18 true Introduceti varsta dumneavoastra: 22 true "n acest program, ma#or a ost declarat ca variabil de tip b**lean, prin enunJul, 'ar maj*r:b**lean4 Asupra valorilor de tipul urmtoarele operaJii, Operat*ri ! 9: 9 : 9! :!

b**lean se pot

ace

2*meniu &e &e:ini?ie


boolean

2*meniu &e 'al*ri boolean

> boolean

and or not su pred ord

boolean

> boolean boolean boolean boolean

boolean boolean boolean integer

Tipul de date char


Tipul +^A= repre!int o mulJime init Ii ordonat de caractere din setul A4+11 ( American 4tandard +ode or 1n ormation 1nterc9ange ) e>tins.

4 scriem acum programul , pr* ram caractere A@=//4 'ar i, j:inte er4 be in :*r i:5$ t* A &* )rite+i:%,B:B,chr+i-:%,B4B-4 )riteln4 :*r i:5$; t* %3 &* )rite+i:3,B:B,chr+i-:%,B4B-4 )riteln4 rea&ln4 :*r i:5% t* %; &* :*r j:5$!6iC; t* $!6iC$3 &* )rite+j:3,B:B,chr+j-:%,B4B-4 )riteln4 en&4 :*r i:5%D; t* %DD &* )rite+i:3,B:B,chr+i-:%,B4B-4 )riteln4rea&ln4 en&8 Asupra valorilor de tipul operaJii, 1peratori

char se pot

ace urmtoarele

"omeniu de defini-ie "omeniu de #alori

! 9: 9 : 9! :! su pred ord #r

#ar

x #ar #ar #ar

boolean #ar integer #ar

integer

Miecare caracter are o anumit repre!entare intern -valoarea caracterului Ii o anumit po!iJie. 'in punct de vedere e>tern o valoare de tip char se repre!int prin caracterul respectiv inclus ntre apostro uri. Po!iJia sau numrul de ordine al unui caracter se obJine cu uncJia OR2. MuncJia invers este =ER. 2e exemplu: OR2+BAB- :5 AD4 =ER+AD- :5 BAB4 MuncJiile standard PRE2 Ii @F== se de inesc ast el, PRE2+c- :5 =ER+OR2+c--$-4 @F==+c- :5 =ER+OR2+c-C$-4 +ei A operatori relaJionali se pot se pot aplica pentru a compara operan!i de tip char obt inndu-se re!ultate b**leene.

También podría gustarte