SlideShare une entreprise Scribd logo
[TP N°4 : INITIATION AU MONDE DE LA PROGRAMMATION C++] Atelier C++
INSTITUT NATIONAL DES SCIENCES APPLIQUEES ET DE TECHNOLOGIE - TUNISIE 1
Prof : Mariem ZAOUALI – Niveau : GL2
1. Objectif de la séance
Le but de la séance est de manipuler les notions suivantes :
 Fonctions amies
 Surcharge des opérateurs
 Sauvegarde dans un fichier et récupération des données
NB : Durant ce TP, créez les fichiers headers et leurs implémentations, le main fera l’objet d’un fichier .cpp à
part
2. Fonctions amies
On va reprendre l’exemple du cours. On veut développer une fonction intitulée
vecteur produit (const matrice &, const vecteur &)
avec :
 Vecteur est le type de retour de la fonction produit
 Vecteur et matrice sont deux classes à définir
o Vecteur
 Attribut : un tableau double de taille 3
 Méthodes : Un constructeur et une méthode membre d’affichage du vecteur
o Matrice
 Attribut : un tableau de deux dimensions 3x3 de type double
 Méthodes : un constructeur
Question 1 : A votre avis, pourquoi choisit-on le passage de paramètres constants par référence ?
Le passage de paramètres constants nous permet d’être à l’abri de toute tentative de modification de valeur
du paramètre en question. Le passer par référence veut dire qu’on veut éviter de le copier.
En combinant les deux modes ensemble, et c’est bel et bien le cas du constructeur par recopie, l’objet passé
en paramètre ne peut être ni modifié, ni avoir une copie … utile pour un accès en « lecture seule ».
Question 2 : Où peut-on définir cette fonction, dans la classe vecteur ou matrice ? Justifier votre réponse.
Cette fonction doit être définie/déclarée dans une autre classe à part matrice et vecteur.
Ceci est grâce au fait que la signature de la fonction comprend les deux types matrice et vecteur comme
paramètre.
Question 3 : Écrivez un petit programme de test. On fournira séparément les deux déclarations de chacune
des classes, la définition du produit et le programme de test.
//vecteur.h
class matrice; //pour pouvoir compiler la déclaration du vecteur
class vecteur
{
[TP N°4 : INITIATION AU MONDE DE LA PROGRAMMATION C++] Atelier C++
INSTITUT NATIONAL DES SCIENCES APPLIQUEES ET DE TECHNOLOGIE - TUNISIE 2
private:
double tab[3];
public :
vecteur();
vecteur(double,double,double);
void affichage();
friend vecteur produit(const matrice&,const vecteur &);
};
//matrice.h
class vecteur;
class matrice
{
private :
double mat[3][3];
public:
matrice();
matrice(double t[3][3]);
friend vecteur produit(const matrice&,const vecteur&);
};
//vecteur.cpp
#include "vecteur.h"
#include "matrice.h"
#include <iostream>
using namespace std;
vecteur::vecteur()
{
for(int i=0; i<3; i++)
tab[i]=0;
}
vecteur::vecteur(double a,double b,double c)
{
tab[0]=a; tab[1]=b; tab[2]=c;
}
void vecteur::affichage()
{
for (int i=0; i<3; i++)
cout<<tab[i]<<" ";
}
[TP N°4 : INITIATION AU MONDE DE LA PROGRAMMATION C++] Atelier C++
INSTITUT NATIONAL DES SCIENCES APPLIQUEES ET DE TECHNOLOGIE - TUNISIE 3
//matrice.cpp
#include "matrice.h"
#include "vecteur.h"
#include <iostream>
using namespace std;
matrice::matrice()
{
for (int i=0; i<3; i++)
for (int j=0; j<3; j++)
mat[i][j]=0;
}
matrice::matrice (double t [3] [3])
{
int i ; int j ;
for (i=0 ; i<3 ; i++)
for (j=0 ; j<3 ; j++)
mat[i] [j] = t[i] [j] ;
}
//main.cpp
//Définition de la fonction produit
#include "vecteur.h"
#include "matrice.h"
#include <iostream>
using namespace std;
vecteur produit(const matrice &m,const vecteur &x)
{
vecteur v;
for (int i=0; i<3; i++)
for (int j=0; j<3; j++)
v.tab[i] += m.mat[i] [j] * x.tab[j] ;
return v;
}
Int main()
{
vecteur w (1,2,3), res ;
double tab [3][3] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 } ;
matrice a;
//Remplir la matrice a par les valeurs du tab
res = produit(a, w) ;
res.affiche () ;
[TP N°4 : INITIATION AU MONDE DE LA PROGRAMMATION C++] Atelier C++
INSTITUT NATIONAL DES SCIENCES APPLIQUEES ET DE TECHNOLOGIE - TUNISIE 4
return 0 ;
}
3. Surcharge des opérateurs
On va rajouter d’autres méthodes à la classe vecteur. Définissez les opérateurs == et != de manière qu’ils
permettent de tester si deux vecteurs ont les même valeurs ou pas.
a. en utilisant des fonctions membres
// on rajoute ces lignes au niveau de la classe vecteur.h
int operator ==(vecteur);
int operator !=(vecteur);
//définir au niveau de la classe vecteur.cpp
int vecteur::operator == (vecteur v)
{ for (int i=0; i<3; i++)
if(v.tab[i]!=this->tab[i])
return 0;
return 1;
}
int vecteur::operator != (vecteur v)
{
for (int i=0; i<3; i++)
if(v.tab[i]!=this->tab[i])
return 1;
return 0;
}
b. en utilisant des fonctions amies.
// on rajoute ces lignes au niveau de la classe vecteur.h
friend int operator ==(vecteur,vecteur);
friend int operator !=(vecteur,vecteur);
//définir au niveau de la classe main.cpp
Int operator == (vecteur v, vecteur w)
{ for (int i=0; i<3; i++)
if(v.tab[i]!=w.tab[i])
return 0;
return 1;
}
int operator != (vecteur v, vecteur w)
{
for (int i=0; i<3; i++)
if(v.tab[i]!=w.tab[i])
[TP N°4 : INITIATION AU MONDE DE LA PROGRAMMATION C++] Atelier C++
INSTITUT NATIONAL DES SCIENCES APPLIQUEES ET DE TECHNOLOGIE - TUNISIE 5
return 1;
return 0;
}
4. Sauvegarde dans un fichier et récupération des données
Nous allons manipuler dans ce dernier exercice, la lecture et l’écriture des données d’un fichier avec C++. Il
s’agit d’améliorer l’exercice de Homework fait en TP3. On veut rajouter la possibilité que l’utilisateur peut
enregistrer le contenu de la map dans un fichier, ou remplir la map à partir d’un fichier.
 Q1 : Rajoutez une méthode où vous stockez les données de la map dans un fichier.
