You are on page 1of 6

ENSA DAL Hoceima

2014/2015

Gnie Informatique 1 : Programmation orient objet en C++


Srie N1 TD/TP

Exercice 1
Soit lextrait dun programme source en langage C++ :

A
cout <<
int n =
cout <<
cout <<
cout
cout
char
cout

"BONJOUR";
25;
"Valeur: ";
n;

// quivalent

puts("BONJOUR");

// quivalent
// quivalent

puts("Valeur");
printf("%d",n);

<<"Valeur:" << n;
<<"\n ";
// pour aller la ligne
c = a;
<< c;
// affiche le caractre, il faut utiliser
// printf (formatage), pour obtenir le code ASCII

B
int i,n=25,*p;
char *tc="On essaie cout !";
float x = 123.456;
cout<<"BONJOUR\n";
cout<<tc<<"\n";
cout<<"BONJOUR\n"<<tc<<"\n";
cout<<"n= "<<n<<" x= "<<x<<"
cout <<endl;

p= "<<p<<"\n";

C
int n;
cout<<"Saisir un entier: ";
cin >> n;
// quivalent scanf("%d",&n);
int a, b;
cin >> a >> b; // saisie de 2 entiers spars par un Retour Charriot

1. Crez un projet de type console et codez chaque extrait (A, B ou C) dans une fonction principale main en
ajoutant les lments ncessaires (librairies, instructions)
2. Excutez ces programmes et analysez les rsultats.

Exercice 2
C++ autorise les conversions de type entre variables de type char, int, float, double:
char c=0x56,d=25,e;
float r=678.9,s;
j = c;
j = r;
s = d;
e = i;

int i=0x1234,j;
//
//
//
//

j
j
s
e

vaut
vaut
vaut
vaut

?
?
?
?

Programmer et afficher les valeurs des variables dans la console.

Exercice 3
Ecrire un programme qui permet de faire des oprations sur un entier (valeur initiale 0). Le programme affiche
la valeur de l'entier puis affiche le menu suivant :
1.
2.
3.
4.

Ajouter 1
Multiplier par 2
Soustraire 3
Quitter

Le programme demande alors de taper un entier entre 1 et 4. Si l'utilisateur tape une valeur entre 1 et 3, on
effectue l'opration, on affiche la nouvelle valeur de l'entier puis on raffiche le menu et ainsi de suite jusqu' ce
qu'on tape 4. Lorsqu'on tape 4, le programme se termine.

Exercice 4
Sries TD/TP C++

elallaouicours.hol.es

ENSA DAL Hoceima

2014/2015

Ecrire un programme qui demande l'utilisateur de taper des entiers strictement positifs et qui affiche leur
moyenne. Lorsqu'on tape une valeur ngative, le programme affiche ERREUR et demande de retaper une valeur.
Lorsqu'on tape 0, cela signifie que le dernier entier a t tap. On affiche alors la moyenne. Si le nombre
d'entiers taps est gal 0, on affiche PAS DE MOYENNE.

Exercice 5
Ecrire une fonction f ayant en paramtre un entier et qui renvoie par un return un boolen : true si l'entier est
premier false sinon. Tester cette fonction.

Exercice 6
Soit le modle de structure suivant :
struct T
{
int n ;
float x ;
} ;

crire une fonction nomme zero permettant de remettre zro les 2 champs dune structure de ce type
transmise en argument :
a) par adresse ;
b) par rfrence.
Dans les deux cas, on crira un petit programme dessai de la fonction ; il affichera les valeurs dune structure de
ce type, aprs appel de ladite fonction.

Exercice 7
Soient les dclarations (C++) suivantes :
int fct (int) ; // fonction I
int fct (float) ; // fonction II
void fct (int, float) ; // fonction III
void fct (float, int) ; // fonction IV
int n, p ;
float x, y ;
char c ;
double z ;

Les appels suivants sont-ils corrects et, si oui, quelles seront les fonctions effectivement appeles et les
conversions ventuellement mises en place ?
a.
b.
c.
d.
e.
f.
g.
h.
i.

fct
fct
fct
fct
fct
fct
fct
fct
fct

(n)
(x)
(n,
(x,
(c)
(n,
(n,
(n,
(z,

;
;
x)
n)
;
p)
c)
z)
z)

;
;
;
;
;
;

Exercice 8
crire plus simplement en C++ les instructions suivantes, en utilisant les oprateurs new et delete :
int * adi ;
double * add ;
.....
adi = malloc (sizeof (int) ) ;
add = malloc (sizeof (double) * 100 ) ;

Exercice 9
Sries TD/TP C++

