Sunteți pe pagina 1din 24

?? ?

Algoritmi și tehnici de programare


Algoritmi și tehnici de programare

 Nume curs: Algoritmi și tehnici de programare


 Curs:
 Vineri 15:00 - 16:20, sala 2203 - Cristian Uscatu
 Seminarii
 Luni 07:30 - 08:50 (1000) sala 2016 - Cristian Uscatu
 Marți 13:30 - 14:50 (1001) - Radu Mogoș
 Marți 12:00 - 13:20 (1002) - Radu Mogoș
 Joi 07:30 - 08:50 (1003) - Cristian Uscatu
 Marți 13:30 - 14:50 (1004) - Marinela Mircea
 Marți 12:00 - 13:20 (1005) - Cristian Uscatu
 Marți 13:30 - 14:50 (1006) - Cristian Uscatu
 Consultații: joi 13:00-16:00, sala 2301
▪ Solicitare consultații: online.ase.ro sau cristian.uscatu@ie.ase.ro
▪ (folosiți adresa instituțională oferită de ASE: xxxxx@stud.ase.ro) ?
Algoritmi și tehnici de programare

 Condiții prealabile:
 Cunoștințe și abilități de bază pentru lucrul cu calculatorul
 Bazele programării (curs din semestrul 1)
 Cunoștințe și abilități de bază Microsoft Visual Studio

 Trebuie să înțelegeți și să știți să lucrați cu:


 C/C++
▪ Aplicații consolă
▪ Masive - 1, 2, 3 etc. dimensiuni
▪ Pointeri - operații, alocare și eliberare memorie
▪ Subprograme - construire, utilizare, comunicație (parametri)
 Visual Studio: soluții, proiecte, fișiere sursă
▪ Creare aplicație consolă simplă (fără antete precompilate)
▪ Scriere cod C/C++
▪ Compilare aplicație
▪ Depanare aplicație
Algoritmi și tehnici de programare

 Veți studia
 Biblioteci de funcții
 Pointeri la funcții
 Iterativitate și recursivitate
 Metoda Divide et Impera
 Căutare, sortare, interclasare pentru masive unidimensionale
 Validarea datelor
 Structuri externe de date: fișiere (text, binare, indexed)
 Grafuri: reprezentare, traversare, conectivitate, drumuri, arbori
 Metoda Greedy
 Metoda Backtracking
Algoritmi și tehnici de programare

 Cărți, disponibile la biblioteca ASE


 Manual
▪ C. Uscatu, C. Cocianu, B. Ghilic-Micu, M. Stoica, M. Mircea, Algoritmi și tehnici de
programare, Editura ASE București 2014, 2015, 2017

 Culegere de probleme
▪ C. Uscatu, C. Cocianu, M, Mircea, L. Pocatilu, Algoritmi și tehnici de programare.
Aplicații, Editura ASE 2015 (2017 – în curînd)

 Alte cărți
▪ I. Gh. Roşca, B. Ghilic-Micu, C. Cocianu, M. Stoica, C. Uscatu, M. Mircea,
Programarea calculatoarelor. Algoritmi în programare, Editura ASE Bucureşti, 2007
▪ C. Uscatu, M. Popa, L. Pocatilu (Bătăgan), C. Silvestru, Programarea
calculatoarelor. Aplicații, Editura ASE București 2012
▪ Thomas H. Cormen, Charles E. Leiserson, Ronald R. Rivest, Introducere în
algoritmi, Computer Libris Agora, 2000
Algoritmi și tehnici de programare

 Evaluare
▪ Seminar: 40%
▪ Teme obligatorii: 10%
▪ Proba practică: 30%
▪ Examen: 50%

 Diverse
▪ Prezență, absențe, studiu individual, reguli, colaborare

 online.ase.ro
 Fișa disciplinei, prezentări, teme, alte materiale, comunicație
Biblioteci de subprograme

 Bibliotecă: colecție de subprograme, grupate într-un


singur fișier (compilat)

 Scop
 Reutilizarea codului în mai multe aplicații
 Distribuirea către alți utilizatori

 Tipuri
 cod sursă / cod binar, statice / dinamice

 Variante de lucru
 În mod comandă cl.exe lib.exe link.exe
 În mediul de programare (IDE) Visual Studio