//On suppose que la classe est appelée event
void event::insert_file(string file_name)
//Dans event.h , l’entête de la méthode sera la suivante
void event::insert_file(string file_name)
{
ofstream fichier(file_name,ios::out);
if(fichier)
{
map<int,string>::iterator it;
//ici map est un attribut de la classe event
for(it=map.begin();it!=map.end();it++)
{
fichier<<it->first<<'-';
i=0;
while(it->second[i]!='0')
{
//on suppose que le séparateur dans la chaine est #
if(it->second[i]==',')
fichier<<'#';
else
fichier<<it->second[i];
i++;
}
fichier<<"n";
}
fichier.close();
}
else
cerr<<"impossible d’ouvrir le fichier "<<endl;
}
 Q2 : Rajoutez une méthode où vous lisez les données contenues dans un fichier et vous remplissez la
map
[TP N°4 : INITIATION AU MONDE DE LA PROGRAMMATION C++] Atelier C++
INSTITUT NATIONAL DES SCIENCES APPLIQUEES ET DE TECHNOLOGIE - TUNISIE 6
void event::read_from_file(string file_name)
{
ifstream fichier(file_name, ios::in);
if(fichier)
{
string ligne,res=””,l=””;
int a,i;
while(getline(fichier,ligne))
{
i=0;
while(ligne[i]!='-')
{
res=res+ligne[i];
i++;
}
res[i]='0';
//convertir un tableau de char en entier
a=atoi(res);
i++;
while(ligne[i]!='0')
{
//séparateur dans la valeur de la map est « , »
if(ligne[i]=='#')
l=l+",";
else
l=l+ligne[i];
i++;
}
this->add_event(a,l);
}
fichier.close();
}
else
cerr<<"impossible d'ouvrir le fichier"<<endl;
}

Contenu connexe

Tendances

Formation C# - Cours 3 - Programmation objet
Formation C# - Cours 3 - Programmation objetFormation C# - Cours 3 - Programmation objet
Formation C# - Cours 3 - Programmation objet
kemenaran
 
C# langage & syntaxe
C#   langage & syntaxeC#   langage & syntaxe
C# langage & syntaxe
Mahfoud EL HOUDAIGUI
 
System c eniso_jan_fev_07
System c eniso_jan_fev_07System c eniso_jan_fev_07
System c eniso_jan_fev_07
haythem_2015
 
programmation orienté objet c++
programmation orienté objet c++programmation orienté objet c++
programmation orienté objet c++
coursuniv
 
C++11 en 12 exemples simples
C++11 en 12 exemples simplesC++11 en 12 exemples simples
C++11 en 12 exemples simples
Pethrvs
 
Chap3 programmation modulaire en python
Chap3 programmation modulaire en pythonChap3 programmation modulaire en python
Chap3 programmation modulaire en python
Mariem ZAOUALI
 
