Sunteți pe pagina 1din 22

1.2.

2 Conceptul de tip de data abstract ( TDA)

 Un TDA poate fi definit drept o asociere intre:


- un model matematic
- un set de operatori definit pentru valorile manipulate de catre modelul
matematic.
Ex. Tipul de date abstract multime.
 O procedura sau o functie este un element fundamental de programare, avand
caracteristicile:
1. Generalizeaza notiunea de operator
2. Incapsuleaza elementele specifice operatorului definit prin procedura sau
functie; incapsularea are ca rezultat definirea procedurii sau functiei intr-un
singur loc in program ( incapsulare cod)
 Un TDA generalizeaza notiunea de tip de data primitiv si incapsuleaza
elementele specifice definitiei sale, respectiv incapsuleaza alaturi de
structura de date corespunzatoare modelului matematic si procedurile sau
functiile care materializeaza operatorii.

SDA curs 2 I INFO 2015/2016 1


 MM <-> structura de date
 Set de operatori <-> proceduri sau functii

 Prin definirea TDA se realizeaza incapsularea tipurilor de date.

 In urma definirii, un TDA poate fi tratat in continuare ca si un tip


primitiv de data, utilizatorul nemafiind preocupat de maniera de
proiectare a tipului de data, ci doar de maniera de acces ( interfata).
 TDA permit de asemenea o abordare ierarhica in construirea tipurilor
structurate abstracte.
Ex. TDA lista

SDA curs 2 I INFO 2015/2016 2


Avantajele utilizarii TDA

 In urma definirii unui TDA, toate prelucrarile se vor realiza in termenii


operatorilor definiti asupra acestui tip

 Indiferent de maniera concreta de implementare a TDA, forma


operatorilor, respectiv interfata acestora cu utilizatorul ramane
nemodificata; permite modificarea cu usurinta a implementarii cu
conditia pastrarii prototipului functiei asociata operatorului

 Nu exista nici o limita asupra numarului de operatii care pot fi aplicate


instantelor unui model matematic precizat, cu specificatia ca fiecare
set de operatii defineste si se refera la un TDA distinct

SDA curs 2 I INFO 2015/2016 3


Implementarea unui TDA

 Prin implementarea unui TDA se intelege translatarea ( exprimarea ) sa in


termenii unui limbaj de programare. Aceasta presupune:
1. Definirea structurii de date care materializeaza modelul matematic al
TDA (prin declaratii)
2. Scrierea procedurilor ( functiilor) care implementeaza operatorii
precizati in definirea TDA, utilizand notiunile limbajului de programare sau
operatorii definiti deja.

 Un TDA se implementeaza pornind de la tipurile de baza specifice limbajului


de programare si utilizand facilitatile de structurare puse la dispozitie de limbaj

 Prin implementare un TDA devine tip de data ( TD)


 Ex. : Colectie

SDA curs 2 I INFO 2015/2016 4


 TD sunt utilizate pentru declararea unor variabile de tipul respectiv. Aceste
variabile se numesc instante ale tipului de data, iar procesul de declarare a
variabilelor se numeste instantiere.

 Variabila un element sintactic precizat printr-un nume simbolic, caruia i se


asociaza o zona de memorie, al carei continut il reprezinta valoarea curenta a
variabilei. Aceasta definitie corespunde uzual variabilelor apartinand unor tipuri
de date nestructurate
 Structura de date - o colectie specifica de variabile, apartinand unuia sau mai
multor tipuri de date, asociate in diverse moduri, cu scopul de a facilita accesul,
prelucrarea si relatiile dintre entitatile constitutive.

 TDAimplementareTDinstantieredate elementare sau structura de date

SDA curs 2 I INFO 2015/2016 5


1.3 Tipuri primitive nestructurate
1.3.1 Tipul enumerare

 Tipul enumerare ofera o maniera de a utiliza in cadrul programelor


valori numerice, respectiv numere intregi, in locul notiunilor abstracte

 Tipul enumerare este un tip nestructurat , definit de utilizator prin


