SlideShare une entreprise Scribd logo
1  sur  6
Télécharger pour lire hors ligne
[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 objetkemenaran
 
System c eniso_jan_fev_07
System c eniso_jan_fev_07System c eniso_jan_fev_07
System c eniso_jan_fev_07haythem_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 simplesPethrvs
 
Chap3 programmation modulaire en python
Chap3 programmation modulaire en pythonChap3 programmation modulaire en python
Chap3 programmation modulaire en pythonMariem ZAOUALI
 
Ebook matlab
Ebook matlabEbook matlab
Ebook matlabN NASRI
 
C# et .NET : Enigmes et puzzles
C# et .NET : Enigmes  et puzzlesC# et .NET : Enigmes  et puzzles
C# et .NET : Enigmes et puzzlesMicrosoft
 
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++11Microsoft
 
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++ ModerneMicrosoft
 
Chapitre5: Classes et objets
Chapitre5: Classes et objetsChapitre5: Classes et objets
Chapitre5: Classes et objetsAziz Darouichi
 
Formation C# - Cours 4
Formation C# - Cours 4Formation C# - Cours 4
Formation C# - Cours 4kemenaran
 
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éesECAM 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 CourseHaytam EL YOUSSFI
 
Debutermatlab
DebutermatlabDebutermatlab
Debutermatlabnejmzad
 
C++ Metaprogramming : multidimensional typelist
C++ Metaprogramming : multidimensional typelistC++ Metaprogramming : multidimensional typelist
C++ Metaprogramming : multidimensional typelistVincent 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

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.1Laurent 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-fundamentalsCERTyou Formation
 
Deuxième partie.pptx
Deuxième partie.pptxDeuxième partie.pptx
Deuxième partie.pptxSafaeLhr1
 
Chapitre4 cours de java
Chapitre4 cours de javaChapitre4 cours de java
Chapitre4 cours de javainfo1994
 
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.docxkhawla sdid
 
Memojava 100604104941-phpapp02
Memojava 100604104941-phpapp02Memojava 100604104941-phpapp02
Memojava 100604104941-phpapp02Rahma Boufalgha
 
Cours java smi 2007 2008
Cours java smi 2007 2008Cours java smi 2007 2008
Cours java smi 2007 2008Khalil Lechheb
 
Cours java smi 2007 2008
Cours java smi 2007 2008Cours java smi 2007 2008
Cours java smi 2007 2008Khalil Lechheb
 
Correction Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfCorrection Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfslimyaich3
 
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.3Laurent 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.5Laurent BUNIET
 
Chap 2--POO avec JAVA.pdf
Chap 2--POO avec JAVA.pdfChap 2--POO avec JAVA.pdf
Chap 2--POO avec JAVA.pdframadanmahdi
 

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
 
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
 
POO-JAVA-partie-1.pdf
POO-JAVA-partie-1.pdfPOO-JAVA-partie-1.pdf
POO-JAVA-partie-1.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 pythonMariem 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ériqueMariem ZAOUALI
 
Chap4 Récursivité en python
Chap4 Récursivité en pythonChap4 Récursivité en python
Chap4 Récursivité en pythonMariem ZAOUALI
 
Chap2 Les conteneurs en python
Chap2 Les conteneurs en pythonChap2 Les conteneurs en python
Chap2 Les conteneurs en pythonMariem ZAOUALI
 
Cours 4 intergiciels orientes messages jms
Cours 4 intergiciels orientes messages  jmsCours 4 intergiciels orientes messages  jms
Cours 4 intergiciels orientes messages jmsMariem ZAOUALI
 
Cours 2 les architectures reparties
Cours 2 les architectures repartiesCours 2 les architectures reparties
Cours 2 les architectures repartiesMariem 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 corbaMariem ZAOUALI
 
Cours 1 les principes de base
Cours 1 les principes de baseCours 1 les principes de base
Cours 1 les principes de baseMariem 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 MatlabMariem ZAOUALI
 
Comment retrouver la forme récursive
Comment retrouver la forme récursiveComment retrouver la forme récursive
Comment retrouver la forme récursiveMariem 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

Bibdoc 2024 - Ecologie du livre et creation de badge.pdf
Bibdoc 2024 - Ecologie du livre et creation de badge.pdfBibdoc 2024 - Ecologie du livre et creation de badge.pdf
Bibdoc 2024 - Ecologie du livre et creation de badge.pdfBibdoc 37
 
PIE-A2-P 5- Supports stagiaires.pptx.pdf
PIE-A2-P 5- Supports stagiaires.pptx.pdfPIE-A2-P 5- Supports stagiaires.pptx.pdf
PIE-A2-P 5- Supports stagiaires.pptx.pdfRiDaHAziz
 
Bibdoc 2024 - L’Éducation aux Médias et à l’Information face à l’intelligence...
Bibdoc 2024 - L’Éducation aux Médias et à l’Information face à l’intelligence...Bibdoc 2024 - L’Éducation aux Médias et à l’Information face à l’intelligence...
Bibdoc 2024 - L’Éducation aux Médias et à l’Information face à l’intelligence...Bibdoc 37
 
Présentation - Initiatives - CECOSDA - OIF - Fact Checking.pptx
Présentation - Initiatives - CECOSDA - OIF - Fact Checking.pptxPrésentation - Initiatives - CECOSDA - OIF - Fact Checking.pptx
Présentation - Initiatives - CECOSDA - OIF - Fact Checking.pptxJCAC
 
La Base unique départementale - Quel bilan, au bout de 5 ans .pdf
La Base unique départementale - Quel bilan, au bout de 5 ans .pdfLa Base unique départementale - Quel bilan, au bout de 5 ans .pdf
La Base unique départementale - Quel bilan, au bout de 5 ans .pdfbdp12
 
DIGNITAS INFINITA - DIGNITÉ HUMAINE; déclaration du dicastère .pptx
DIGNITAS INFINITA - DIGNITÉ HUMAINE; déclaration du dicastère .pptxDIGNITAS INFINITA - DIGNITÉ HUMAINE; déclaration du dicastère .pptx
DIGNITAS INFINITA - DIGNITÉ HUMAINE; déclaration du dicastère .pptxMartin M Flynn
 
Faut-il avoir peur de la technique ? (G. Gay-Para)
Faut-il avoir peur de la technique ? (G. Gay-Para)Faut-il avoir peur de la technique ? (G. Gay-Para)
Faut-il avoir peur de la technique ? (G. Gay-Para)Gabriel Gay-Para
 
Pas de vagues. pptx Film français
Pas de vagues.  pptx      Film   françaisPas de vagues.  pptx      Film   français
Pas de vagues. pptx Film françaisTxaruka
 
Vulnérabilité numérique d’usage : un enjeu pour l’aide à la réussitepdf
Vulnérabilité numérique d’usage : un enjeu pour l’aide à la réussitepdfVulnérabilité numérique d’usage : un enjeu pour l’aide à la réussitepdf
Vulnérabilité numérique d’usage : un enjeu pour l’aide à la réussitepdfSylvianeBachy
 
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdf
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdfBibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdf
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdfBibdoc 37
 
Pas de vagues. pptx Film français
Pas de vagues.  pptx   Film     françaisPas de vagues.  pptx   Film     français
Pas de vagues. pptx Film françaisTxaruka
 
Chana Orloff.pptx Sculptrice franco-ukranienne
Chana Orloff.pptx Sculptrice franco-ukranienneChana Orloff.pptx Sculptrice franco-ukranienne
Chana Orloff.pptx Sculptrice franco-ukranienneTxaruka
 
Apprendre avec des top et nano influenceurs
Apprendre avec des top et nano influenceursApprendre avec des top et nano influenceurs
Apprendre avec des top et nano influenceursStagiaireLearningmat
 
Bernard Réquichot.pptx Peintre français
Bernard Réquichot.pptx   Peintre françaisBernard Réquichot.pptx   Peintre français
Bernard Réquichot.pptx Peintre françaisTxaruka
 
Potentiel du Maroc en Produits du Terroir et Stratégie Adoptée pour le dévelo...
Potentiel du Maroc en Produits du Terroir et Stratégie Adoptée pour le dévelo...Potentiel du Maroc en Produits du Terroir et Stratégie Adoptée pour le dévelo...
Potentiel du Maroc en Produits du Terroir et Stratégie Adoptée pour le dévelo...NaimDoumissi
 
Cours de Management des Systèmes d'information
Cours de Management des Systèmes d'informationCours de Management des Systèmes d'information
Cours de Management des Systèmes d'informationpapediallo3
 
PIE-A2-P4-support stagiaires sept 22-validé.pdf
PIE-A2-P4-support stagiaires sept 22-validé.pdfPIE-A2-P4-support stagiaires sept 22-validé.pdf
PIE-A2-P4-support stagiaires sept 22-validé.pdfRiDaHAziz
 

Dernier (18)

Bibdoc 2024 - Ecologie du livre et creation de badge.pdf
Bibdoc 2024 - Ecologie du livre et creation de badge.pdfBibdoc 2024 - Ecologie du livre et creation de badge.pdf
Bibdoc 2024 - Ecologie du livre et creation de badge.pdf
 
PIE-A2-P 5- Supports stagiaires.pptx.pdf
PIE-A2-P 5- Supports stagiaires.pptx.pdfPIE-A2-P 5- Supports stagiaires.pptx.pdf
PIE-A2-P 5- Supports stagiaires.pptx.pdf
 
Bulletin des bibliotheques Burkina Faso mars 2024
Bulletin des bibliotheques Burkina Faso mars 2024Bulletin des bibliotheques Burkina Faso mars 2024
Bulletin des bibliotheques Burkina Faso mars 2024
 
Bibdoc 2024 - L’Éducation aux Médias et à l’Information face à l’intelligence...
Bibdoc 2024 - L’Éducation aux Médias et à l’Information face à l’intelligence...Bibdoc 2024 - L’Éducation aux Médias et à l’Information face à l’intelligence...
Bibdoc 2024 - L’Éducation aux Médias et à l’Information face à l’intelligence...
 
Présentation - Initiatives - CECOSDA - OIF - Fact Checking.pptx
Présentation - Initiatives - CECOSDA - OIF - Fact Checking.pptxPrésentation - Initiatives - CECOSDA - OIF - Fact Checking.pptx
Présentation - Initiatives - CECOSDA - OIF - Fact Checking.pptx
 
La Base unique départementale - Quel bilan, au bout de 5 ans .pdf
La Base unique départementale - Quel bilan, au bout de 5 ans .pdfLa Base unique départementale - Quel bilan, au bout de 5 ans .pdf
La Base unique départementale - Quel bilan, au bout de 5 ans .pdf
 
DIGNITAS INFINITA - DIGNITÉ HUMAINE; déclaration du dicastère .pptx
DIGNITAS INFINITA - DIGNITÉ HUMAINE; déclaration du dicastère .pptxDIGNITAS INFINITA - DIGNITÉ HUMAINE; déclaration du dicastère .pptx
DIGNITAS INFINITA - DIGNITÉ HUMAINE; déclaration du dicastère .pptx
 
Faut-il avoir peur de la technique ? (G. Gay-Para)
Faut-il avoir peur de la technique ? (G. Gay-Para)Faut-il avoir peur de la technique ? (G. Gay-Para)
Faut-il avoir peur de la technique ? (G. Gay-Para)
 
Pas de vagues. pptx Film français
Pas de vagues.  pptx      Film   françaisPas de vagues.  pptx      Film   français
Pas de vagues. pptx Film français
 
Vulnérabilité numérique d’usage : un enjeu pour l’aide à la réussitepdf
Vulnérabilité numérique d’usage : un enjeu pour l’aide à la réussitepdfVulnérabilité numérique d’usage : un enjeu pour l’aide à la réussitepdf
Vulnérabilité numérique d’usage : un enjeu pour l’aide à la réussitepdf
 
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdf
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdfBibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdf
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdf
 
Pas de vagues. pptx Film français
Pas de vagues.  pptx   Film     françaisPas de vagues.  pptx   Film     français
Pas de vagues. pptx Film français
 
Chana Orloff.pptx Sculptrice franco-ukranienne
Chana Orloff.pptx Sculptrice franco-ukranienneChana Orloff.pptx Sculptrice franco-ukranienne
Chana Orloff.pptx Sculptrice franco-ukranienne
 
Apprendre avec des top et nano influenceurs
Apprendre avec des top et nano influenceursApprendre avec des top et nano influenceurs
Apprendre avec des top et nano influenceurs
 
Bernard Réquichot.pptx Peintre français
Bernard Réquichot.pptx   Peintre françaisBernard Réquichot.pptx   Peintre français
Bernard Réquichot.pptx Peintre français
 
Potentiel du Maroc en Produits du Terroir et Stratégie Adoptée pour le dévelo...
Potentiel du Maroc en Produits du Terroir et Stratégie Adoptée pour le dévelo...Potentiel du Maroc en Produits du Terroir et Stratégie Adoptée pour le dévelo...
Potentiel du Maroc en Produits du Terroir et Stratégie Adoptée pour le dévelo...
 
Cours de Management des Systèmes d'information
Cours de Management des Systèmes d'informationCours de Management des Systèmes d'information
Cours de Management des Systèmes d'information
 
PIE-A2-P4-support stagiaires sept 22-validé.pdf
PIE-A2-P4-support stagiaires sept 22-validé.pdfPIE-A2-P4-support stagiaires sept 22-validé.pdf
PIE-A2-P4-support stagiaires sept 22-validé.pdf
 

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; }