Ebook matlab
Ebook matlabEbook matlab
Ebook matlab
N NASRI
 
Polymorphisme, interface et classe abstraite
Polymorphisme, interface et classe abstraitePolymorphisme, interface et classe abstraite
Polymorphisme, interface et classe abstraite
ECAM Brussels Engineering School
 
C# et .NET : Enigmes et puzzles
C# et .NET : Enigmes  et puzzlesC# et .NET : Enigmes  et puzzles
C# et .NET : Enigmes et puzzles
Microsoft
 
Composition, agrégation et immuabilité
Composition, agrégation et immuabilitéComposition, agrégation et immuabilité
Composition, agrégation et immuabilité
ECAM Brussels Engineering School
 
Développer en natif avec C++11
Développer en natif avec C++11Développer en natif avec C++11
Développer en natif avec C++11
Microsoft
 
Les nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ ModerneLes nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ Moderne
Microsoft
 
Chapitre5: Classes et objets
Chapitre5: Classes et objetsChapitre5: Classes et objets
Chapitre5: Classes et objets
Aziz Darouichi
 
Formation C# - Cours 4
Formation C# - Cours 4Formation C# - Cours 4
Formation C# - Cours 4
kemenaran
 
Python avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de donnéesPython avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de données
ECAM Brussels Engineering School
 
Python For Data Science - French Course
Python For Data Science - French CoursePython For Data Science - French Course
Python For Data Science - French Course
Haytam EL YOUSSFI
 
Debutermatlab
DebutermatlabDebutermatlab
Debutermatlab
nejmzad
 
Td pascal tdD
Td pascal tdDTd pascal tdD
Td pascal tdD
Chawki Riadh
 
C++ Metaprogramming : multidimensional typelist
C++ Metaprogramming : multidimensional typelistC++ Metaprogramming : multidimensional typelist
C++ Metaprogramming : multidimensional typelist
Vincent Agnus
 

Tendances (20)

Formation C# - Cours 3 - Programmation objet
Formation C# - Cours 3 - Programmation objetFormation C# - Cours 3 - Programmation objet
Formation C# - Cours 3 - Programmation objet
 
C# langage & syntaxe
C#   langage & syntaxeC#   langage & syntaxe
C# langage & syntaxe
 
System c eniso_jan_fev_07
System c eniso_jan_fev_07System c eniso_jan_fev_07
System c eniso_jan_fev_07
 
programmation orienté objet c++
programmation orienté objet c++programmation orienté objet c++
programmation orienté objet c++
 
C++11 en 12 exemples simples
C++11 en 12 exemples simplesC++11 en 12 exemples simples
C++11 en 12 exemples simples
 
Chap3 programmation modulaire en python
Chap3 programmation modulaire en pythonChap3 programmation modulaire en python
Chap3 programmation modulaire en python
 
Ebook matlab
Ebook matlabEbook matlab
Ebook matlab
 
Polymorphisme, interface et classe abstraite
Polymorphisme, interface et classe abstraitePolymorphisme, interface et classe abstraite
Polymorphisme, interface et classe abstraite
 
C# et .NET : Enigmes et puzzles
C# et .NET : Enigmes  et puzzlesC# et .NET : Enigmes  et puzzles
C# et .NET : Enigmes et puzzles
 
Composition, agrégation et immuabilité
Composition, agrégation et immuabilitéComposition, agrégation et immuabilité
Composition, agrégation et immuabilité
 
Développer en natif avec C++11
Développer en natif avec C++11Développer en natif avec C++11
Développer en natif avec C++11
 
Les nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ ModerneLes nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ Moderne
 
Chapitre5: Classes et objets
Chapitre5: Classes et objetsChapitre5: Classes et objets
Chapitre5: Classes et objets
 
Formation C# - Cours 4
Formation C# - Cours 4Formation C# - Cours 4
Formation C# - Cours 4
 
Csharp2014
Csharp2014Csharp2014
Csharp2014
 
Python avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de donnéesPython avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de données
 
Python For Data Science - French Course
Python For Data Science - French CoursePython For Data Science - French Course
Python For Data Science - French Course
 
Debutermatlab
DebutermatlabDebutermatlab
Debutermatlab
 
Td pascal tdD
Td pascal tdDTd pascal tdD
Td pascal tdD
 
C++ Metaprogramming : multidimensional typelist
C++ Metaprogramming : multidimensional typelistC++ Metaprogramming : multidimensional typelist
C++ Metaprogramming : multidimensional typelist
 

Similaire à Correction TP4 Atelier C++ /GL2 INSAT / Tunisie

POO-chapitre3.pptx
POO-chapitre3.pptxPOO-chapitre3.pptx
POO-chapitre3.pptx
ImaneLoukili7
 
Pensez objets avec java
Pensez objets avec javaPensez objets avec java
Pensez objets avec java
Asmaa BENGUEDDACH
 
