structures de données et algorithmes – tp2 maria-iuliana dascalu [email protected]
TRANSCRIPT
Structures de données et algorithmes – TP2
Maria-Iuliana [email protected]
Objectifs pour aujourd’hui
• Transition de C (TP1) à C++ (TP2)• Struct vs. classes en C++• Templates
Exercice 1
• Implémentez une fonction pour trier un tableau de 5 éléments de type double. Utilisez un mécanisme d'échange, qui doit être mis en œuvre dans une autre fonction.
• (Tip: Passage par valeur/passage par référence)
Exercice 2
• Ajoutez à classe complex de nouvelles méthodes pour l'ajout, la division et la multiplication de nombres complexes.
#include <iostream>class complex {public:
complex();// constructor without paramscomplex(double param_re, double param_im){//constructor
// use to initialize the members of the class with values and to allocates memory for some membersthis->re=param_re;//re=param_re;this->im=param_im;//im=param_im;
}double getRe(){//method: getter
return re;}double getIm(){//method
return im;}complex complex_conjugate() {//method
complex conjugate(re,-im);//object of type complex return conjugate; }private:
double re; double im;};int main(){ complex number(2,3);// number is an object and complex is a class cout<<"The complex number is: "<<number.getRe()<<"+"<<number.getIm()<<"i"<<"\n";//number.getRe() is a method call complex conj=number.complex_conjugate(); cout<<"The conjugate number is: "<<conj.getRe()<<conj.getIm()<<"i"<<"\n"; return 0;}
Template classtemplate<typename T>class KeyStorage{
public: int key;
T member; //a generic member: we don't know its type when creating the class};int main(){ //Everything happens to compile time, not to run time
//The compiler analyses the way in which you use the classKeyStorage<long> keyElement1; KeyStorage<int> keyElement2; return 0;
}
Exercice 3
• Faisez un constructeur, un destructeur, un getter et un setter pour la classe de modèle KeyStorage.
Aussi bon…#include <iostream.h>template<typename Tip1, typename Tip2>class KeyStorage{public: int key; Tip1 member1; //a generic member: we don't know its type when creating the class Tip2 member2;};int main(){
KeyStorage<long, char> keyElement1;keyElement1.key=1;keyElement1.member1 = 6;keyElement1.member2 = 's';cout<<keyElement1.key<<keyElement1.member1<<keyElement1.member2<<"\n";
return 0;}
Function Templates
template<typename T> T getMax(T a, T b) {
return a > b ? a : b; }……………………………………………………..
getMax<int>(2, 3);getMax<double>(3.2, 4.6);
Exercice 4
• Considérons la fonction suivante qui échange deux objets:template <class T> void swap(T& ob1, T& ob2) { T aux = ob1; ob1 = ob2; ob2 = aux;}Mettez en oeuvre une fonction qui trie un tableau de N = 5
éléments de type double à l'aide de la fonction ci-dessus.
Exercice 5• Mettez en oeuvre la structure suivante nommée Point:struct Point{ //public: int coord_x, coord_y;//the coordinates of a point void reset() //places the point into the origin { coord_x = coord_y = 0; } void moveX(int x); //moves the point horizontally with x positions void moveY(int y); // moves the point vertically with y positions void moveXY(int x , int y); // moves the point horizontally and vertically};Faisez un programme dans lequel on mettre en oeuvre le déplacement d'un point à l'intérieur les
coordonnées d'un rectangle ayant les dimensions 1 x N (N étant donné par l'utilisateur), en partant de l'origine.
Compilez et exécutez l'application! Ensuite, remplacez struct avec classe et faisez la même chose!
Exercice 6• Considérons la structure de Ex.5 et la fonction suivante qui échange deux
objets de type Point!void Schimba(Point &A, Point &B){ int x = A.coord_x; A.coord_x = B.coord_x; B.coord_x = x;
int y = A.coord_y; A.coord_y = B.coord_y; B.coord_y = y;}Créez un programme qui trie 5 points, en prenant en compte la distance de
l'origine.
Devoir
• Terminez les exercices donnés en classe!!!
• Ecrivez un programme en C++ dans laquelle vous définissez une classe nommée BankAccount qui contient les opérations bancaires usuelles (dépôt, retrait, afficher équilibre, propriétaire d'affichage). Testez la classe.