+ All Categories
Home > Documents > 01+02 - Introducere. Subprograme (cont).pptx

01+02 - Introducere. Subprograme (cont).pptx

Date post: 03-Oct-2015
Category:
Upload: corinutza260
View: 24 times
Download: 0 times
Share this document with a friend
39
Algoritmi și tehnici de programare ? ? ? ?
Transcript

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


Recommended