Programmation_Orientée_Objet_POO-cours.pdf
Programmation_Orientée_Objet_POO-cours.pdfProgrammation_Orientée_Objet_POO-cours.pdf
Programmation_Orientée_Objet_POO-cours.pdf
hakima29
 
Cours de C++, en français, 2002 - Cours 2.1
Cours de C++, en français, 2002 - Cours 2.1Cours de C++, en français, 2002 - Cours 2.1
Cours de C++, en français, 2002 - Cours 2.1
Laurent BUNIET
 
6 t130g formation-ibm-websphere-transformation-extender-v8-3-fundamentals
6 t130g formation-ibm-websphere-transformation-extender-v8-3-fundamentals6 t130g formation-ibm-websphere-transformation-extender-v8-3-fundamentals
6 t130g formation-ibm-websphere-transformation-extender-v8-3-fundamentals
CERTyou Formation
 
Deuxième partie.pptx
Deuxième partie.pptxDeuxième partie.pptx
Deuxième partie.pptx
SafaeLhr1
 
Cours c++
Cours c++Cours c++
Cours c++
Nahla BelHaj
 
Chapitre4 cours de java
Chapitre4 cours de javaChapitre4 cours de java
Chapitre4 cours de java
info1994
 
1 tdi synthese_principale_v2_2015.docx
1 tdi synthese_principale_v2_2015.docx1 tdi synthese_principale_v2_2015.docx
1 tdi synthese_principale_v2_2015.docx
khawla sdid
 
Fascicule tp programmation c
Fascicule tp programmation cFascicule tp programmation c
Fascicule tp programmation c
Missaoui Abdelbaki
 
Memojava 100604104941-phpapp02
Memojava 100604104941-phpapp02Memojava 100604104941-phpapp02
Memojava 100604104941-phpapp02
Rahma Boufalgha
 
Cours java smi 2007 2008
Cours java smi 2007 2008Cours java smi 2007 2008
Cours java smi 2007 2008
Khalil Lechheb
 
Cours java smi 2007 2008
Cours java smi 2007 2008Cours java smi 2007 2008
Cours java smi 2007 2008
Khalil Lechheb
 
Correction Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfCorrection Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdf
slimyaich3
 
Memo java
Memo javaMemo java
Memo java
Ghazouani Mahdi
 
Cours de C++, en français, 2002 - Cours 2.3
Cours de C++, en français, 2002 - Cours 2.3Cours de C++, en français, 2002 - Cours 2.3
Cours de C++, en français, 2002 - Cours 2.3
Laurent BUNIET
 
Cours de C++, en français, 2002 - Cours 3.5
Cours de C++, en français, 2002 - Cours 3.5Cours de C++, en français, 2002 - Cours 3.5
Cours de C++, en français, 2002 - Cours 3.5
Laurent BUNIET
 
Chap 2--POO avec JAVA.pdf
Chap 2--POO avec JAVA.pdfChap 2--POO avec JAVA.pdf
Chap 2--POO avec JAVA.pdf
ramadanmahdi
 

Similaire à Correction TP4 Atelier C++ /GL2 INSAT / Tunisie (20)

POO-chapitre3.pptx
POO-chapitre3.pptxPOO-chapitre3.pptx
POO-chapitre3.pptx
 
Pensez objets avec java
Pensez objets avec javaPensez objets avec java
Pensez objets avec java
 
Programmation_Orientée_Objet_POO-cours.pdf
Programmation_Orientée_Objet_POO-cours.pdfProgrammation_Orientée_Objet_POO-cours.pdf
Programmation_Orientée_Objet_POO-cours.pdf
 
Ch03
Ch03Ch03
Ch03
 
Cours de C++, en français, 2002 - Cours 2.1
Cours de C++, en français, 2002 - Cours 2.1Cours de C++, en français, 2002 - Cours 2.1
Cours de C++, en français, 2002 - Cours 2.1
 
6 t130g formation-ibm-websphere-transformation-extender-v8-3-fundamentals
6 t130g formation-ibm-websphere-transformation-extender-v8-3-fundamentals6 t130g formation-ibm-websphere-transformation-extender-v8-3-fundamentals
6 t130g formation-ibm-websphere-transformation-extender-v8-3-fundamentals
 
Deuxième partie.pptx
Deuxième partie.pptxDeuxième partie.pptx
Deuxième partie.pptx
 
Cours c++
Cours c++Cours c++
Cours c++
 
Chapitre4 cours de java
Chapitre4 cours de javaChapitre4 cours de java
Chapitre4 cours de java
 
1 tdi synthese_principale_v2_2015.docx
1 tdi synthese_principale_v2_2015.docx1 tdi synthese_principale_v2_2015.docx
1 tdi synthese_principale_v2_2015.docx
 
