structures de données et algorithmes – tp2 maria-iuliana dascalu mariaiuliana.dascalu@gmail.com

Post on 03-Apr-2015

110 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Structures de données et algorithmes – TP2

Maria-Iuliana Dascalumariaiuliana.dascalu@gmail.com

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.

top related