17.04.2013 Views

Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C

Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C

Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

comparare la egalitate siruri de caractere<br />

int comp (T a, T b ) {<br />

return strcmp (a,b);<br />

}<br />

int findS ( Set a, T x) { // cauta pe x in multimea a<br />

int j=0;<br />

while ( j < a.n && comp(x,a.m[j]) ==0 )<br />

++j;<br />

if ( j==a.n) return 0; // negasit<br />

else return 1; // gasit<br />

}<br />

c) Transmiterea functiilor de comparare, atribuire, s.a ca argumente la functiile care le<br />

folosesc (fãrã a impune nume fixe acestor functii), la fel ca la apelul functiei “qsort”.<br />

Exemplu:<br />

typedef char * T; // definire tip T<br />

// tip functie de comparare<br />

typedef (int *) Fcmp ( T a, T b) ;<br />

// cauta pe x in multimea a<br />

int findS ( Set a, T x, Fcmp cmp ) {<br />

int j=0;<br />

while ( j < a.n && cmp(x,a.m[j]) ==0 )<br />

++j;<br />

if ( j==a.n) return 0; // negasit<br />

else return 1; // gasit<br />

}<br />

Uneori tipul T al datelor folosite de o aplicatie este un tip agregat (o structurã C): o<br />

datã calendaristicã ce grupeazã numere pentru zi, lunã, an , descrierea unui arc dintrun<br />

graf pentru care se memoreazã numerele nodurilor si costul arcului, s.a. Problema<br />

care se pune este dacã tipul T este chiar tipul structurã sau este un tip pointer la acea<br />

structurã. Ca si <strong>în</strong> cazul sirurilor de caractere este preferabil sã se lucreze cu pointeri<br />

(cu adrese de structuri) si nu structuri. In plus, atribuirea <strong>în</strong>tre pointeri se face la fel ca<br />

si atribuirea <strong>în</strong>tre numere (folosind operatorul de atribuire). Obiectele nu se mutã <strong>în</strong><br />

memorie, ci doar adresele lor se mutã dintr-o colectie <strong>în</strong> alta.<br />

In concluzie, tipul neprecizat T al elementelor unei colectii este de obicei fie un tip<br />

numeric, fie un tip pointer (inclusiv de tip void * ).<br />

Utilizarea de pointeri la “void”<br />

O a doua solutie pentru o colectie genericã este o colectie de pointeri la orice tip (void<br />

*), care vor fi <strong>în</strong>locuiti cu pointeri la datele folosite <strong>în</strong> fiecare aplicatie. Si <strong>în</strong> acest caz<br />

functia de comparare trebuie transmisã ca argument functiilor de inserare sau de<br />

cãutare <strong>în</strong> colectie. Avantajul asupra solutiei cu tip neprecizat T este acela cã functiile<br />

pentru operatii cu colectii pot fi compilate si puse <strong>în</strong>tr-o bibliotecã si nu este necesar

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!