Fascicule tp programmation c
Fascicule tp programmation cFascicule tp programmation c
Fascicule tp programmation c
 
Serie
SerieSerie
Serie
 
Memojava 100604104941-phpapp02
Memojava 100604104941-phpapp02Memojava 100604104941-phpapp02
Memojava 100604104941-phpapp02
 
Cours java smi 2007 2008
Cours java smi 2007 2008Cours java smi 2007 2008
Cours java smi 2007 2008
 
Cours java smi 2007 2008
Cours java smi 2007 2008Cours java smi 2007 2008
Cours java smi 2007 2008
 
Correction Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfCorrection Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdf
 
Memo java
Memo javaMemo java
Memo java
 
Cours de C++, en français, 2002 - Cours 2.3
Cours de C++, en français, 2002 - Cours 2.3Cours de C++, en français, 2002 - Cours 2.3
Cours de C++, en français, 2002 - Cours 2.3
 
Cours de C++, en français, 2002 - Cours 3.5
Cours de C++, en français, 2002 - Cours 3.5Cours de C++, en français, 2002 - Cours 3.5
Cours de C++, en français, 2002 - Cours 3.5
 
Chap 2--POO avec JAVA.pdf
Chap 2--POO avec JAVA.pdfChap 2--POO avec JAVA.pdf
Chap 2--POO avec JAVA.pdf
 

Plus de Mariem ZAOUALI

Chap5 La manipulation des iterables en python
Chap5 La manipulation des iterables en pythonChap5 La manipulation des iterables en python
Chap5 La manipulation des iterables en python
Mariem ZAOUALI
 
Chap6 Manipulation des fichiers
Chap6 Manipulation des fichiers Chap6 Manipulation des fichiers
Chap6 Manipulation des fichiers
Mariem ZAOUALI
 
Chap7 simulation numérique
Chap7 simulation numériqueChap7 simulation numérique
Chap7 simulation numérique
Mariem ZAOUALI
 
Chap4 Récursivité en python
Chap4 Récursivité en pythonChap4 Récursivité en python
Chap4 Récursivité en python
Mariem ZAOUALI
 
Chap2 Les conteneurs en python
Chap2 Les conteneurs en pythonChap2 Les conteneurs en python
Chap2 Les conteneurs en python
Mariem ZAOUALI
 
TP2 RMI
TP2 RMITP2 RMI
Cours 4 intergiciels orientes messages jms
Cours 4 intergiciels orientes messages  jmsCours 4 intergiciels orientes messages  jms
Cours 4 intergiciels orientes messages jms
Mariem ZAOUALI
 
Cours 2 les architectures reparties
Cours 2 les architectures repartiesCours 2 les architectures reparties
Cours 2 les architectures reparties
Mariem ZAOUALI
 
Cours 3 les objets distants rmi corba
Cours 3 les objets distants rmi corbaCours 3 les objets distants rmi corba
Cours 3 les objets distants rmi corba
Mariem ZAOUALI
 
Cours 1 les principes de base
Cours 1 les principes de baseCours 1 les principes de base
Cours 1 les principes de base
Mariem ZAOUALI
 
TP1 Traitement d'images Génie Logiciel avec Matlab
TP1 Traitement d'images Génie Logiciel avec MatlabTP1 Traitement d'images Génie Logiciel avec Matlab
TP1 Traitement d'images Génie Logiciel avec Matlab
Mariem ZAOUALI
 
Comment retrouver la forme récursive
Comment retrouver la forme récursiveComment retrouver la forme récursive
Comment retrouver la forme récursive
Mariem ZAOUALI
 
Graduation Project Presentation _ INSAT Tunisia
Graduation Project Presentation _ INSAT Tunisia Graduation Project Presentation _ INSAT Tunisia
Graduation Project Presentation _ INSAT Tunisia
Mariem ZAOUALI
 

Plus de Mariem ZAOUALI (13)

Chap5 La manipulation des iterables en python
Chap5 La manipulation des iterables en pythonChap5 La manipulation des iterables en python
Chap5 La manipulation des iterables en python
 
Chap6 Manipulation des fichiers
Chap6 Manipulation des fichiers Chap6 Manipulation des fichiers
Chap6 Manipulation des fichiers
 
Chap7 simulation numérique
Chap7 simulation numériqueChap7 simulation numérique
Chap7 simulation numérique
 
Chap4 Récursivité en python
Chap4 Récursivité en pythonChap4 Récursivité en python
Chap4 Récursivité en python
 
Chap2 Les conteneurs en python
Chap2 Les conteneurs en pythonChap2 Les conteneurs en python
Chap2 Les conteneurs en python
 
TP2 RMI
TP2 RMITP2 RMI
TP2 RMI
 
Cours 4 intergiciels orientes messages jms
Cours 4 intergiciels orientes messages  jmsCours 4 intergiciels orientes messages  jms
Cours 4 intergiciels orientes messages jms
 
