Recollement d'images
Langage C++
Introduction au langage Gestion de la mmoire, hritage, gnricit, Standard Template Library (STL), ... Application de notions vues en CTD Algos de programmation dynamique et Dijkstra Structures de donnes, calculs de cots Options de compilation, outils de profilage, ...
Dbogage de programmes
Droulement
4 sances de cours + 7 sances en salle machine + 1 sance de TD (planning : cf. wikiosk) Travailler sur votre compte sur ensibm 3 dlivrables, sur 2/2/1 point(s), rendre la fin de 3 sances machines (Teide) Note de TP = de la note d'algo
Sances notes
Nouveaut : une note pour 2 sances conscutives (5 et 6, 8 et 9, 11 et 12) Enonc fourni au dbut de la premire sance Travail effectuer pour le dbut de la seconde sance Dbut de la seconde sance : questionnaire + nonc complmentaire
Poly (cf. wikiosk) : Enonc du sujet global du TP Introduction C++ (non exhaustif !) Des fichiers sources Au dbut des sances de TP Eventuellement incomplets Des images pour les tests
A la fin des sances n 6, 9 et 12 Un code complt Un questionnaire rempli Via Teide Travail en monmes (Hopefully) Retour/correction lors de la sance suivante
Questionnaire
Dbut de sance 2/2, questions de comprhension sur la 1re partie Code de la sance 1/2 pas forcment corrig
Certains, pris au hasard, seront corrigs Note note du questionnaire => sanction Vous pouvez demander une correction individualise
Rq: toutes les sances en salles machines sont obligatoires (-1 pt sur la note finale par absence)
Recollement d'images
deux vues voisines de la mme scne, places en partie lune sur lautre
pour quelles se raccordent le mieux possible. J : zone de chevauchement (Rectangle de taille n x m pixels) I1 J I2
Deux images se chevauchant
Recollement d'images
Chemin dans J : suite de pixels voisins J
I1 I2
Erreur entre les images en un pixel p J de couleur (R1,V1,B1) dans I1 et de couleur (R2,V2,B2) dans I2
Recollement d'images
Cot d'un chemin trac dans J = somme des erreurs des pixels qui forment le chemin But : raccordement entre les images le moins visible possible
Calculer le chemin de cot minimal Image I1 affiche gauche de ce chemin, Image I2 sa droite.
Recollement d'images
Recollement d'images
Objectifs des sances de TP : Prparer les classes et mthodes utiles Calculer un chemin optimal :
Plusieurs algorithmes
Aujourd'hui (sance n 1)
Prsentation du sujet du TP De Java et C C++
Sance n 3
Sance n 7
Sance n 10
De Java et C C++
Introduction
Langage objet : classes, hritage, gnricit C++ peut tre considr comme extension de C (en premire approximation) C est un sous-ensemble de C++ ( peu de choses prs) Pas de garbage collector ( Java) Bibliothque Standard : STL
Hritage du C
Types de base : int, double, float, char Arithmtique de base : +, - , *, /, %, Tests et boucles :
if (condition) { insts; } else { insts; } for (int i=0; i<n; i++) { insts;} while (condition) {insts;} do {insts;} while(condition);
Surcharge de fonctions :
int puissance(int x, int n){ //calcule xn = x.xx } double puissance(int x, double n){ //calcule xn = en log x }
Gestion de la mmoire
new type : allocation d'un objet unique new type[n] : allocation d'un tableau de taille n delete adresse : libration d'un objet unique delete [] adresse : libration d'un tableau
Gestion de la mmoire
Exemple :
int* pi = new int;
// Au lieu de : // int *pi = (int *) malloc(sizeof(int));
delete [] RGB;
Rfrences
& (ampersand) = alias sur une variable ou un objet. Exemple : int ix; int &ir = ix; // Est une ref sur ix ir = j; // Ne transforme pas ir en ref sur j
// mais copie j dans ix
Entres/sorties de base
Entre clavier :
int i; std::cin >> i; // Lit un entier
Sortie l'cran :
int i = 2; std::cout << "i : " << i << std::endl;
Flux d'erreur :
std::cerr << "erreur !" << std::endl;
Entres/sorties fichier
Exemple :
ifstream f("infile"); // Ouverture en lecture ofstream g("outfile");// Ouverture en criture fstream h("filename",ios::in|ios::out);
//Ouverture en lecture et criture
char buf[81]; f.getline(buf, 80); // Lit une ligne while (f) { g << buf << std::endl; // Envoie dans g f.getline(buf,80); // Lit la ligne suivante }
Espace de nommage
quivalent du paquetage Java et Ada Dfini laide du mot-cl namespace Intrt : viter les conflits de noms entre plusieurs modules.
namespace pile_de_char { void empiler(char); char depiler(); } namespace pile_de_int { void empiler(int); int depiler(); }
Exemple :
void main(){ pile_de_char::empiler( x ); if (pile_de_char::depiler() != x) std::cerr << "impossible" << std::endl; }
Les classes
Dfinition d'un nouveau type C++ Une classe est compose : d'attributs (donnes internes) de fonctions membres appeles mthodes
Une variable de ce type (une instance) est appele un objet Encapsulation : dclaration mthodes et attributs un endroit unique
Un exemple de classe
class Point { int _x, _y; int abscisse () const { return _x; } int ordonnee () const { return _y; } void set_coord (int x, int y) { _x = x; _y = y; } };
Exemple d'utilisation
void main() { Point p; p.set_coord(1,2); std::cout << "abscisse : " << p.abscisse() << " ordonnee : " << p.ordonnee() << std::endl; }
L'utilisateur peut restreindre l'accs aux attributs et fonctions membres de ses classes : public, private, protected
private : autoris uniquement aux fonctions membres de la classe public : autoris pour toute fonction protected : autoris uniquement aux fonctions membres de la classe et aux classes drives
Un exemple d'utilisation
class Point { private: // Pas obligatoire, par dfaut ! int _x, _y; public: // Les mthodes suivantes sont publiques int abscisse () const { return _x; } int ordonnee () const { return _y; } void set_coord (int x, int y) { _x = x; _y = y; } };
Constructeurs
Rle (principalement) : allouer la mmoire initialiser les attributs Par dfaut sont implments :
Constructeurs : exemple
class Point { int _x, _y; public : Point() : _x(0), _y(0) {}
// Constructeur par dfaut ; celui qui est appel lors d'une dclaration du type : // Point p;
};
Elments de syntaxe
Destructeurs
Rle : librer la mmoire ! Appels automatiquement la fin de la porte de l'objet (fermeture d'accolade } ) Par dfaut un destructeur vide est implment
Destructeur : exemple
class Tableau { int *_t; public: Tableau(int s = 10) { _t = new int[s]; } ~Tableau() { delete [] _t; } }; { Tableau T; } // Destructeur ~Tableau() appel automatiquement
// en fin de porte
Sparation dclaration/implantation
Fichier Point.h :
Class Point { int _x, _y; Public: int abscisse() const; };
Fichier Point.cpp :
Point::Point() : _x(0), _y(0) {} int Point::abscisse() const {return _x;}
Rfrences croises
Problme : titi.h
#include "toto.h" class titi { void f1(toto t); };
toto.h
#include "titi.h" class toto { void f1(titi t); };
toto.cpp
#include "toto.h" void toto::f1(titi t){}
titi.cpp
#include "titi.h" void titi::f1(toto t){}
NE FONCTIONNE PAS !!
Rfrences croises
Solution : prdclarations
titi.h
class toto; class titi { void f1(toto t); };
toto.h
class titi; class toto { void f1(titi t); };
toto.cpp
#include "toto.h" #include "titi.h" void toto::f1(titi t){}
titi.cpp
#include "titi.h" #include "toto.h" void titi::f1(toto t){}