enumerarea tuturor componentelor sale.
 Numarul valorilor distincte apartinand unui tip de data T reprezinta
cardinalitatea tipului T. Uzual cardinalitatea este utilizata drept o
masura a cantitatii de memorie necesara reprezentarii tipului T.

 Se utlizeaza notatia : card( T)

 Definirea unui astfel de tip de catre utilizator prin enumerare, introduce


nu numai un nou identificator de tip, ci in acelasi timp introduce
identificatorii care precizeaza valorile noului tip.

SDA curs 2 I INFO 2015/2016 6


 Tipul enum in C este un tip scalar, ale carui constante sunt asimilate
cu numerele intregi atribuite succesiv in timpul procesului de declarare
a tipului. Exceptie o reprezinta situatia in care utilizatorul face atribuire
explicit.

 Definirea de mai sus premite compilatorului sa verifice legalitatea


utilizarii tipului in program, inca din faza de compilare.
 Operatori:
- atribuire
- comparatie
- succesor, predecesor
- transfer de tip( fortare de tip) conversia uzuala este cea intre tipul
enumerare si intreg;
utilizare conversie intreg enum: nume_tip( valoare_intreaga)

SDA curs 2 I INFO 2015/2016 7


1.3.2 Tipuri primitive standard ( predefinite)

 Fac parte din categoria tipurilor nestructurate, fiind numite


standard deoarece sunt implementate direct prin caracteristicile
hardware ale sistemului. ( intreg, real, boolean, caracter)
 Tipul intreg
este format din submultimea reprezentabila a numerelor intregi si are
drept suport hard aritmetica in virgula fixa
- operatori: atribuire, comparare, operatori aritmetici(+, -, x, /, %); toti
operatori sunt interni

m-n < (m DIV n) * n <= m


( m DIV n) * n + (m MOD n)= m

SDA curs 2 I INFO 2015/2016 8


TDA Intreg

 I MM o multime de elemente scalare cu valori in multimea numerelor


intregi {..,-2,-1, 0 ,1,2,}

 II Notatii- i,j,k- variabile intregi;inz intreg diferit de zero; inn- intreg


non-negativ; e- valoare intreaga; b valoare booleana

 III Operatori:
AtribuireIntregi(i,e)
AdunareIntregi (i,j)  k
ScadereIntregi(i,j)  k
InmultireIntregi(i,j)  k
ImpartireIntregi(i,inz)  k
Modulo(i,inz)  inn
EgalZero(i)  b
MaiMareCaZero(i)  b
Intr-un limbaj de programare implementarea acestor operatori se
realizeaza in mod direct
SDA curs 2 I INFO 2015/2016 9
TDA real

 Implementeaza o submultime reprezentabila a numerelor reale


 Are drept suport hardware reprezentarea numerelor reale in virgula mobila
 Operatori: +, -, x, /
 Pentru multimea numerelor reale caculele se realizeaza cu o anumita
aproximatie , functie de lungimea zonei de memorie utilizata in reprezentarea
valorilor reale ( rotunjiri cauzate de efectuarea calculelor cu un numar finit de
zecimale)
 Operatiile care conduc la valori care depasesc domeniul de reprezentabilitate al
implementarii conduc la erori
 Implementarea operatorilor se realizeaza direct prin constructii sintactice ale
limbajelor de programare

 Uzual sunt mai multe categorii de tipuri intregi ( cu semn, fara, scurt, lung),
respectiiv mai multe tipuri reale ( normal, dublu, lung), functie de numarul de
cifre binare utilizate in reprezentare

SDA curs 2 I INFO 2015/2016 10


Tipul Boolean

 Implementeaza valorile logice standard Adevarat si Fals


 In limbajul C acest tip lipseste fiind substituit de valorile intregi :
1 sau diferit de 0 adevarat
0 fals
Operatori specifici : operatorii logici (operatori omogeni, interni)
conjunctie AND, &&
reuniune OR, ||
negatie NOT, !
 Operatorul comparatie aplicat asupra valorilor oricarui tip de date