Cours 2 les architectures reparties
Cours 2 les architectures repartiesCours 2 les architectures reparties
Cours 2 les architectures reparties
 
Cours 3 les objets distants rmi corba
Cours 3 les objets distants rmi corbaCours 3 les objets distants rmi corba
Cours 3 les objets distants rmi corba
 
Cours 1 les principes de base
Cours 1 les principes de baseCours 1 les principes de base
Cours 1 les principes de base
 
TP1 Traitement d'images Génie Logiciel avec Matlab
TP1 Traitement d'images Génie Logiciel avec MatlabTP1 Traitement d'images Génie Logiciel avec Matlab
TP1 Traitement d'images Génie Logiciel avec Matlab
 
Comment retrouver la forme récursive
Comment retrouver la forme récursiveComment retrouver la forme récursive
Comment retrouver la forme récursive
 
Graduation Project Presentation _ INSAT Tunisia
Graduation Project Presentation _ INSAT Tunisia Graduation Project Presentation _ INSAT Tunisia
Graduation Project Presentation _ INSAT Tunisia
 

Dernier

La Révolution Bénédictine Casadéenne du Livradois-Forez: De Charlemagne à Fra...
La Révolution Bénédictine Casadéenne du Livradois-Forez: De Charlemagne à Fra...La Révolution Bénédictine Casadéenne du Livradois-Forez: De Charlemagne à Fra...
La Révolution Bénédictine Casadéenne du Livradois-Forez: De Charlemagne à Fra...
Editions La Dondaine
 
Burkina Faso libraries newsletter for June 2024
Burkina Faso libraries newsletter for June 2024Burkina Faso libraries newsletter for June 2024
Burkina Faso libraries newsletter for June 2024
Friends of African Village Libraries
 
1e geo metropolisation metropolisation x
1e geo metropolisation metropolisation x1e geo metropolisation metropolisation x
1e geo metropolisation metropolisation x
NadineHG
 
Droits et devoirs, éthique universitaire..
Droits et devoirs, éthique universitaire..Droits et devoirs, éthique universitaire..
Droits et devoirs, éthique universitaire..
TarikBouchala
 
Auguste Herbin.pptx Peintre français
Auguste   Herbin.pptx Peintre   françaisAuguste   Herbin.pptx Peintre   français
Auguste Herbin.pptx Peintre français
Txaruka
 
A1- Compréhension orale - présentations.pdf
A1- Compréhension orale - présentations.pdfA1- Compréhension orale - présentations.pdf
A1- Compréhension orale - présentations.pdf
lebaobabbleu
 
MÉDIATION ORALE - MON NOUVEL APPARTEMENT.pdf
MÉDIATION ORALE - MON NOUVEL APPARTEMENT.pdfMÉDIATION ORALE - MON NOUVEL APPARTEMENT.pdf
MÉDIATION ORALE - MON NOUVEL APPARTEMENT.pdf
lebaobabbleu
 
1e Espaces productifs 2024.Espaces productif
1e Espaces productifs 2024.Espaces productif1e Espaces productifs 2024.Espaces productif
1e Espaces productifs 2024.Espaces productif
NadineHG
 
Zineb Mekouar.pptx Écrivaine marocaine
Zineb Mekouar.pptx   Écrivaine  marocaineZineb Mekouar.pptx   Écrivaine  marocaine
Zineb Mekouar.pptx Écrivaine marocaine
Txaruka
 
GUIDE POUR L’EVRAS BALISES ET APPRENTISSAGES
GUIDE POUR L’EVRAS BALISES ET APPRENTISSAGESGUIDE POUR L’EVRAS BALISES ET APPRENTISSAGES
GUIDE POUR L’EVRAS BALISES ET APPRENTISSAGES
DjibrilToure5
 

Dernier (10)

La Révolution Bénédictine Casadéenne du Livradois-Forez: De Charlemagne à Fra...
La Révolution Bénédictine Casadéenne du Livradois-Forez: De Charlemagne à Fra...La Révolution Bénédictine Casadéenne du Livradois-Forez: De Charlemagne à Fra...
La Révolution Bénédictine Casadéenne du Livradois-Forez: De Charlemagne à Fra...
 
Burkina Faso libraries newsletter for June 2024
Burkina Faso libraries newsletter for June 2024Burkina Faso libraries newsletter for June 2024
Burkina Faso libraries newsletter for June 2024
 
1e geo metropolisation metropolisation x
1e geo metropolisation metropolisation x1e geo metropolisation metropolisation x
1e geo metropolisation metropolisation x
 
Droits et devoirs, éthique universitaire..
Droits et devoirs, éthique universitaire..Droits et devoirs, éthique universitaire..
Droits et devoirs, éthique universitaire..
 
