Series TD C++
Series TD C++
Series TD C++
2014/2015
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
?
?
?
?
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
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++
2014/2015
: 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) ''.,
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.
elallaouicours.hol.es
2014/2015
Exercice 5
: classe Personne
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.
elallaouicours.hol.es
2014/2015
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 ;
int * adr ;
int nelem ;
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 :
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
elallaouicours.hol.es
2014/2015
cout << " non" << endl;
cout << zero << " ==? " << i;
if (zero == i) cout << " oui" << endl;
else
cout << " non" << endl;
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.
6.
elallaouicours.hol.es