• Aucun résultat trouvé

Université de Nice-Sophia Antipolis POLYTECH

N/A
N/A
Protected

Academic year: 2022

Partager "Université de Nice-Sophia Antipolis POLYTECH"

Copied!
2
0
0

Texte intégral

(1)

Université de Nice-Sophia Antipolis POLYTECH

ELEC4 2020–2021

Examen de Programmation C++

Durée : 1h

Aucun document autorisé

Mobiles interdits Nom : Prénom :

1 Questions de cours

I1. Expliquez de façon synthétique ce qu’est UML ? Donnez un exemple d’agré- gation.

voir cours.

. . . . I2. Expliquez de façon synthétique ce qu’est un patron de conception.

voir cours.

. . . . I3. Décrivez et expliquez le patron de conception décorateur. Vous donnerez son

diagramme de classes.

voir cours.

. . . .

2 Programmation

I4. En utilisant, la classestd::ifstreamet ses méthodesis_open,get,eofet close, écrivez la classeFileInputStreamqui permet de lire un fichier d’octets (et uniquement d’octets). Votre classe comprendra dans sa partie publique :

— un constructeur qui ouvre en lecture un fichier dont le nom est passé en paramètre. Si l’ouverture en lecture n’est pas possible, le constructeur

1

émettra l’exceptionIOException, dont vous devez donner la programma- tion.

— la fonctionint read()qui renvoie le prochain octet lu dans le fichier. Si la fin de fichier est atteinte, la fonctionreadrenvoie la valeur−1.

— la fonctionbool eof()qui renvoietruesi on est en fin de fichier ; etfalse sinon.

— la procédurevoidclose()qui ferme le fichier.

c l a s s FileInputStream { p r i v a t e:

std :: ifstream ios;

bool fdf;

p u b l i c: /*

* rôle : ouvre en lecture le fichier d’octets in

FileInputStream (*/ c o n s t std :: string &in) : ios(in), fdf(f a l s e) { i f (!t h i s->ios. is_open ())

throw IOException (in + " : ouverture en lecture impossible ");

} /*

* rôle : renvoie le prochain octet lu sur le fichier d’octets ouvert this ,

* ou -1 si la fin de fichier est atteinte

*/

i n t read () { i n t c = ios.get ();

i f (t h i s->ios.eof ()) { t h i s->fdf = t r u e; r e t u r n -1;

}r e t u r n c;

} /*

* rôle : renvoie vrai si this en fin de fichier , et faux sinon

*/

bool eof () c o n s t { r e t u r n t h i s->fdf;

} /*

* rôle : ferme le fichier courant void*/ close () {

t h i s->ios. close ();

};}

c l a s s IOException : p u b l i c std :: exception { p r i v a t e:

std :: string msg;

p u b l i c:

IOException (c o n s t std :: string &s) : msg(s) {};

2

(2)

v i r t u a l c o n s t char * what () c o n s t noexcept override { r e t u r n msg. c_str ();

};}

. . . . I5. À l’aide de la classeFileInputStream, écrivez la fonctionmainqui ouvre un

fichier de texte, et le recopie sur la sortie standard.

i n t main () {

FileInputStream f(" test .cpp");

i n t c;

w h i l e ((c = f. read ()) != -1) std :: cout << (char) c;

f. close ();

r e t u r n EXIT_SUCCESS ; }

. . . . I6. On veut maintenant pouvoir lire dans un fichier, des objets de type simple (entiers, réels, booléens,etc.). Écrivez la classeDataInputStreamqui fournit ce service. Cette classe comprendra dans sa partie publique :

— un constructeur qui initialise unDataInputStreamà partir d’unFileInputStream passé en paramètre. Attention, les objets de typeifstreamne sont pas copiables.

— la procédurevoidclose()qui ferme le fichier.

— la fonctionbool readBoolean(), qui lit le prochain octet dans le fichier.

Elle renvoiefalsesi cet octet est égal à 0, etvrai, s’il est différent de 0.

S’il n’y a aucun octet à lire, la fonction émettra l’exceptionIOException (héritère deIOException), dont vous devez donner la programmation.

c l a s s DataInputStream { p r i v a t e:

FileInputStream &fis;

p u b l i c:

/*

* rôle : crée un DataInputStream à partir du fichier

* d’octets fourni en paramètre .

*/

DataInputStream ( FileInputStream &f) : fis(f) {}

/*

* rôle : lit le prochain octet sur le fichier d’octets sous -jacent , et

* renvoie faux si égal à 0 et vrai sinon . lève l’exception

* EOFException si la fin de fichier est atteinte

*/

bool readBoolean () { i n t c = t h i s->fis. read ();

3

i f (t h i s->fis.eof ()) throw EOFException ();

//r e t u r n c==0 ? f a l s e : t r u e; }

/*

* rôle : ferme le fichier d’octets sous - jacent void*/ close () {

t h i s->fis. close ();

};}

c l a s s EOFException : p u b l i c IOException { p u b l i c:

EOFException () : IOException ("Fin de fichier ") {}

};

. . . . I 7. Sur quel patron de conception sont organisées les deux classesFileInputStream

etDataInputStream?

Le patron de conception décorateur.

. . . . I 8. Le fichier d’octets de nomfichBoolreprésente un suite de booléens. À l’aide deDataInputStream, écrivez la fonctionmainqui lit la totalité de ce fichier et affiche sur la sortie standard la valeur (trueoufalse) de chacun de ces booléens.

i n t main () {

FileInputStream f(" fichBool ");

DataInputStream dis(f);

t r y {

std :: cout << std :: boolalpha ;;

w h i l e (t r u e)

std :: cout << dis. readBoolean () << " ";

}ca tch ( EOFException e) { dis. close ();

}std :: cout << std :: endl ; r e t u r n EXIT_SUCCESS ; }

. . . .

4

Références

Documents relatifs

Avec la notation de pointeur, écrivez en C la fonction somme qui prend en paramètre une chaîne de caractères qui représente un entier naturel et qui renvoie la somme de ses

Écrivez de façon itérative la fonction itos qui renvoie la conversion d’un entier positif ou nul passé en paramètre, en sa représentation sous forme d’une chaîne de

Écrivez un programme qui lit sur l’entrée standard une opération arithmétique formée de 2 entiers et d’un caractère ( ’+’ , ’-’ , ’*’ ou ’/’ ) et qui écrit sur

Écrivez la fonction creerFichDates qui lit un fichier de texte contenant la suites d’entiers, et qui crée un fichier de dates valides (de type Date ).. Sans l’écrire, vous

Lors d’un appel de fonction ou de procédure, la transmission par valeur consiste à affecter, après évaluation, la valeur du pa- ramètre effectif à son paramètre formel

Au lieu de retirer, à chaque itération, 1 diviseur au dividende et d’incrémenter de 1 le quotient, le diviseur est multiplié successivement par 2 pour trouver son plus grand

qui prend en paramètre une chaîne de caractères, et qui remplace chaque chiffre par le caractère ’_’ dans celle-ci.. La fonction renvoie un pointeur sur le 1er caractère de

Il est nécessaire d’écrire un destructeur pour libérer explicitement la mémoire occupée par le tableau et les 3 points du triangle