Auguste Herbin.pptx Peintre français
Auguste   Herbin.pptx Peintre   françaisAuguste   Herbin.pptx Peintre   français
Auguste Herbin.pptx Peintre français
 
A1- Compréhension orale - présentations.pdf
A1- Compréhension orale - présentations.pdfA1- Compréhension orale - présentations.pdf
A1- Compréhension orale - présentations.pdf
 
MÉDIATION ORALE - MON NOUVEL APPARTEMENT.pdf
MÉDIATION ORALE - MON NOUVEL APPARTEMENT.pdfMÉDIATION ORALE - MON NOUVEL APPARTEMENT.pdf
MÉDIATION ORALE - MON NOUVEL APPARTEMENT.pdf
 
1e Espaces productifs 2024.Espaces productif
1e Espaces productifs 2024.Espaces productif1e Espaces productifs 2024.Espaces productif
1e Espaces productifs 2024.Espaces productif
 
Zineb Mekouar.pptx Écrivaine marocaine
Zineb Mekouar.pptx   Écrivaine  marocaineZineb Mekouar.pptx   Écrivaine  marocaine
Zineb Mekouar.pptx Écrivaine marocaine
 
GUIDE POUR L’EVRAS BALISES ET APPRENTISSAGES
GUIDE POUR L’EVRAS BALISES ET APPRENTISSAGESGUIDE POUR L’EVRAS BALISES ET APPRENTISSAGES
GUIDE POUR L’EVRAS BALISES ET APPRENTISSAGES
 

