Beruflich Dokumente
Kultur Dokumente
Algorithms and
programming techniques
Examination: 50%
Ex officio: 10%
Miscelaneous
Presence, recuperation, individual study, rules, collaboration
Consultations
Room 2301, Thursday 13:30-14:50, Friday 9:00-10:20
Subprograms (continued)
Pointers
to functions (subprograms)
Recursivity
Subprogram
libraries
function is located
Type
pointer to a subprogram that receives a specific list of
Use
Dynamic call of subprograms, transmission of
Example
void sortare(float v[], int n);
sortare pointer to a function that receives a vector of float and an
int and returns void result
p = sortare;
q = minim;
sortare(a,dim); // (*p)(a, dim);
p(a, dim);
minim(a,dim,unde,&cite);
// (*q)(a,dim,unde,&cite);
Example
Bisection method for solving an equation
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);
}
Recursivity
Iterative algorithms
Recursive algorithms
Simple recursivity (uni-recursive algorithm)
Multiple recursivity (multi-recursive algorithm)
Start formula (on or more)
Recursive formula
Examples
Implications
Function construction
Memory requirements
Memory requirements
2
fib( 1 )
1
3
fib( 2 )
2
6
fib( 1 )
1
fib( 0 )
1
S(0) = 0
Binary search
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;
}
Homework:
Count
Scalar
multiplication of 2 arrays
Euclids
algorithm
Greatest
Tangent
Hanoi
Sort
common factor
towers
an array
Libraries
Purpose
Code reuse for multiple applications
Distribution to other users
Types
Source code, binary (object) code
Static, dynamic
Libraries
Work options
Command line
cl.exe
- compiler
lib.exe
- library manger
link.exe - link editor
In IDE (Visual Studio)
Same solution (with multiple projects)
Separate solutions
Static libraries
File extension
Windows:
Linux:
.lib
.a
Advantages
Single executable file
Only called functions are extracted from the library and inserted
in the program
Drawbacks
Larger executable file
Each executable includes a separate copy of the same functions
Static libraries
Source
code
(.c, .cpp, .h)
Source
code files
(.c, .cpp, .h)
Compile
Object code
(.obj)
Compile
Object code
(.obj)
Library
manager
Link editor
Object code
library
(.lib)
Object code
library
(.lib)
Executable
file
(.exe)
Static libraries
#include <stdio.h>
#include <malloc.h>
//alocare
dinamica matrice
#include
"matrice.h"
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
Static libraries
Command line
Create a new folder and save the required files
Run vcvars32.bat, found in Visual Studios folder bin
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin
cl -c matrice.cpp
matrice.obj
cl test.cpp matrice.lib
test.exe
Static libraries
Dynamic libraries
File extension
Windows:
Linux:
.dll
.so
Advantages
Smaller executable
The library is shared by several applications
Drawbacks
Several files (main executable + dynamic libraries)
Additional processing time
Library must be on the search path or current folder
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!