conduce la rezultate de tip boolean ; poate fi atribuit unei variabile de
tip logic, sau poate fi utilizat ca operand al unui operator logic intr-o
expresie booleana

SDA curs 2 I INFO 2015/2016 11


Tipul caracter

 Multimea de caractere reprezentabile de regula la un dispozitiv de afisare


(multimea valorilor depinde de dispozitivul de iesire)
 Au fost stabilite diverse conventii de codificare a caracterelor:
ISO ( International Standard Organisation)
ASCII (American Standard Code for Information Interchange)
 Uzual se utilizeaza valori intregi fara semn in domeniul [0, 255], reprezentabile
pe un octet
 Codurile sunt grupate (submultimi ordonate si coerente ) pe litere mari, mici,
cifre, semne de punctuatie, alte caractere reprezentabile, etc; principiul de
codificare permite determinarea apartenentei unui caracter la una dintre
submultimi
 Unele limbaje de programare pun la dispozitie functii de transfer intre tipul
intreg si tipul caracter

 TDA intreg, real, boolean, caracter sunt definite prin limbaj, pentru utilizare fiind
necesara doar instantierea (se incadreaza in categoria tipurilor de date)

SDA curs 2 I INFO 2015/2016 12


1.3.3 Tipul subdomeniu

 Precizeaza un domeniu restrans in care poate lua valori un anumit tip


 Se defineste in raport cu un tip deja existent, numit tip scalar asociat

TYPE TipSubdomeniu= minmax;


TYPE AN=20002010;
x:=2012;

 Implementarea tipului subdomeniu impune verificarea de catre


compilator a legalitatii atribuirilor; in cazul atribuirii unor variabile,
verificarile se produc doar in timpul executiei programului. Din acest
motiv scade eficienta codului generat, dar creste siguranta executiei.

SDA curs 2 I INFO 2015/2016 13


1.4 Tipuri structurate
1.4.1 Structura tablou. TDA tablou

 Cosntructia acestui tip structurat se bazeaza pe facilitatile hard ale sistemului de


calcul , respectiv pe mecanismul de adresare indexata.
 Tabloul este o structura de date omogena ale carei componente apartin aceluiasi
tip constitutiv, numit tip de baza.
 Este o structura cu acces direct (random acces) , deoarece toate elementele
sale sunt direct si in mod egal accesibile.
 Tabloul este o structura statica, cu dimensiune si forma fixa.
 Indicii de acces la elementele tabloului apartin unui tip scalar; indicii
selecteaza pozitional componenta dorita
 Definirea unui tip tablou precizeaza atat tipul de baza cat si tipul indice (implicit
sau explicit)
TYPE TipTablou= ARRAY [ TipIndice] OF TipElement;
VAR tablou:TipTablou; //instantiere prin declararea unei variabile
 Operatori :constructor, selector, atribuire

SDA curs 2 I INFO 2015/2016 14


TDA tablou

 I MM
- secventa de elemente de acelasi tip
- indicele asociat fiecarei componente apartine unui tip ordinal finit
- exista o corespondenta biunivoca intre valoarea indicelui si
componentele tabloului

II Notatii: TipElement, ; a- tablou unidimensional; i- TipIndice; e


valoare apartinand multimii TipElement

III Operatori:
- DepuneTablou (a,i, e);
- TipElement FurnizeazaTablou (a, i); FurnizeazaTablou(a, i, e);

SDA curs 2 I INFO 2015/2016 15


Prelucrarea tablourilor

 Maniera obisnuita de prelucrare a a tablourilor este prin prelucrarea


fiecarui element in parte. Desi modificarea selectiva schimba valoarea
unei singure componente, d. p. d. v conceptual a fost schimbata
intreaga structura de date. In anumite situatii tablourile por fi
prelucrate in intregul lor ca si structuri ( cazul atribuirii tablourilor
incadrate aceluiasi tip)

 Deoarece indicele apartine unui tip scalar, el poate fi inlocuit cu asa-


