1 / 17

Algoritmi și tehnici de programare

?. ?. ?. ?. Introducere. Algoritmi și tehnici de programare. Algoritmi și tehnici de programare. Fișa disciplinei Conținut, cunoștințe anterioare necesare B ibliografie – manual, culegere de probleme Evaluare Seminar Probe practice – teme obligatorii (condiție de intrare) Activitate

keiran
Download Presentation

Algoritmi și tehnici de programare

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. ? ? ? ? Introducere Algoritmi și tehnici de programare

  2. Algoritmi și tehnici de programare • Fișa disciplinei • Conținut, cunoștințe anterioare necesare • Bibliografie – manual, culegere de probleme • Evaluare • Seminar • Probe practice – teme obligatorii (condiție de intrare) • Activitate • Examen • Diverse • prezență, recuperări, studiu individual, reguli, colaborare • Consultații

  3. Subprograme (continuare) • Preluarea parametrilor din linia de comandă • Subprograme cu număr variabil de parametri • Pointeri la funcții (subprograme) • Recursivitate • Biblioteci de subprograme

  4. Parametri în linia de comandă Parametri în linia de comandă Comanda

  5. Parametri în linia de comandă Cuvînt 0 (nume program) Adresa cuvînt 0 Adresa cuvînt 1 Cuvînt 1 (parametrul 1) Adresa cuvînt 2 Cuvînt 2 (parametrul 2) Adresa cuvînt 3 Cuvînt 3 (parametrul 3) … … Adresa cuvînt n-1 char* Cuvînt n-1 (parametrul n-1) adresavectorului Șiruri de caractere char** Memoria internă

  6. Parametri în linia de comandă • Parametri: intargc char* argv[] voidmain(intargc, char* argv[] ) • Algoritm: se parcurge vectorul de cuvinte şi se preia fiecare parametru • Preluare conversie din şir de caractereîn formatul dorit (ex. sscanf ) • E sarcinaprogramatorului să valideze lista de parametri şi să o prelucreze

  7. Parametri în linia de comandă • Adunarea a două numere reale preluate din linia de comandă #include <stdio.h> void main(intargc, char* argv[]) { float x,y; if(argc!=3) printf(”\nNumarincorect de parametri!\n”); else { sscanf(argv[1],”%f”, &x); sscanf(argv[2],”%f”, &y); printf(”\nProgramulexecutabil:%s\n”,argv[0]); printf(”\nx= %6.2f\n”,x); printf(”\ny= %6.2f\n”,y); printf(”\nx+y=%6.2f\n”,x+y); } }

  8. Parametri în linia de comandă • Sortareaunuişir denumerereale #include <stdio.h> void main(intargc, char* argv[]) { float x[100],aux; inti,j,n; if(argc<2) printf("\nNumarincorect de parametri!\n"); else { n=argc-1; for(i=1;i<argc;i++) sscanf(argv[i],"%f", &x[i-1]); printf("\n\nVectorul initial:\n"); for(i=0;i<n;i++) printf("%6.2f",x[i]); for(i=0;i<n-1;i++) for(j=i+1;j<n;j++) if(x[i]>x[j]) { aux=x[i]; x[i]=x[j]; x[j]=aux; } printf("\n\nVectorulsortat:\n"); for(i=0;i<n;i++) printf("%6.2f",x[i]); printf("\n\n"); } }

  9. Subprograme cu număr variabil de parametri • Exemple • printf, scanf • Prototip • cu listă fixă de parametri tip_rezultat nume(lista_parametri); • cu număr variabil de parametri tip_rezultat nume(lista_parametri_ficşi, … );

  10. Subprograme cu număr variabil de parametri • Este sarcina programatorului să scrie cod care preia şi tratează corect toţi parametrii din lista variabilă de parametri ! • Elemente definite în stdarg.h va_list - tip de dată va_start - funcţie, iniţializare lucru cu lista variabilă va_arg - funcţie, extrage următorul parametru va_end - funcţie, încheire lucru cu lista variabilă

  11. Subprograme cu număr variabil de parametri va_list • o variabilă locală de tip va_list care reţine adresa listei de parametri variabili va_list p; void va_start(va_list p, ultim); • iniţializează adresa listei variabile • ultimeste numele ultimului parametru fix (uneori reprezintă numărul de parametri variabili)

  12. Subprograme cu număr variabil de parametri tip va_arg(va_list p, tip); • obţine valoarea următorului parametru din lista variabilă, conform tipului cerut! void va_end(va_list p); • încheie lucrul cu lista variabilă de parametri

  13. Subprograme cu număr variabil de parametri • Algoritm • declarare variabilă locală de tip va_list • apelare va_start • buclă* de preluare/prelucrare a parametrilor cu va_arg • apelare va_end • Detectarenumăr parametri în listă • Precizare număr parametri la apel (de obicei ultimul parametru fix)  buclă cu număr cunoscut de paşi • O valoare convenţională care marchează terminarea listeivariabile de parametri buclă condiţionată anterior

  14. Subprograme cu număr variabil de parametri • void exemplu(int a, int b, … ); • exemplu(x, y, p1, p2, p3, p4, p5, p6); • va_list p; • va_start(p,b); • vl1=va_arg(p,double); • vl2=va_arg(p,int) … x y p1 p2 p3 p4 p5 p6 …

  15. Subprograme cu număr variabil de parametri • Media unui șir de numere reale double media(int nr, …) { doublesuma=0; inti; va_list p; va_start(p, nr); for(i=0;i<nr;i++) suma+=va_arg(p, double); va_end(p); return(suma/nr); } int a, b, c; double d, e, f, g; d=media(3,a,b,c); e=media(3,1,2,3); f=media(3,1.0,2.0); g=media(3,1.0,2.0,3.0,4.0); x=media(3,4.0,6.0,9.0); y=media(2,5.0,8.0); z=media(4,4.0,5.0,6.0,7.0); double media(float unu, …) { doublen, suma=unu; int cite=1; va_listp; va_start(p, unu); n=va_arg(p, double); while(n!=-1) { suma+=n; cite++; n=va_arg(p, double); } va_end(p); return(suma/cite); } x=media(4.0,6.0,9.0,-1.0); y=media(5.0,8.0,-1.0); z=media(4.0,5.0,6.0,7.0,-1.0); Atenţie la tipurile parametrilor!

  16. Subprograme cu număr variabil de parametri • Concatenarea unor șiruri de caractere la un șir dat void concat_var(char* sir, int nr, …) { va_list p; char* s; inti; va_start(p,nr); for(i=0;i<nr;i++) { s=va_arg(p,char*); strcat(sir,s); } va_end(p); return sir; } void concat_var(char* sir, …) { va_listp; char* s; va_start(p,sir); s=va_arg(p,char*); while(s) { strcat(sir,s); s=va_arg(p,char*); } va_end(p); return sir; }

  17. Spor la învăţat!

More Related