Sunteți pe pagina 1din 5

CAP.4 TIPURI STRUCTURATE DE DATE. s:array[‘a’..’z’] of 0..

maxint ;
c:array[1..50,1..75] of string;
b:array[1..60,1..1..80,1..2] of real;
Tipurile descrise în capitolele anterioare sunt tipuri simple. Pe baza
acestora se pot construi tipuri structurate: tablou (array), înregistrare 4.2.Tipul şir de caractere (string)
(record), mulŃime(set) şi fişier (file). Un tip şir de caractere sau un tip string este un tip special de tablou
Deosebirile între acestea constau în: unidimensional, cu elemente de tip char, care memorează, în afara
- tipul componentelor; caracterelor din şir, şi lungimea respectivului şir de caractere, adică
- metoda de structurare; numărul de caractere existente efectiv în şir.
- tehnica de selectare din ansamblu a elementelor componente. La definirea tipului string sau la declararea explicită a unei variabile de
Necesarul de memorie pentru reprezentarea unei structuri rezultă din acest tip se precizează de cele mai multe ori şi valoarea maximă pe care o
tipul şi numărul componentelor sale şi rămâne constant pe parcursul poate lua această lungime. O valoare de tip string poate fi orice şir de
execuŃiei programului, motiv pentru care aceste structuri se numesc caractere cu lungime cuprinsă între zero şi lungimea specificată în
structuri statice. definiŃia tipului.
Din punct de vedere al memorării, definiŃia:
4.1. Tipul tablou. şir1=string[10];
este echivalentă:
4.1.1. Tipul array şir2=array[0..10] of char;
Tabloul este o structură formată dintr-un număr fix de componente, în care elementul cu indice zero este folosit pentru memorarea unui
toate de acelaşi tip, numite elemente. Selectarea unui element al caracter cu cod egal cu lungimea efectivă a şirului de caractere. Codul
tabloului se face cu ajutorul numelui variabilei tablou, urmat de aşa- unui caracter este un întreg aparŃinând intervalului 0..225, apare ca
numitul indice cuprins între paranteze pătrate, indice care precizează evidentă necesitatea limitării dimensiunii şirului la valoarea 225.
poziŃia elementului în cadrul structurii.
La definirea unui tablou se precizează: 4.2.1.Operatori, proceduri şi funcŃii predefinite pentru prelucrarea
- tipul elementelor(tipul de baza al tabloului); datelor de tip string.
- tipul permis pentru indice.
Prin tipul indicelui se fixează implicit şi numărul componentelor Proceduri pentru citirea şi afişarea unui şir de caractere
tabloului, care va fi egal cu cardinalitatea tipului indicelui. Pentru a citi un şir de caractere se folosesc procedurile „read” şi
Tipul indicelui poate fi: boolean, char, enumerare, subdomeniu. Ca „readln”, iar pentru afişare sunt folosite procedurile „write” şi „writeln”.
indice se poate folosi orice expresie. Aceasta se evaluează în momentul
selectării elementului, iar rezultatul trebuie să fie de tipul indicat pentru FuncŃia pentru concatenare
indice la descrierea tipului tablou, ceea ce presupune încadrarea lui în FuncŃia concat: admite doi sau mai mulŃi parametri de tip string sau
limitele precizate prin definiŃie. Îndeplinirea acestor condiŃii se verifică char şi furnizează ca rezultat şirul obŃinut prin concatenarea valorilor
în mod riguros, iar nerespectarea lor se semnalează ca eroare şi poate acestora (are acelaşi efect ca şi operatorul binar +).
cauza terminarea forŃată a programului. Exemplu:
Exemple de tipuri de tablou: Rez:=a+b; este echivalent cu rez:=concat(a,b);
a:array[1..100] of integer ;