numitele expresii de indice, a caror valoare se determina in mod
dinamic in timpul executiei. ( facilitate, dar si sursa de erori)

SDA curs 2 I INFO 2015/2016 16


Ordonarea tablourilor

 Daca tipul constitutiv al tabloului este la randul sau un tip ordonat, pe tipul
tabloului poate fi definita o relatie de ordonare intr-o maniera mai complexa
 Ordonarea naturala a doua tablouri este determinata de relatia intre primele
componente diferite, corespunzatoare aceluiasi indice
 Fiind date 2 tablouri x si y, relatia x<y este corecta daca si numai daca exista un
indice k astfel incat x[k]<y[k] si x[i]=y[i] pentru orice i<k.
 Acest tip de ordonarea a tablourilor se numeste ordonare lexicografica, fiind
utilizata in ordonarea sirurilor de caractere
 card(TipTablou)=card(TipElement) card(TipIndice)
 TipElement poate fi la randul sau un tip structurat, spre exemplu un tablou .
Rezulta astfel tipul tablou bidimensional; accesul la un element al tabloului
bidimensional se face utilizand un numar de indici egal cu dimensiunea
tabloului

SDA curs 2 I INFO 2015/2016 17


1.4.2 Tehnici de cautare in tablouri

 Cautarea ( regasirea informatiei) este o operatie frecventa, motiv pentru


care este una dintre tehnicile cele mai abordate si studiate in programare.
Viteza cu care se efectueaza aceasta operatie intr-o baza de date de
dimensiuni mari, influenteaza in mare masura eficienta unei aplicatii.
 Cautarea presupune efectuarea unor operatii de comparatie si de aceea
uneori elementele tabloului se identifica printr-o cheie, ce apartine unui tip
scalar. Cheia poate fi constituita dintr-un singur camp sau o combinatie de
campuri.
 Uzual cautarea returneaza indicele elementului din tablou pentru care
cheia coincide cu cheia de cautare data, respectiv indicele elementului a carui
valoare coincide cu valoarea de cautat data, in cazul in care nu se utilizeaza o
cheie pentru identificare.

SDA curs 2 I INFO 2015/2016 18


#define M 20
#define MAX 100
typedef struct {
char tab[M];
int cheie;
} record;
typedef record rec_tab[MAX];

rec_tab[i].cheie==x

SDA curs 2 I INFO 2015/2016 19


Tehnica cautarii liniare. Metoda fanionului.

 Daca nu avem nici o informatie apriorica asupra tabloului, unica metoda de


cautare este parcurgerea secventiala (traversarea) tabloului, realizata intr-
o maniera ordonata prin incrementarea (decrementarea) indicelui. Rezulta
astfel ceea ce se numeste cautare liniara.
 Se considera un tablou unidimensional a in care se executa cautarea
elementului x
#define N
typedef TipElement;
TipElement a[N];
TipElement x;
 Cautarea se poate incheia fie cu gasirea elementului de valoarea x si
eventuala returnare a indicelui ( a[i]==x), fie cu negasirea elementului x si
depasirea tabloului ( i>N)

SDA curs 2 I INFO 2015/2016 20


 Considerand ca indicele tabloului apartine unui tip subdomeniu cu
valori cuprinse intre 1N, rezulta secventa de cautare liniara:
int i=1;
while ( (i<N) && (a[i]!=x))i++;
if( a[i]!= x) printf( nu exista elementul cautat);
else printf(elem cautat este pe poz %d, i);
 invariant : conditia care daca este indeplinita , permite ramanerea in
ciclu ( respectiv reluarea ciclului)
(1 <= i< N) && (AK: 1<=k < i : a[k] != x)
 conditia de terminare:
((i = = N) || ( a[i] == x)) && (AK : 1<=k < i : a[k] != x)

SDA curs 2 I INFO 2015/2016 21


Aprecierea performantelor cautarii liniare

 Criteriul: numarul de comparatii efectuate pana la gasirea elementului


cautat
 Caz particular: x pe pozitia i

SDA curs 2 I INFO 2015/2016 22

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