Professional Documents
Culture Documents
Algoritmi i tehnici de
programare
Examen: 50%
Din oficiu: 10%
Diverse
prezen, recuperri, studiu individual, reguli, colaborare
Consultaii
2301, joi 13:30-14:50, vineri 9:00-10:20
Subprograme (continuare)
Pointeri
la funcii (subprograme)
Recursivitate
Biblioteci
de subprograme
subprogramului respectiv
Tip
pointer ctre un subprogram care primete o anumit
Utilizare
Transmiterea subprogramelor ca parametri pentru alte
subprograme
Exemplu
void sortare(float v[], int n);
sortare pointer ctre o funcie care primete ca parametri un
vector cu elemente float i un ntreg i are rezultat de tip void
p = sortare;
q = minim;
sortare(a,dim); // (*p)(a, dim);
p(a, dim);
minim(a,dim,unde,&cite);
// (*q)(a,dim,unde,&cite);
Exemplu
Metoda biseciei pentru rezolvarea unei ecuaii
f(x)
n, eps
x1
x2
void main()
{ float a, b, sol, prec;
int nr, cod;
printf("\na="); scanf("%f",&a);
printf("\nb="); scanf("%f",&b);
printf("\nprecizia=");
scanf("%f",&prec);
printf("\nnr="); scanf("%d",&nr);
cod =
bisectie(a,b,prec,nr,ecuatie,&sol);
switch(cod)
{ case 0: printf("\nFara solutie");
break;
case 1: printf("\nSolutia exacta
este
%7.3f", sol);
break;
case 2: printf("\nSolutia
aproximativa
este %7.3f", sol);
}
Recursivitate
Algoritmi iterativi
Algoritmi recursivi
Recursivitate simpl (algoritm unirecursiv)
Recursivitate multipl (algoritm multirecursiv)
Formul de start (una sau mai multe)
Formul recursiv
Exemple
Implicaii
Mod de construire a subprogramelor
Necesar de memorie
Fiecare apel recursiv trebuie aplicat unei probleme mai simple dect n pasul
anterior
Rezult o metod simpl de oprire a generrii de noi apeluri
Necesarul de memorie
2
fib( 1 )
1
3
fib( 2 )
2
6
fib( 1 )
1
fib( 0 )
1
S(0) = 0
Cutarea binar
int cauta(float v[], int p, int u, float k)
{ int m;
if (p > u)
m = -1;
else { m = (p + u) / 2;
if(k < v[m])
m = cauta(v, p, m-1, k);
else
if(k > v[m])
m = cauta(v, m+1, u, k);
}
return m;
}
Teme:
Numrul
Produs
Algoritmul
lui Euclid
Calculul
c.m.m.d.c.
Metoda
tangentei
Problema
Sortarea
unui vector
Biblioteci de subprograme
Scop
Reutilizarea codului n mai multe aplicaii
Distribuirea ctre ali utilizatori
Tipuri
cod surs, cod binar
statice, dinamice
Biblioteci de subprograme
Variante de lucru
n mod comand
cl.exe
- compilator
lib.exe
- manager de biblioteci
link.exe - editor de legturi
n mediul de programare (IDE) Visual Studio
n aceeai soluie (mai multe proiecte)
n soluie independent
Extensie
Windows:
Linux:
.lib
.a
Avantaje
Un singur fiier executabil
Din bibliotec se extrage doar codul subprogramelor apelate
Dezavantaje
Dimensiune (mai) mare a fiierului executabil
Fiecare executabil va include propria copie a subprogramelor din
bibliotec
Fiiere cod
surs
(.c, .cpp, .h)
Fiiere cod
surs
(.c, .cpp, .h)
Compilare
Fiiere cod
obiect
(.obj)
Manager
biblioteci
Biblioteci
cod obiect
(.lib)
Compilare
Fiiere cod
obiect
(.obj)
Editare de legturi
Cod binar
executabil
(.exe)
Biblioteci
cod obiect
(.lib)
Fiiere
surs
// E - adresa
//citire
matricematricei
patrata cu alocare
//
I
double **aloca_matrice(int m, int n);
// E - adresa matrice, dimensiune
double**
citire_matrice(int
*m)
//dezalocare
matrice dinamica
{//int
i,j;
I - adresa matricei, nr. linii
double** a;
// E - adresa matricei (NULL)
printf_s("\n\nDimensiune: ");
#include double**
<stdio.h> dezalocare_matrice(double **a, int m);
scanf_s("%d",m);
#include <conio.h>
a=new double*[*m];
#include //produs
"matrice.h"
matrice patrate de dimensiuni egale, prealocate
for(i=0;i<*m;i++)
// Ia[i]=new
- a, b,double[*m];
n
void main()
//for(i=0;i<*m;i++)
E - c
{ double** a;
voidfor(j=0;j<*m;j++)
produs_mpn(double** a, double **b, int n, double** c);
int m,n;
{ printf_s("a[%d,%d]= ",i,j);
scanf_s("%lf",&a[i][j]);
//copiaza matrice prealocate
a=citire_matrice(&m);
// I - }
a, m, n
afisare_matrice(a,m);
return a;
// E - b
}
_getch();
void copiaza(double** a, int m, int n, double** b);
}
//afisare matrice patrata
//citire
matrice
patrata
cu alocare
//
I - adresa
matrice,
dimensiune
// EI -//
// E afisare_matrice(double**
- adresa matrice, dimensiune
void
a, int m)
{double**
int i,j; citire_matrice(int *m);
//cout<<"\nMatricea este: \n";
for(i=0;i<m;i++)
//afisare
matrice patrata
//{ Ifor(j=0;j<m;j++)
- adresa matrice, dimensiune
// E - printf_s("%10.6lf ",a[i][j]);
printf_s("\n");
void
afisare_matrice(double** a, int m);
}
printf_s("\n");
}
antet
matrice.h
implementare matrice.cpp
test
test.cpp
n mod comand
Se creeaz un director nou pentru proiect n care se salveaz cele 3
fiiere
Se execut vcvars32.bat, aflat in subdirectorul bin al Visual Studio
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin
cl -c matrice.cpp
matrice.obj
cl test.cpp matrice.lib
test.exe
Extensie
Windows:
Linux:
.dll
.so
Avantaje
Dimensiune (mai) mic a executabilului
Biblioteca este utilizat n paralel de mai multe aplicaii
Dezavantaje
Mai multe fiiere (executabil + biblioteci dinamice)
Timp suplimentar la execuie
Asigurarea accesului la bibliotec (calea curent, PATH)
Fiiere cod
surs
(.c, .cpp, .h)
Fiiere cod
surs
(.c, .cpp, .h)
Compilare
Fiiere cod
obiect (.obj)
Tabela de
import (.lib)
Compilare
Fiiere cod
obiect
(.obj)
Editare de
legturi
Editare de legturi
Biblioteci
dinamice
(.dll)
Cod binar
executabil
(.exe)
Biblioteci
cod obiect
(.lib)
Biblioteci
dinamice
(.dll)
Cod binar
executabil
(.exe)
Diferene
Antetul funciilor trebuie s conin (doar n .h)
__declspec(dllexport)
La execuie, fiierul .dll trebuie s poat fi gsit (cale cunoscut)
n mod comand
Se creeaz un director nou pentru proiect n care se salveaz cele 3
fiiere
Se execut vcvars32.bat, aflat in subdirectorul bin al Visual Studio
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin
cl matrice.cpp /LD
matrice.dll, matrice.lib
cl test.cpp matrice.lib
test.exe
Comparaie dimensiuni: T E M !
Static (.lib)
matrice.h
Dinamic (.dll)
L.C.
IDE
L.C.
IDE
matrice.lib
matrice.dll
test.exe
Tem
Creai i testai o bibliotec format din funciile necesare
prelucrrii vectorilor
Bibliotec static
Lucrai n mod comand
Lucrai n IDE
Bibliotec dinamic
Lucrai n mod comand
Lucrai n IDE
Spor la nvat!