Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C
Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C
Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
int cmpsize(const void* a, const void * b) {<br />
struct file * af =(struct file*)a;<br />
struct file * bf =(struct file*)b;<br />
return (int)(af→fsize - bf→fsize);<br />
}<br />
// ordonare lista fisiere dupa lungime<br />
void sortBySize (struct file f[], int nf) {<br />
qsort ( f, nf, sizeof(struct file), cmpsize);<br />
}<br />
Pentru ordonare dupã tipul fisierelor trebuie separatã extensia de nume.<br />
Cel mai dificil de realizat este optiunea de afisarea recursivã a fisierelor din<br />
subdirectoarele directorului dat, deoarece necesitã eliminarea variabilei externe “path”<br />
si introducerea ei ca argument <strong>în</strong> functia recursivã “printFiles” si <strong>în</strong> celelalte functii<br />
care o folosesc : getargs si listFiles.<br />
Imbunãtãtirea programului<br />
Un program corect si complet poate fi perfectionat pentru:<br />
- Reducerea posibilitãtilor de terminare anormalã, fãrã mesaje explicite.<br />
- Reducerea timpului de executie si a memoriei ocupate.<br />
- Imbunãtãtirea modului de prezentare a rezultatelor.<br />
- Facilitarea unor extinderi sau modificãri ulterioare<br />
- Facilitarea reutilizãrii unor pãrti din program <strong>în</strong> alte aplicatii.<br />
In versiunea finalã a programului trebuie prevãzute toate situatiile <strong>în</strong> care ar putea<br />
apare erori si mesaje corespunzãtoare. Nu am verificat dacã programul primeste<br />
optiuni care nu au sens pentru el, nu am verificat existenta fisierelor la deschidere cu<br />
“fopen” sau la apelarea functiei “stat”. In general, fiecare apel de functie trebuie urmat<br />
imediat de verificarea rezultatului ei. Exemplu:<br />
if ( (fp=fopen(full,"r")) ==NULL){<br />
printf(“ Eroare la fopen: fisier %s”,full);<br />
exit(-1);<br />
}<br />
if (stat (full, &fstat)!= 0)<br />
printf (“ Eroare la functia stat: fisier %s”,full);<br />
exit (-1);<br />
}<br />
Vectorul de pointeri la nume de fisiere are o dimensiune fixã MAXF, aleasã arbitrar<br />
si care ar putea sã fie insuficientã uneori. O solutie mai bunã este o alocare dinamicã<br />
initialã de memorie si modificarea functiei “listFiles” pentru extindere automatã prin<br />
realocare dinamicã:<br />
char **files= (char**) malloc(MAXFILES*sizeof(char*));