tp4 atelier c++ /gl2 insat / tunisie

3
[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 ? Question 2 : Où peut-on définir cette fonction, dans la classe vecteur ou matrice ? Justifier votre réponse. Question 3 : Écrivez un petit programme de test. On fournira séparément les deux déclarations de chacune des classes, la définition de produit et le programme de test. 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; b. en utilisant des fonctions amies. 4. Sauvegarde dans un fichier et récupération des données

Upload: mariem-zaouali

Post on 15-Jul-2015

181 views

Category:

Education


0 download

TRANSCRIPT

Page 1: TP4 Atelier C++ /GL2 INSAT / Tunisie

[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 ? Question 2 : Où peut-on définir cette fonction, dans la classe vecteur ou matrice ? Justifier votre réponse. Question 3 : Écrivez un petit programme de test. On fournira séparément les deux déclarations de chacune

des classes, la définition de produit et le programme de test.

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;

b. en utilisant des fonctions amies.

4. Sauvegarde dans un fichier et récupération des données

Page 2: TP4 Atelier C++ /GL2 INSAT / Tunisie

[TP N°4 : INITIATION AU MONDE DE LA PROGRAMMATION C++] Atelier C++

INSTITUT NATIONAL DES SCIENCES APPLIQUEES ET DE TECHNOLOGIE - TUNISIE 2

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.

Q2 : Rajoutez une méthode où vous lisez les données contenues dans un fichier et vous remplissez la

map

Le fichier doit avoir cette structure :

2007-event1#event2#event3# 2008-event1#event2#event3# 2009-event1#event2#event3# 2010-event1#event2#event3#

Annexe : Les flots d’entrée et de sortie dans C++1

Cas de lecture du fichier #include <iostream> #include <fstream> // Cet ajout nous permettra d’utiliser ifstream (flux pour la lecture) et ofstrem pour l’écriture #include <string> using namespace std; int main() { ifstream fichier("test.txt", ios::in); // on ouvre le fichier en lecture – ios ::in mode d’ouverture et in pour dire input if(fichier) // si l'ouverture a réussi { // instructions string contenu; // déclaration d'une chaîne qui contiendra la ligne lue while(getline(fichier, ligne)) // tant que l'on peut mettre la ligne dans "contenu" { cout << ligne << endl; // on l'affiche } fichier.close(); //N’OUBLIEZ PAS DE FERMER LE FICHIER } else // sinon cerr << "Impossible d'ouvrir le fichier !" << endl; return 0;

1 http://openclassrooms.com/courses/lecture-et-ecriture-dans-les-fichiers-en-c

Page 3: TP4 Atelier C++ /GL2 INSAT / Tunisie

[TP N°4 : INITIATION AU MONDE DE LA PROGRAMMATION C++] Atelier C++

INSTITUT NATIONAL DES SCIENCES APPLIQUEES ET DE TECHNOLOGIE - TUNISIE 3

}

Cas de l’écriture du fichier Les modes d'ouverture sont :

ios::out (pour output) : spécifie qu'on ouvre le fichier en écriture. Obligatoire - mais par défaut - quand

on utilise un objet ofstream ;

ios::app (pour append = ajouter à la suite) : lorsqu'on ouvre le fichier en écriture, on se trouve à la fin

pour écrire des données à la suite du fichier (sans effacer le contenu, s'il y en a un). Avec ce mode

d'ouverture, à chaque écriture, on est placé à la fin du fichier, même si on se déplace dans celui-ci avant

(on verra comment se déplacer un peu plus tard );

ios::trunc (pour truncate = tronquer) : lorsqu'on ouvre le fichier en écriture, spécifie qu'il doit être effacé

s'il existe déjà, pour laisser un fichier vide ;

ios::ate (pour at end) : ouvre le fichier en écriture et positionne le curseur à la fin de celui-ci. La

différence avec ios::app est que si on se repositionne dans le fichier, l'écriture ne se fera pas forcément à

la fin du fichier, contrairement à ios::app.

#include <iostream> #include <string> #include <fstream> using namespace std; int main() { ofstream fichier("test.txt", ios::out | ios::trunc); // ouverture en écriture avec effacement du fichier ouvert if(fichier) { string message = " Atelier C++ GL2"; int promotion = 2014; fichier << " C'est la fin de : " << message << '/' << "promotion" << '/' << promotion << endl; fichier << "Bonne continuation " ; fichier.close(); } else cerr << "Impossible d'ouvrir le fichier !" << endl; return 0; }