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

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*));

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

Saved successfully!

Ooh no, something went wrong!