18
FuncŃia pentru căutare k:=pos(vechi, şir);
FuncŃia pos: folosită pentru a preciza dacă un şir apare sau nu ca subşir j:=1;
al altui şir. Admite doi parametri: şirul căutat şi şirul în care se while k<>0 do begin
efectuează căutarea. FuncŃia furnizează ca rezultat o valoare de tip k:=k+j-1;
întreg, valoarea rezultatului precizează poziŃia în care a fost depistată delete(şir,k,length(vechi));
prima apariŃie a şirului căutat. insert(nou,şir,k);
Exemplu: pos(‘ce’,’cercetare’) are valoarea 1 j:=k+length(nou);
pos(‘ea’,’cercetare’) are valoarea 0 rămas:=copy(şir,j,length(şir)-j+1);
k:=pos(vechi,rămas);
FuncŃia de extragere: end;
FuncŃia copy : realizează copierea unui subşir dintr-un şir, având ca writeln(‘şirul rezultat: ’,şir);
parametrii: şirul din care se copiază, poziŃia(indicele) caracterului din şir end.
cu care începe copierea şi numărul de caractere copiate. Rezultatul
funcŃiei copy este de tip string. Procedura de ştergere a unor şiruri:
Exemplu: copy(‘cercetare’,4,3) are valoarea ’ce’ Procedura delete: realizează ştergerea unui subşir din cadrul unui şir.
copy(‘cercetare’,9,2) are valoarea ’e’ Admite trei parametri: şirul modificat (o variabilă de tip string), poziŃia
copy(‘cercetare’,11,3) are valoarea ’ ’ în cadrul şirului a primului caracter din subşirul ce trebuie şters şi
numărul de caractere ce trebuie şterse (adică lungimea subşirului ce
Procedura pentru inserare trebuie şters).
Procedure insert: asigură inserarea unui subşir în cadrul unui şir.
Admite trei parametri: subşirul ce trebuie inserat, şirul în care se face Proceduri pentru conversie(sir  valoare numerică; valoare numerică
inserarea şi poziŃia în şir de la care începe inserarea. Primii doi şir)
parametri sunt de tip string, ultimul de tip integer. Primul şi ultimul
parametru sunt transmişi prin valoare (pot fi expresii, constante, Procedure val: efectuează conversia unui şir de caractere într-o valoare
variabile), iar cel de-al doilea parametru este transmis prin referinŃă numerică (întreagă sau reală). Admite trei parametri: şirul de caractere
(trebuie să fie o variabilă de tip string). ce trebuie convertit, variabila de tip numeric în care se memorează
Exemplu: rezultatul conversiei şi o variabilă de tip întreg căreia i se atribuie o
Program înlocuire; valoare indicatoare a modului în care s-a terminat conversia (valoarea
Var vechi,nou,şir,rămas:string; zero arată că nu s-au detectat erori, în timp ce o valoare mai mare ca zero
K,j:integer; precizează poziŃia din şirul sursă în care a fost detectată o eroare).Forma
Begin generală de apel:val(Şir,VariabilăNumerică,VariabilăÎntreagă).Procedura
write(‘şirul analizat: ’); permite ca şirul de caractere ce urmează a fi convertit să conŃină fie
readln(şir); notaŃia ştiinŃifică (pentru numere reale), fie notaŃia zecimală obişnuită
write(‘subşir vechi: ’); (pentru numere reale şi pentru numere întregi).
readln(vechi);
write(‘subşir nou: ’);
readln(nou);

