Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C
Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C
Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C
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