: Dclarer un tableau de 5 rels. Calculer et afficher leur moyenne.


elallaouicours.hol.es

ENSA DAL Hoceima

2014/2015

Gnie Informatique 1 : Programmation orient objet en C++


Srie N2 TD/TP
Exercice 1

: classe Point

Dfinissez une classe Point permettant de manipuler un point du plan. Cette classe contiendra :

un constructeur,
les mthodes d'accs et de modification des coordonnes (getter et setter),
une mthode deplacer() qui effectue une translation dfinie par les arguments,
une mthode afficher() qui affiche les coordonnes d'un point sous la forme '' (x , y) ''.,

On donnera un exemple d'utilisation avec une mthode main

Exercice 2

: classe Cercle

Programmer la classe Cercle ayant comme attributs un rayon r et les coordonnes du centre (x et y).
Dclarez ensuite le constructeur, le destructeur, les getter et les setter correspondantes.
Ajoutez ensuite les mthodes (faisant partie de l'interface) :
void setCentre(double x, double y) { ... }
double surface() const qui calcule et retourne la surface du cercle (pi *r*r);
bool estInterieur(double x, double y) const qui teste si le point de coordonnes (x,y) pass en paramtre
fait ou non partie du cercle (frontire comprise : disque ferm). La mthode retournera true si le test est
positif, et false dans le cas contraire.
Dans le main(), instanciez deux objets de la classe Cercle, affectez des valeurs de votre choix leur attributs et
testez vos mthodes surface et estInterieur.
Remarque : la constante pi est souvent dfinie comme M_PI dans le module cmath (#include <cmath> ).

Exercice 3

: classe Cercle1

Programmer la classe Cercle 1 caractris par un rayon r et un centre p de type Point et les mthodes
suivantes :
1. Constructeur, destructeur, getter et setter
2. surface() ; pour calculer la surface du cercle(pi*r*r)
3. circonference(); pour calculer du circonfrence(2*pi*r*r)
4. deplacer(a,b); pour dplacer le cercle par translation (a,b)
5. afficher() ; pour afficher les information du cercle
Tester cette classe en crant deux objets. Tester toutes les mthodes.

Exercice 4

: classe Point3D

Dfinir une classe Point3D reprsentant un point dans l'espace par ses trois coordonnes, et possdant les
mthodes suivantes :
Constructeur : permettant d'initialiser les trois coordonnes d'un objet Point3D partir de trois valeurs
de type double reus en paramtres ;
affiche : permettant l'affichage de coordonnes d'un objet Point3D ;
compare : permettant de comparer (tester l'galit des coordonnes) l'objet courant un autre objet de
type Point3D pass en paramtre.
Dans le main, crer trois points (trois instances) dont deux avec des coordonnes identiques et tester les deux
mthodes prcdentes.

Sries TD/TP C++

elallaouicours.hol.es

ENSA DAL Hoceima

2014/2015

Exercice 5

: classe Personne

Programmer la classe Personne en respectant ses fonctionnalits :


les variables d'instances sont prives (inaccessibles d'une autre classe): nom, prenom, adresse, sexe et
age;
des constructeurs :
Personne (string lenom) {..}
Personne (string leprenom, string lesexe, int lage) {..}
Personne(string lenom, string leprenom, string ladresse, string lesexe, int lage) { ...}
des mthodes d'instances publiques pour accder aux variables prives
getNom(), setNom() ....
anniversaire() incrmente l'ge
presenteToi() pour afficher un texte comme :
Je m'appelle ... .....
Je suis un [homme | femme]
J'ai .... ans

Exercice 6

: classe Rectangle

Attributs
Point p (coordonne du sommet haut gauche), longueur, largeur
Mthodes
1.
2.
3.
4.
5.

perimetre(); surface()
diagonale(); pour calculer la longueur d'une diagonale
doublerDim(); pour doubler la dimension
deplacer(a,b); pour dplacer le rectangle par translation (a,b)
diffrents constructeurs pour initialiser :
aucun attribut (par dfaut)
seulement la position p (x, y)
seulement les dimensions
les 3 attributs
Programmer et tester cette classe : crer 3 objets et tester ses mthodes.

Exercice 7

: classe Segment

Un segment est caractris par deux attributs de type Point, p1 et p2 (2 objets de la classe Point dj
cre, reprsentant les coordonnes des extrmits d'un segment dans un repre.
la mthode longueur() retournant la longueur du segment. Constructeur et destructeur.
la mthode appartient(), indiquant si un point de coordonnes entires est donne en argument
appartient ou non au segment
une mthode affiche() qui permet dcrire un segment d'extrmits A(4,14) et B(12,-35) (par exemple)
sous la forme : segment [ A(4,14) ; B(12,-35) ]
programmer et tester la classe Segment : instancie deux objets (Segment) et tester ses mthodes.

Exercice 8

Adapter la classe point de lexercice1, de manire que la fonction membre affiche fournisse, en plus des
coordonnes du point, le nombre dobjets de type point ;

Ajouter une fonction membre getNombre() qui retourne le nombre dobjet cre ;
Tester la classe en crant 6 objets, Tester ses mthodes.

Sries TD/TP C++

elallaouicours.hol.es

ENSA DAL Hoceima

2014/2015

Gnie Informatique 1 : Programmation orient objet en C++


Srie N3 TD/TP

Exercice 1
Crer une classe point ne contenant quun constructeur sans arguments, un destructeur et un membre donne
priv reprsentant un numro de point (le premier cr portera le numro 1, le suivant le numro 2...).
Le constructeur affichera le numro du point cr et le destructeur affichera le numro du point dtruit. crire un
petit programme dutilisation crant dynamiquement un tableau de 4 points et le dtruisant.

Exercice 2
Dans une classe PileEntiers de la forme1 :
class PileEntiers{
int dim ;

// nombre maxi d'lments de la pile

int * adr ;

// adresse du tableau reprsentant la pile

int nelem ;

// nombre d'lments courant de la pile

public :
PileEntiers (int n) {...}
~PileEntiers () {...}
.....
}

Introduisez les oprateurs > et < tels que si p est un objet de type PileEntier s et n une variable entire :

p < n ajoute la valeur de n sur la pile p (en ne renvoyant aucune valeur),


p > n supprime la valeur du haut de la pile et la place dans n.

On prvoira les deux situations :


a) fonctions membres ;

b) fonctions amies.

Exercice 3
Le but de cet exercice est d'implmenter la classe Complexe et de dfinir les oprateurs ncessaires pour crire
des oprations arithmtiques simples mettant en jeu des nombre complexes et rels.
1.

Dfinir la classe Complexe, en utilisant la reprsentation cartsienne des nombres complexes (i.e. avec
deux attributs double reprsentant respectivement les parties relle et imaginaire du nombre complexe).

2.

Ajouter cette classe les constructeurs et destructeur ncessaires pour que le main suivant compile :

main(){
Complexe defaut;
Complexe zero(0.0, 0.0);
Complexe un(1.0, 0.0);
Complexe i(0.0, 1.0);
Complexe j;

}
3.

Dfinir les oprateurs ncessaires (fonction membre, ordinaire, ou amie) pour que cette suite de la
fonction main compile et s'excute correctement :
cout << zero << " ==? " << defaut;
if (zero == defaut) cout << " oui" << endl;
else

Sries TD/TP C++

elallaouicours.hol.es

ENSA DAL Hoceima

2014/2015
cout << " non" << endl;
cout << zero << " ==? " << i;
if (zero == i) cout << " oui" << endl;
else
cout << " non" << endl;

Le prototype de loprateur << est :


ostream& operator<<(ostream&, const Complexe&);
4.

Continuer avec des oprateurs arithmtiques simples (l encore, des oprateurs externes seront
ncessaires) :
j = un + i;
cout << un << " + " << i << " = " << j << endl;
Complexe trois(un);
trois += un;
trois += 1.0;
cout << un << " + " << un << " + 1.0 = " << trois << endl;
Complexe deux(trois);
deux -= un;
cout << trois << " - " << un << " = " << deux << endl;
trois = 1.0 + deux;
cout << "1.0 + " << deux << " = " << trois << endl;

5.

Passer ensuite aux multiplications et divisions :


Complexe z(i*i);
cout << i << " * " << i << " = " << z << endl;
cout << z << " / " << i << " = " << z/i << " = ";
cout << (z/=i) << endl;

6.

Et pour finir, les quelques oprateurs arithmtiques qui manquent encore : %


Complexe k(2.0,-3.0);
z = k;
z *= 2.0;
z *= i;
cout << k << " * 2.0 * " << i << " = " << z << endl;
z = 2.0 * k * i / 1.0;
cout << " 2.0 * " << k << " * " << i << " / 1 = " << z << endl;

Indication : Soient z1=(x1,y1) et z2=(x2,y2) deux complexes;


On a :
z1z2 = (x1x2 y1y2 , x1y2 + y1x2)
z1/z2 = (x1x2 + y1y2/x2x2 + y2y2

Sries TD/TP C++

y1x2 x1y2/x2x2 + y2y2)

elallaouicours.hol.es

You might also like