19
Procedura str: realizează conversia unei valori numerice întregi sau DefiniŃia tipului înregistrare:
reale într-un şir de caractere. Admite doi parametri: valoarea numerică Date=record
(constantă, variabilă sau expresie de tip întreg sau real, urmată eventual Zi:1..31;
de o specificare a formatului de tipărire, la fel ca în cazul parametrilor Luna:1..12;
numerici ai procedurilor Write şi Writeln) şi variabila de tip string, în An:0..2099;
care se memorează rezultatul conversiei. End;
Exemplu: str(18.7:5:2,şir) memorează în şir valoarea ’18.70’ Poate fi folosită în declararea unor variabile ale căror valori reprezintă
str(6+5,şir) memorează în şir valoarea ’11’ date:
Astăzi, Mâine: Date
FuncŃia pentru determinarea lungimii unui şir de caractere. Fiecare dintre aceste variabile înregistrare poate fi considerată ca fiind un
FuncŃia length: admite ca parametru un string şi furnizează ca rezultat întreg cu trei compartimente, numite Zi, Luna, An:
lungimea acestuia.
Exemplu: writeln(length(‘exemplu’)); va avea ca rezultat tipărirea Zi Lună An
valorii 7 Astăzi 27 1 1999
Mâine 28 1 1999
4.3 Tipul înregistrare. Astăzi.Luna este un specificator de câmp care desemnează câmpul
Luna al variabilei înregistrare Astăzi. În exemplul prezentat, câmpurile
O înregistrare este o colecŃie de date referitoare la o anumită entitate. au următoarele valori:
Ea poate fi folosită ca un întreg sau pot fi folosite numai anumite Astăzi.Zi 27
elemente ce o compun, denumite câmpuri. Fiecărui câmp i se asociază Astăzi.Luna 1
un nume cu ajutorul căruia poate fi referit. De exemplu, data Astăzi.An 1999
calendaristică poate fi considerată ca fiind o înregistrare ce conŃine trei Specificatorii de câmp pot fi folosiŃi şi în scrierea instrucŃiunilor. De
câmpuri: ziua, luna şi anul. exemplu, instrucŃiunea:
O înregistrare reprezintă o colecŃie de componente (câmpuri) care pot fi Mâine.Zi:=Astăzi.Zi +1
de tipuri diferite. Fiecare câmp are propriul său nume. va reactualiza valoarea câmpului Zi al variabilei înregistrare Mâine.
Un tablou reprezintă o colecŃie de componente (elemente) care sunt În cazul operaŃiilor efectuate asupra înregistrărilor complete trebuie
toate de acelaşi tip. Elementele tabloului nu poartă nume distincte ci sunt respectată regula compatibilităŃii din punct de vedere al tipului. La fel
identificate cu ajutorul unui index care arată ce poziŃie ocupă acestea în ca şi în cazul tipului tablou (array ), se consideră că două înregistrări
tablou. În cazul unui tablou ne putem referi la elementul de pe poziŃia i, sunt de acelaşi tip numai dacă au fost declarate în acelaşi loc sau dacă au
ceea ce nu este posibil în cazul unei înregistrări. fost declarate cu ajutorul aceluiaşi identificator de tip.
În limbajul PASCAL, tipul înregistrare se declară ca o sintaxă Exemplu: Declarând variabilele:
asemănătoare celei folosite pentru declararea variabilelor, prin scrierea Nr_complex: record
între cuvintele cheie record şi end a identificatorilor şi a tipurilor Re,im:real;
câmpurilor componente. Nu există restricŃii în privinŃa tipurilor End;
câmpurilor. Referirea la un anumit câmp al înregistrării se face cu x1,x2: record
ajutorul unui specificator de câmp. re,im:real;
Exemplu end;
20
se consideră că variabilele x1 şi x2 sunt de acelaşi tip, deoarece ele au De asemenea, aceeaşi membri pot să apară în cadrul mulŃimii de mai
fost declarate împreună. Fiind declarate separat, variabila nr_complex va multe ori : {3, 3, 5, 5, 6} este aceeaşi mulŃime cu {3, 5, 6 }.
fi considerată a fi de tip diferit, astfel încât următoarele instrucŃiuni: Se numeşte mulŃime vidă o mulŃime fără membri.
x1:=x2;
x2:=x1; Ex. pt. declaraŃie:
sunt corecte, în timp ce instrucŃiunile: Var a, b, c: set of char; {a,b,c sunt mulŃimi de caractere}
nr_complex:=x1; note : set of 1..10; {e o mulŃime de intregi ce pot lua valori 1..10 }
x1:=nr_complex; begin
x2:=nr_complex; a:=[‘a’,’c’,’d’]; {mulŃimea a conŃine elementele ‘a’,’c’,’d’}
nr_complex:=x2; b:=[‘c’,’b’,’e’];
sunt incorecte. • OperaŃiile ce se pot realiza folosind ca operanzi mulŃimi sunt:
Înregistrările complete pot fi folosite şi ca parametri valoare şi/sau
parametri variabilă ai subprogramelor. 1. Verificarea apartenenŃei: se stabileşte faptul că o anumită valoare
este sau nu membru al unei mulŃimi precizate. De exemplu, Roşu este
4.3.1 InstrucŃiunea WITH membru al mulŃimii {Verde, Roşu, Galben }, în timp ce Negru nu
Uneori este necesar ca în cadrul programului să fie scrise mai multe îndeplineşte această condiŃie.
instrucŃiuni ce se referă la câmpurile unei aceeaşi variabile înregistrare, Ex. if ‘d’ in a then write(‘Elementul d apartine multimii a’)
ceea ce conduce la repetarea numelui variabilei de fiecare dată când se else write(‘Elementul d nu apartine multimii a’);
realizează o calificare a câmpului. Limbajul PASCAL permite scrierea
într-o formă prescurtată a acestor instrucŃiuni cu ajutorul instrucŃiunii 2. Verificarea incluziunii: o mulŃime A este inclusă într-o mulŃime
with. B(sau A este o submulŃime a lui B ), dacă şi numai dacă fiecare
Exemplu membru al lui A este şi membru al lui B. De exemplu, {Verde, Roşu,
with nr_complex do begin Galben }, {Galben} şi mulŃimea vidă sunt submulŃimi ale mulŃimii
re:=1; {Verde, Roşu, Galben }.
im:=2;
end; 3. IntersecŃia mulŃimilor: intersecŃia a două mulŃimi A şi B este
4.4 Tipul mulŃime (SET) mulŃimea tuturor valorilor care sunt membri ai lui A şi, în acelaşi
timp, sunt membri ai lui B. De exemplu, intersecŃia mulŃimilor
În matematică, mulŃimea (set) reprezintă o noŃiune de bază. Cea mai {Verde, Roşu, Galben } şi {Alb, Verde, Portocaliu} este mulŃimea
convenabilă definiŃie a unei mulŃimi, din punctul de vedere al limbajului {Verde}.
PASCAL, este:mulŃimea reprezintă o colecŃie de obiecte distincte, toate Ex. c:= a*b; {în c vom avea ‘b’ }
având acelaşi tip şi care se numesc membri ai mulŃimii.
{Verde, Roşu, Galben}şi {3, 5, 10, 4} sunt două mulŃimi care au fiecare 4. Reuniunea mulŃimilor: reuniunea a două mulŃimi A şi B este
trei şi, respectiv, patru membri. mulŃimea tuturor valorilor care sunt membri ai lui A sau ai lui B sau
Ordinea listării membrilor nu are nici o importanŃă: {3, 5, 10 ,4 } este ai amândurora. De exemplu, reuniunea mulŃimilor {Verde, Roşu,
aceeaşi mulŃime ca Galben} şi {Verde, Roşu, Portocaliu} este mulŃimea {Verde, Roşu,
şi {5, 10 , 3, 4}. Galben, Portocaliu}.

21
Ex. c:=a+b; {în c vom avea ‘a’,’b’,’c’,’d’,’e’}

5. DiferenŃa mulŃimilor: diferenŃa a doua mulŃimi A şi B este


mulŃimea tuturor valorilor care sunt membri ai mulŃimii A, dar nu
sunt membri ai mulŃimii B. De exemplu, diferenŃa mulŃimilor
{Verde, Roşu, Galben} şi {Alb, Albastru, Galben, Portocaliu} este
mulŃimea {Verde, Roşu}.
Ex. c:=a-b; {în c vom avea ‘a’,’d’}

22

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