Biblioteci de subprograme: statice

 Codul subprogramelor utilizate este inclus în executabil


 Extensie
 Windows: .lib
 Linux: .a
 Avantaje
 Un singur fișier executabil
 Doar codul subprogramelor apelate se extrage din bibliotecă și
se include în program – editorul de legături
 Dezavantaje
 Dimensiune (mai) mare a fișierului executabil
 Fiecare executabil va include propria copie a subprogramelor din
bibliotecă
Biblioteci de subprograme: statice

 Creare bibliotecă statică


Fișiere cod Fișiere cod Manager
Biblioteci
sursă Compilare obiect biblioteci cod obiect
(.c, .cpp, .h) (.obj) (.lib)

 Utilizare bibliotecă statică


Fișiere cod Fișiere cod
sursă Compilare obiect
(.c, .cpp, .h) (.obj)

Cod binar
Editare de legături executabil
(.exe)

Biblioteci
cod obiect
(.lib)
Biblioteci de subprograme: statice
#include <stdio.h>
#include <malloc.h>
//alocare
#include dinamica matrice
"matrice.h"
// I - nr. linii, nr. coloane
// E - adresa
//citire matricematricei
patrata cu alocare
 Fișiere sursă
double **aloca_matrice(int m, int n);
// I -
// E - adresa matrice, dimensiune
double** citire_matrice(int
//dezalocare *m)
matrice dinamica
 antet
{//int
matrice.h
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);
 implementare matrice.cpp
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
 test
void main()
//for(i=0;i<*m;i++)
{ double** a;
E - c
voidfor(j=0;j<*m;j++)
test.cpp
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
I - adresa patrata
matrice, cu alocare
dimensiune
// EI --
//
// E afisare_matrice(double**
void - adresa matrice, dimensiune
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");
}
Biblioteci de subprograme: statice

 În mod comandă
 Se creează un director nou pentru proiect în care se salvează fișiere
necesare
 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

 lib matrice.obj /out:matrice.lib


▪ matrice.lib

 cl test.cpp matrice.lib
▪ test.exe
Biblioteci de subprograme: statice

 În IDE – creare bibliotecă binară


 Se creează un proiect nou de tip Win32 Console Application
▪ numele soluției: BSIDE, al proiectului: matrice

 În fereastra Application settings se alege


▪ Application type: Static library
▪ Additional options: Empty project, fără Precompiled headers

 Se adaugă la proiect fișierele sursă (antet și implementare)

 Se compilează soluția (Build)

 În directorul BSIDE\Debug se va genera biblioteca binară


▪ numele bibliotecii: matrice.lib
Biblioteci de subprograme: statice

 În IDE – utilizare bibliotecă binară în aceeași soluție


 Se creează un proiect nou de tip Win32 Console Application
▪ numele proiectului: Test, se adaugă la soluția BSIDE
 În fereastra Application settings se alege
▪ Application type: Console Application
▪ Additional options: Empty project, fără Precompiled headers
 Se adaugă la proiect fișierul sursă (cu funcția main)
 Project > Properties > Common Properties > Framework and References
> Add New Reference… > matrice
 Project > Properties > Configuration Properties > C/C++ > General >
Additional Include Directories > calea către matrice.h
 Project > Set As StartUp Project
 Se compilează soluția (Build)
 Se lansează în execuție din IDE sau separat
▪ Test.exe se află în BSIDE\Debug
Biblioteci de subprograme: statice

 În IDE – utilizare bibliotecă binară în altă soluție


 Se creează un proiect nou de tip Win32 Console Application
▪ numele soluției (și al proiectului): TestS
 În fereastra Application settings se alege
▪ Application type: Console Application
▪ Additional options: Empty project, fără Precompiled headers
 Se adaugă la proiect fișierul sursă (cu funcția main)
 Se copiază în directorul proiectului fișierele matrice.h și matrice.lib
 Project > Properties > Configuration Properties > Linker > Input >
Additional Dependencies > se adaugă matrice.lib
 Se compilează soluția (Build)
 Se lansează în execuție
Biblioteci de subprograme: dinamice

 Codul subprogramelor utilizate este separat de executabil


 Extensie
 Windows: .dll
 Linux: .so
 Avantaje
 Dimensiune (mai) mică a executabilului
 Biblioteca este utilizată în paralel de mai multe aplicații

 Dezavantaje
 Mai multe fișiere (executabil + biblioteci dinamice)
 Timp suplimentar la execuție
 Asigurarea accesului la bibliotecă (calea curentă, PATH)
Biblioteci de subprograme: dinamice

 Creare Fișiere cod


Fișiere cod Biblioteci
bibliotecă obiect (.obj) Editare de
sursă Compilare legături dinamice
dinamică (.c, .cpp, .h)
Tabela de
(.dll)
import (.lib)

Fișiere cod Fișiere cod


 Utilizare
sursă Compilare obiect
bibliotecă (.c, .cpp, .h) (.obj)

Cod binar
Editare de legături executabil
Biblioteci (.exe)
 Executare dinamice
(.dll) Biblioteci
aplicație
cod obiect
(.lib)

Cod binar
executabil
(.exe)
Biblioteci de subprograme: dinamice

 Crearea și utilizarea este asemănătoare cu a bibliotecilor


statice

 Diferențe
 Antetul funcțiilor trebuie să conțină (doar în .h)
__declspec(dllexport)

 Pentru fiecare funcție exportată:

__declspec(dllexport) double** citire_matrice(int *m);

 La execuție, fișierul .dll trebuie să poată fi găsit (cale cunoscută)


Biblioteci de subprograme: dinamice

 În mod comandă
 Se creează un director nou pentru proiect în care se salvează cele 3
fișiere
 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

 Pentru execuție sînt necesare:


▪ text.exe și matrice.dll
Biblioteci de subprograme: dinamice

 În IDE – creare bibliotecă binară


 Se creează un proiect nou de tip Win32 Console Application
▪ numele soluției: BDIDE, al proiectului: matrice

 În fereastra Application settings se alege


▪ Application type: DLL
▪ Additional options: Empty project

 Se adaugă la proiect fișierele sursă (antet și implementare)

 Se compilează soluția (Build)

 În directorul BDIDE\matrice\Debug se va genera biblioteca binară


▪ fișiere: matrice.dll, matrice.lib
Biblioteci de subprograme: dinamice

 În IDE – utilizare bibliotecă binară în aceeași soluție


 Se creează un proiect nou de tip Win32 Console Application
▪ numele proiectului: Test, se adaugă la soluția BDIDE
 În fereastra Application settings se alege
▪ Application type: Console Application
▪ Additional options: Empty project, fără Precompiled headers
 Se adaugă la proiect fișierul sursă (cu funcția main)
 Project > Properties > Common Properties > Framework and References
> Add New Reference… > matrice
 Project > Properties > Configuration Properties > C/C++ > General >
Additional Include Directories > calea către matrice.h
 Project > Set As StartUp Project
 Se compilează soluția (Build)
 Se lansează în execuție
Biblioteci de subprograme: dinamice

 În IDE – utilizare bibliotecă binară în altă soluție


 Se creează un proiect nou de tip Win32 Console Application
▪ numele soluției (și al proiectului): TestD
 Se copiază în directorul proiectului fișierele matrice.h și matrice.lib
 În fereastra Application settings se alege
▪ Application type: Console Application
▪ Additional options: Empty project, fără Precompiled headers
 Se adaugă la proiect fișierul sursă (cu funcția main)
 Project > Properties > Configuration Properties > Linker > Input >
Additional Dependencies > se adaugă matrice.lib
 Project > Properties > Configuration Properties > Debugging >
Environment > se adaugă calea către matrice.dll
 Se compilează soluția (Build)
 Se lansează în execuție
Biblioteci de subprograme

 TEMĂ!
 Creați și testați o bibliotecă formată din funcțiile necesare
prelucrării masivelor (1/2 dimensiuni) – biblioteca trebuie
să includă funcții pentru citirea și afișarea masivelor.
Toate masivele trebuie alocate dinamic.

 Obligatoriu: bibliotecă statică și bibliotecă dinamică


 Opțional: lucrați în mod comandă sau în IDE

 Tema va fi încărcată pe online.ase.ro



Biblioteci de subprograme

 Continuare T E M Ă !
 Comparație dimensiuni:
Statică (.lib) Dinamică (.dll)
L.C. IDE L.C. IDE
matrice.h ? ? ? ?
matrice.lib ? ? ? ?
matrice.dll - - ? ?
test.exe ? ? ? ?

 Cînd folosim biblioteci?

 Cînd folosim biblioteci statice / dinamice?


Spor la învăţat!

S-ar putea să vă placă și