Documente Academic
Documente Profesional
Documente Cultură
I. INTRODUCERE
o multime de valori;
simple - descriu date care apartin unor multimi care nu sunt rezultate ca produs
cartezian al altor multimi. Exemplu: integer.
Exemple:
1. type rational=record
p,q:integer;
end
Prin tipul de mai sus se descrie structura unei variabile capabila sa retina numere rationale.
Fie B multimea valorilor care pot fi retinute de tipul real. Atunci o variabila de tip vector poate
retine la un moment dat un element al multimii:
BxBxxB
de n ori
Practica impune utilizarea unor structuri ale datelor de o mare varietate, care nu
se suprapun intotdeauna peste tipurile care pot fi descrise prin limbaj, de obicei
obtinandu-se prin combinarea celor elementare .
Prin structura de date vom intelege un asamblu de date caracterizat prin relatiile
existente intre ele si a operatiilor care pot fi efectuate cu datele respective.
Vom numi nod o variabila de un tip oarecare. De obicei, acest tip este structurat. Dupa
caz, termenul nod poate fi inlocuit cu articol, inregistrare sau entitate.
In cele mai multe cazuri, 'ansamblul de date' care alcatuieste structura e alcatuit dintr-o multime cu un numar variabil de noduri.
- inregistrare
- multime
- fisiere
- structura de tip lista ( lista simplu inlantuita, dublu inlantuita, circulara, stiva, coada )
- structura de tip arbore: arbori binari, arbori binari de cautare, arbori oarecare.
- grafuri neorientate
- arbori
- grafuri orientate
Observatie :
1. Structura de tip tablou se foloseste pentru pastrarea mai multor date de acelasi
tip.
Un tablou este o multime finita si ordonata de elemente de acelasi tip caruia i se asociaza un
nume. Un element al multimii este identificat prin intermediul numelui tabloului si a valorii
unuia sau mai multor indici (tablourile putand fi unidimensionale sau multidimensionale) cu
valori in subdomenii ale tipurilor ordinale (integer, char, boolean).
Pentru fiecare tip de date tablou utilizat intr-un program Pascal trebuie specificat
domeniul de valori pentru fiecare indice si tipul elementelor tabloului (denumit si tip de baza).
unde tip_element este tipul de baza iar lista_domenii_indici este o lista formata din
elemente de forma : valoare minima ..valoare maxima sau numele unui tip
ordinal. Prin tipul indicelui se fixeaza implicit si numarul componentelor tabloului.
O astfel de descriere a tipului tablou poate sa apara intr-o declaratie explicita de tip
(sectiunea TYPE). De exemplu declaratia:
var A : vector; ,
reprezinta declaratia unei variabile de tipul vector care s-a definit mai sus.
Limbajul Pascal permite si declaratii de tipuri anonime, cand declaratia tipului tablou se
face direct in sectiunea VAR fara a mai atribui un nume tipului respectiv. De exemplu,
declaratia de mai sus se poate face si astfel:
Elementele unei variabile de tip tablou sunt tratate ca si variabile avand tipul
de baza.
Un element al unei variabile de tip tablou este identificat prin: nume[lista_valori_indic
i] unde nume este numele variabilei de tip tablou iarlista_valori_indici contine cate o
expresie pentru fiecare indice, avand tipul compatibil cu cel al indicelui tabloului. De exemplu,
elementele tabloului A se pot identifica prin A[1], A[2], , A[10].
Ex: -notele unui student la cele 6 obiecte (datele sunt de acelasi tip )
7 10 9 10 4 10 ta
blou unidimensional
Note ( tablou )
7 10 9 10 4 10
pozitie
b. Cum am defini o structura care sa pastreze valorile reale inregistrate intr-un proces.?
Tabloul m fiind considerat o matrice, m[i,j] este elementul situat pe linia i si coloana j.
Prin generalizare daca in cazul tabloului m si tip_element este tot un tablou se ajunge
la un tablou cu trei dimensiuni si prin generalizare la un tablou cu n dimensiuni care se
declara in felul urmator:
Exemplu:
1 2 3 4 5 6
coloane
1 7 10 9 10 4 5
2 10 9 10 10 5 5
3 7 7 8 5 6 6
Note[2, 4]
linii
linie/coloana
Exemplu:
VAR X: Vector;
N: Byte;
Vom prezenta cele mai importante operatii cu aceasta structura. In practica, aceste
operatii se combina pentru a rezolva cerintele problemei :
VAR i : Byte;
BEGIN
Readln(n);
FOR i:=1 TO N DO
BEGIN
Readln(X[i]);
END;
END;
b. Afisarea vectorului :
VAR i: Byte ;
BEGIN
Write(Vectorul este :);
FOR i:=1 TO N DO
Write(X[i], );
END;
c. Ordonarea vectorului :
3 5 7 2 9
3 5 2 7 9
3 2 5 7 9
2 3 5 7 9
BEGIN
REPEAT
k:=0;
BEGIN
Aux := X[i] ;
X[i] := X[i+1] ;
X[i+1] := Aux ;
k:=1;
end;
UNTIL k=0;
END;
2 3 5 9 7
2 3 5 7 9 minime
BEGIN
BEGIN
Min := X[i];
Poz := i;
FOR j:=i TO N DO
IF Min>X[ j] THEN
BEGIN
Min := X[ j];
Poz := j;
END;
X[Poz] := X[i];
X[i] := Min;
END;
END;
c3. Sortarea prin numarare: se ia fiecare element si se numara cati sunt mai mici decat
el.
Ex: x= 7 3 5 9 2
y= 3 1 2 4 0 pozitia in vecror
+1
z= 2 3 5 7 9
VAR y, z : Vector;
i,j : Byte;
BEGIN
FOR i:= 1 TO N DO
y[i] := 0;
FOR i:= 1 TO N DO
IF x[i]<x[ j] THEN
y[ j]:= y[ j] +1
ELSE
FOR i:= 1 TO N DO
FOR i:= 1 TO N DO
x[i] :=z[i];
END;
d. Contorizarea elementelor:
Note = 7 4 5 3 10
VAR i:Byte;
BEGIN
Nr := 0;
FOR i:=1 TO N DO
IF conditie THEN
Nr := Nr+1;
END;
e. Insumarea elementelor :
7 4 5 3 10
S= (7+4+5+3+10)/5 = 28/5 = 5.6
VAR i: Byte;
BEGIN
S:= 0;
FOR i:=1 TO N DO
S:= S + x[i];
END;
Ex: 7 4 5 3 10
-al II-a element 4, se compara 4<7, inversam , Min=4, se retine acest minim;
-al IV-a element 3, se compara 3<4, inversam, Min=3, se retine acest minim;
Obs. Daca nu se poate cunoaste prima valoare pentru a o atribui variabilei min, se poate
initializa cu o valoare mare care nu face parte din vector.
VAR i: Byte;
BEGIN
Min := x[1];
For I:=2 to n do
Min := x[i];
END;
PROCEDURE Maxim (x:Vector;N: Byte; var: Max: Byte);
VAR i: Byte;
BEGIN
Max := x[1];
For I:=2 to n do
Max := x[i];
END;
VAR i: Byte;
BEGIN
Gasit := False ;
FOR i:=1 TO N DO
IF x[i]= y THEN
Gasit := True;
END;
VAR i: Byte;
BEGIN
Poz:=0;
FOR i:=1 TO N DO
IF x[i]= y THEN
Poz:=I;
END;
Prelucrarea matricilor se face similar, cu deosebirea ca vor fi necesare doua
instructiuni for pentru a parcurge elementele (unul care parcurge liniile si altul care
parcurge coloanele)