Correction TP4 Atelier C++ /GL2 INSAT / Tunisie

  • 1. [TP N°4 : INITIATION AU MONDE DE LA PROGRAMMATION C++] Atelier C++ INSTITUT NATIONAL DES SCIENCES APPLIQUEES ET DE TECHNOLOGIE - TUNISIE 1 Prof : Mariem ZAOUALI – Niveau : GL2 1. Objectif de la séance Le but de la séance est de manipuler les notions suivantes :  Fonctions amies  Surcharge des opérateurs  Sauvegarde dans un fichier et récupération des données NB : Durant ce TP, créez les fichiers headers et leurs implémentations, le main fera l’objet d’un fichier .cpp à part 2. Fonctions amies On va reprendre l’exemple du cours. On veut développer une fonction intitulée vecteur produit (const matrice &, const vecteur &) avec :  Vecteur est le type de retour de la fonction produit  Vecteur et matrice sont deux classes à définir o Vecteur  Attribut : un tableau double de taille 3  Méthodes : Un constructeur et une méthode membre d’affichage du vecteur o Matrice  Attribut : un tableau de deux dimensions 3x3 de type double  Méthodes : un constructeur Question 1 : A votre avis, pourquoi choisit-on le passage de paramètres constants par référence ? Le passage de paramètres constants nous permet d’être à l’abri de toute tentative de modification de valeur du paramètre en question. Le passer par référence veut dire qu’on veut éviter de le copier. En combinant les deux modes ensemble, et c’est bel et bien le cas du constructeur par recopie, l’objet passé en paramètre ne peut être ni modifié, ni avoir une copie … utile pour un accès en « lecture seule ». Question 2 : Où peut-on définir cette fonction, dans la classe vecteur ou matrice ? Justifier votre réponse. Cette fonction doit être définie/déclarée dans une autre classe à part matrice et vecteur. Ceci est grâce au fait que la signature de la fonction comprend les deux types matrice et vecteur comme paramètre. Question 3 : Écrivez un petit programme de test. On fournira séparément les deux déclarations de chacune des classes, la définition du produit et le programme de test. //vecteur.h class matrice; //pour pouvoir compiler la déclaration du vecteur class vecteur {
  • 2. [TP N°4 : INITIATION AU MONDE DE LA PROGRAMMATION C++] Atelier C++ INSTITUT NATIONAL DES SCIENCES APPLIQUEES ET DE TECHNOLOGIE - TUNISIE 2 private: double tab[3]; public : vecteur(); vecteur(double,double,double); void affichage(); friend vecteur produit(const matrice&,const vecteur &); }; //matrice.h class vecteur; class matrice { private : double mat[3][3]; public: matrice(); matrice(double t[3][3]); friend vecteur produit(const matrice&,const vecteur&); }; //vecteur.cpp #include "vecteur.h" #include "matrice.h" #include <iostream> using namespace std; vecteur::vecteur() { for(int i=0; i<3; i++) tab[i]=0; } vecteur::vecteur(double a,double b,double c) { tab[0]=a; tab[1]=b; tab[2]=c; } void vecteur::affichage() { for (int i=0; i<3; i++) cout<<tab[i]<<" "; }
  • 3. [TP N°4 : INITIATION AU MONDE DE LA PROGRAMMATION C++] Atelier C++ INSTITUT NATIONAL DES SCIENCES APPLIQUEES ET DE TECHNOLOGIE - TUNISIE 3 //matrice.cpp #include "matrice.h" #include "vecteur.h" #include <iostream> using namespace std; matrice::matrice() { for (int i=0; i<3; i++) for (int j=0; j<3; j++) mat[i][j]=0; } matrice::matrice (double t [3] [3]) { int i ; int j ; for (i=0 ; i<3 ; i++) for (j=0 ; j<3 ; j++) mat[i] [j] = t[i] [j] ; } //main.cpp //Définition de la fonction produit #include "vecteur.h" #include "matrice.h" #include <iostream> using namespace std; vecteur produit(const matrice &m,const vecteur &x) { vecteur v; for (int i=0; i<3; i++) for (int j=0; j<3; j++) v.tab[i] += m.mat[i] [j] * x.tab[j] ; return v; } Int main() { vecteur w (1,2,3), res ; double tab [3][3] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 } ; matrice a; //Remplir la matrice a par les valeurs du tab res = produit(a, w) ; res.affiche () ;
  • 4. [TP N°4 : INITIATION AU MONDE DE LA PROGRAMMATION C++] Atelier C++ INSTITUT NATIONAL DES SCIENCES APPLIQUEES ET DE TECHNOLOGIE - TUNISIE 4 return 0 ; } 3. Surcharge des opérateurs On va rajouter d’autres méthodes à la classe vecteur. Définissez les opérateurs == et != de manière qu’ils permettent de tester si deux vecteurs ont les même valeurs ou pas. a. en utilisant des fonctions membres // on rajoute ces lignes au niveau de la classe vecteur.h int operator ==(vecteur); int operator !=(vecteur); //définir au niveau de la classe vecteur.cpp int vecteur::operator == (vecteur v) { for (int i=0; i<3; i++) if(v.tab[i]!=this->tab[i]) return 0; return 1; } int vecteur::operator != (vecteur v) { for (int i=0; i<3; i++) if(v.tab[i]!=this->tab[i]) return 1; return 0; } b. en utilisant des fonctions amies. // on rajoute ces lignes au niveau de la classe vecteur.h friend int operator ==(vecteur,vecteur); friend int operator !=(vecteur,vecteur); //définir au niveau de la classe main.cpp Int operator == (vecteur v, vecteur w) { for (int i=0; i<3; i++) if(v.tab[i]!=w.tab[i]) return 0; return 1; } int operator != (vecteur v, vecteur w) { for (int i=0; i<3; i++) if(v.tab[i]!=w.tab[i])
  • 5. [TP N°4 : INITIATION AU MONDE DE LA PROGRAMMATION C++] Atelier C++ INSTITUT NATIONAL DES SCIENCES APPLIQUEES ET DE TECHNOLOGIE - TUNISIE 5 return 1; return 0; } 4. Sauvegarde dans un fichier et récupération des données Nous allons manipuler dans ce dernier exercice, la lecture et l’écriture des données d’un fichier avec C++. Il s’agit d’améliorer l’exercice de Homework fait en TP3. On veut rajouter la possibilité que l’utilisateur peut enregistrer le contenu de la map dans un fichier, ou remplir la map à partir d’un fichier.  Q1 : Rajoutez une méthode où vous stockez les données de la map dans un fichier. //On suppose que la classe est appelée event void event::insert_file(string file_name) //Dans event.h , l’entête de la méthode sera la suivante void event::insert_file(string file_name) { ofstream fichier(file_name,ios::out); if(fichier) { map<int,string>::iterator it; //ici map est un attribut de la classe event for(it=map.begin();it!=map.end();it++) { fichier<<it->first<<'-'; i=0; while(it->second[i]!='0') { //on suppose que le séparateur dans la chaine est # if(it->second[i]==',') fichier<<'#'; else fichier<<it->second[i]; i++; } fichier<<"n"; } fichier.close(); } else cerr<<"impossible d’ouvrir le fichier "<<endl; }  Q2 : Rajoutez une méthode où vous lisez les données contenues dans un fichier et vous remplissez la map
  • 6. [TP N°4 : INITIATION AU MONDE DE LA PROGRAMMATION C++] Atelier C++ INSTITUT NATIONAL DES SCIENCES APPLIQUEES ET DE TECHNOLOGIE - TUNISIE 6 void event::read_from_file(string file_name) { ifstream fichier(file_name, ios::in); if(fichier) { string ligne,res=””,l=””; int a,i; while(getline(fichier,ligne)) { i=0; while(ligne[i]!='-') { res=res+ligne[i]; i++; } res[i]='0'; //convertir un tableau de char en entier a=atoi(res); i++; while(ligne[i]!='0') { //séparateur dans la valeur de la map est « , » if(ligne[i]=='#') l=l+","; else l=l+ligne[i]; i++; } this->add_event(a,l); } fichier.close(); } else cerr<<"impossible d'ouvrir le fichier"<<endl; }