01+02 - Introducere. Subprograme (cont).pptx
-
Upload
corinutza260 -
Category
Documents
-
view
24 -
download
0
Transcript of 01+02 - Introducere. Subprograme (cont).pptx
Introducere. Subprograme (cont.)
Algoritmi i tehnici de programare????
Fia disciplinei (programare.ase.ro, pagina ATP )Coninut, cunotine anterioare necesareBibliografie manual, culegere de problemeEvaluareSeminar: 40%Teme obligatorii (condiie de intrare la p.p.): 10%Probe practice: 30% Examen: 50%Din oficiu: 10%Diverseprezen, recuperri, studiu individual, reguli, colaborare Consultaii2301, joi 13:30-14:50, vineri 9:00-10:20
Algoritmi i tehnici de programare
Subprograme (continuare)Pointeri la funcii (subprograme)RecursivitateBiblioteci de subprograme
Pointeri la funcii (subprograme)Numele unei funcii poate fi folosit ca pointer constant (asemntor masivelor)Semnificaie adresa din memorie unde se afl codul executabil al subprogramului respectivTippointer ctre un subprogram care primete o anumit list de parametri i ntoarce un anumit tip de rezultatUtilizare Transmiterea subprogramelor ca parametri pentru alte subprograme
Pointeri la funcii (subprograme)Exempluvoid 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
float minim(float v[], int n, int poz[], int* nr);minim pointer ctre o funcie care primete ca parametri un vector cu elemente float, un ntreg, un vector cu elemente ntregi i un pointer ctre ntreg i are rezultat de tip float
Pointeri la funcii (subprograme)Declarare variabil/parametru tip pointer la funcie i utilizare
void sortare(float v[], int n);float minim(float v[], int n, int poz[], int* nr);
void main(){ int dim; float a[100]; int unde[100], cite; void (*p)(float v[], int n); float (*q)(float v[], int n, int poz[], int* nr); p = sortare; q = minim; sortare(a,dim); // (*p)(a, dim);p(a, dim); minim(a,dim,unde,&cite);// (*q)(a,dim,unde,&cite); }
Pointeri la funcii (subprograme)ExempluMetoda biseciei pentru rezolvarea unei ecuaii
x1x2n, epsxf(x)
Pointeri la funcii (subprograme)#include
float ecuatie(float x){ return x*x - 7*x + 12;}
int bisectie( float x1, float x2, float eps, int n, float (*f)(float), float *x){ int cod = 0; while ((n > 0) && (cod == 0)) { *x = (x1 + x2) / 2; if((*f)(*x) == 0) cod = 1; else if((x2-x1) < eps) cod = 2; else if((*f)(x1)*(*f)(*x)n) c = 0; else if ((k==0)||(k==n)) c = 1; else c = comb(n-1,k) + comb(n-1,k-1); return c;}
Recursivitate, subprograme recursiveSuma elementelor unui vectorS(n) = x[n-1] + S(n-1), S(0) = 0
double suma(double v[], int n){ double s; if( n == 0) s = 0; else s = v[n-1] + suma(v, n-1); return s;}
Produsul elementelor unui vector
Recursivitate, subprograme recursiveCutarea 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;}
Recursivitate, subprograme recursiveCum se transform un subprogram iterativ n unul recursiv?instruciunea iterativ disparecondiia de la instruciunea iterativ devine (eventual modificat) condiie de oprire a generrii de noi autoapeluriRepetarea este asigurat prin autoapelExemplu: metoda biseciei
Recursivitate, subprograme recursiveMetoda biseciei
int bisectie( float x1, float x2, float eps, int n, float (*f)(float), float *x){ int cod = 0;
while ((n > 0) && (cod == 0)) { *x = (x1 + x2) / 2; if((*f)(*x) == 0) cod = 1; else if((x2-x1) < eps) cod = 2; else if((*f)(x1)*(*f)(*x) General > Additional Include Directories > calea ctre matrice.hProject > Set As StartUp ProjectSe compileaz soluia (Build)Se lanseaz n execuie din IDE sau separatTest.exe se afl n BSIDE\Debug
Biblioteci de subprograme: staticen IDE utilizare bibliotec binar n alt soluieSe creeaz un proiect nou de tip Win32 Console Application numele soluiei (i al proiectului): TestSn fereastra Application settings se alege Application type: Console ApplicationAdditional options: Empty project, fr Precompiled headersSe adaug la proiect fiierul surs (cu funcia main)Se copiaz n directorul proiectului fiierele matrice.h i matrice.libProject > Properties > Configuration Properties > Linker > Input > Additional Dependencies > se adaug matrice.libSe compileaz soluia (Build)Se lanseaz n execuie
Biblioteci de subprograme: dinamiceCodul subprogramelor utilizate este separat de executabil
ExtensieWindows: .dllLinux: .so
AvantajeDimensiune (mai) mic a executabiluluiBiblioteca este utilizat n paralel de mai multe aplicaii
DezavantajeMai multe fiiere (executabil + biblioteci dinamice)Timp suplimentar la execuieAsigurarea accesului la bibliotec (calea curent, PATH)
Biblioteci de subprograme: dinamiceEditare de legturiFiiere cod surs(.c, .cpp, .h)Fiiere cod obiect (.obj)Tabela de import (.lib)Biblioteci dinamice(.dll)Fiiere cod surs(.c, .cpp, .h)Cod binar executabil(.exe)CompilareEditare de legturiBiblioteci cod obiect(.lib)Fiiere cod obiect(.obj)CompilareCod binar executabil(.exe)Biblioteci dinamice(.dll)
Biblioteci de subprograme: dinamiceCrearea i utilizarea este asemntoare cu a bibliotecilor statice
DifereneAntetul funciilor trebuie s conin (doar n .h)__declspec(dllexport)
La execuie, fiierul .dll trebuie s poat fi gsit (cale cunoscut)
Biblioteci de subprograme: dinamicen mod comandSe creeaz un director nou pentru proiect n care se salveaz cele 3 fiiereSe execut vcvars32.bat, aflat in subdirectorul bin al Visual StudioC:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin
cl matrice.cpp /LDmatrice.dll, matrice.lib
cl test.cpp matrice.libtest.exe
Pentru execuie snt necesare:text.exe i matrice.dll
Biblioteci de subprograme: dinamicen IDE creare bibliotec binarSe creeaz un proiect nou de tip Win32 Console Application numele soluiei: BDIDE, al proiectului: matrice
n fereastra Application settings se alege Application type: DLLAdditional options: Empty project
Se adaug la proiect fiierele surs (antet i implementare)
Se compileaz soluia (Build)
n directorul BDIDE\matrice\Debug se va genera biblioteca binarfiiere: matrice.dll, matrice.lib
Biblioteci de subprograme: dinamicen IDE utilizare bibliotec binar n aceeai soluieSe creeaz un proiect nou de tip Win32 Console Application numele proiectului: Test, se adaug la soluia BDIDEn fereastra Application settings se alege Application type: Console ApplicationAdditional options: Empty project, fr Precompiled headersSe adaug la proiect fiierul surs (cu funcia main)Project > Properties > Common Properties > Framework and References > Add New Reference > matriceProject > Properties > Configuration Properties > C/C++ > General > Additional Include Directories > calea ctre matrice.hProject > Set As StartUp ProjectSe compileaz soluia (Build)Se lanseaz n execuie
Biblioteci de subprograme: dinamicen IDE utilizare bibliotec binar n alt soluieSe creeaz un proiect nou de tip Win32 Console Application numele soluiei (i al proiectului): TestDSe copiaz n directorul proiectului fiierele matrice.h i matrice.libn fereastra Application settings se alege Application type: Console ApplicationAdditional options: Empty project, fr Precompiled headersSe adaug la proiect fiierul surs (cu funcia main)Project > Properties > Configuration Properties > Linker > Input > Additional Dependencies > se adaug matrice.libProject > Properties > Configuration Properties > Debugging > Environment > se adaug calea ctre matrice.dllSe compileaz soluia (Build)Se lanseaz n execuie
Biblioteci de subprograme: dinamiceComparaie dimensiuni: T E M !
Cnd folosim biblioteci?
Cnd folosim biblioteci statice / dinamice?Static (.lib)Dinamic (.dll)L.C.IDEL.C.IDEmatrice.h? ? ? ? matrice.lib????matrice.dll--??test.exe????
Biblioteci de subprograme: dinamiceTemCreai i testai o bibliotec format din funciile necesare prelucrrii vectorilorBibliotec staticLucrai n mod comandLucrai n IDEBibliotec dinamicLucrai n mod comandLucrai n IDE
Spor la nvat!
apelator
fact(3)
t1
2 * fact(1)
t2
fact(1)
t3
1 * fact(0)
t4
t5
fact(0)
fact(3)
3*fact(2)
fact(2)
1
1*1=1
t6
2*1=2
t7
3*2=6
t8
6
Stiva
Adresa de revenire3f
t1
t2
t3
t4
t5
t6
t7
t8
Adresa de revenire2f
Adresa de revenire1f
Adresa de revenire0f