C++ par la pratique
Recueil d'exercices corrigés et aide-mémoire
Jean-Cédric Chappelier, Florian Seydoux
I Programmation procédurale5
1 Variables, opérateurs et expressions
7
1.1 Principaux rappels7
1.2 Pas à pas : mon premier programme C++8
1.3 Exercices13
Exercice 1 : quel âge avez-vous ? (variables)13
Exercice 2 : quelques calculs (variables et expressions)14
2 Structures de contrôle
15
2.1 Principaux rappels15
2.2 Pas à pas : résolution d'équations du second degré16
2.3 Exercices20
Exercice 3 : tables de multiplication (itération for)20
Exercice 4 : intervalles (expressions conditionnelles)20
Exercice 5 : expressions arithmétiques (expressions, branchements conditionnels)21
Exercice 6 : rebonds de balles (itération for)21
Exercice 7 : rebonds de balles revisités (boucles do... while)22
Exercice 8 : une histoire de prêt (boucles)23
Exercice 9 : nombres premiers (structures de contrôle)23
Exercice 10 : équations du 3e degré (expressions, structures de contrôle)23
3 Fonctions
25
3.1 Principaux rappels25
3.2 Pas à pas : calcul de note27
3.3 Exercices30
Exercice 11 : portée30
Exercice 12 : demander un nombre (prototypes)30
Exercice 13 : échanges (passage des paramètres, surcharge)31
Exercice 14 : la fonction cosinus (définition et appel de fonction)32
Exercice 15 : calcul approché d'une intégrale (fonctions)33
4 Types avancés
35
4.1 Principaux rappels35
4.2 Pas à pas 1 : notes (tableaux dynamiques)40
4.3 Pas à pas 2 : appartenance (tableaux)42
4.4 Pas à pas 3 : petites fiches (structures)45
4.5 Pas à pas 4 : listes chaînées (pointeurs)48
4.6 Exercices54
Exercice 16 : générateur automatique de lettres (fonctions, chaînes de caractères)54
Exercice 17 : échauffement avec les tableaux dynamiques55
Exercice 18 : produit scalaire (tableaux dynamiques)55
Exercice 19 : segmentation en mots (string)56
Exercice 20 : multiplication de matrices (tableaux dynamiques)57
Exercice 21 : placement sans recouvrement (tableaux)59
Exercice 22 : nombres complexes (structures)60
Exercice 23 : sélection (pointeurs)61
Exercice 24 : QCM (structures + vector)61
Exercice 25 : nombres complexes revisités (structures)63
Exercice 26 : référence (structures, références)64
Exercice 27 : intégrales revisitées (tableaux, pointeurs)65
5 Flots
67
5.1 Principaux rappels67
5.2 Pas à pas 1 : lecture et écriture sur fichier68
5.3 Pas à pas 2 : manipulateurs de fichiers71
5.4 Exercices73
Exercice 28 : écriture dans un fichier (ofstream)73
Exercice 29 : lecture depuis un fichier (ifstream + manipulateurs)74
Exercice 30 : statistiques sur un fichier (fichiers, tableaux)75
Exercice 31 : QCM revisités (fichiers, structures)76
6 Fonctions récursives
79
6.1 Pas à pas : diverses façons de sommer79
6.2 Exercices81
Exercice 32 : factorielle (fonctions récursives)81
Exercice 33 : nombres de Fibonacci (fonctions récursives)82
Exercice 34 : recherche dichotomique (fonctions récursives)83
Exercice 35 : tours de Hanoï (fonctions récursives)85
Exercice 36 : mythiques labyrinthes (fonctions récursives)87
7 Exercices généraux
89
Exercice 37 : tri bulles89
Exercice 38 : algorithme d'Euclide90
Exercice 39 : piles et parenthèses91
Exercice 40 : arithmétique rationnelle93
Exercice 41 : piles et notation polonaise inverse94
Exercice 42 : recherche approchée de racine96
Exercice 43 : culture de masse97
Exercice 44 : tri de Shell98
Exercice 45 : jeu du pendu99
II Programmation orientée objets103
8 Introduction à la POO
105
8.1 Principaux rappels105
8.2 Pas à pas : objets et classes106
8.3 Exercices109
Exercice 46 : petits ronds (objets/classes)109
Exercice 47 : coordonnées tridimensionnelles (objets/classes)110
Exercice 48 : un petit tour de magie (objets/classes)111
9 Constructeurs et destructeurs
113
9.1 Principaux rappels113
9.2 Pas à pas : animaux en peluche115
9.3 Exercices119
Exercice 49 : apéritif (constructeurs/destructeurs)119
Exercice 50 : un peu de douceur dans ce monde de brutes (constructeurs/destructeurs)119
Exercice 51 : balles rebondissantes, le retour (constructeurs/destructeurs)120
10 Surcharge d'opérateurs
121
10.1 Principaux rappels121
10.2 Pas à pas : polynômes122
10.3 Exercices129
Exercice 52 : nombres complexes (surcharge d'opérateurs)129
Exercice 53 : nombres complexes encore (pointeurs, constructeurs)130
Exercice 54 : encore un peu plus de polynômes (surcharge d'opérateurs)131
11 Héritage
133
11.1 Principaux rappels133
11.2 Pas à pas : figures géométriques134
11.3 Exercices139
Exercice 55 : que de véhicules ! (héritage)139
Exercice 56 : vecteurs tridimensionnels (héritage)141
Exercice 57 : vecteurs unitaires (héritage)141
Exercice 58 : un peu d'algèbre élémentaire (héritage)142
12 Polymorphisme
145
12.1 Principaux rappels145
12.2 Pas à pas : jolie collection de véhicules145
12.3 Exercices148
Exercice 59 : formes polymorphiques (polymorphisme)148
Exercice 60 : encore des figures géométriques (collection hétérogène)149
Exercice 61 : puissance 4 (polymorphisme)150
Exercice 62 : un peu plus d'algèbre élémentaire (classes abstraites)152
13 Héritage multiple
155
13.1 Principaux rappels155
13.2 Pas à pas : zoologie156
13.3 Exercices160
Exercice 63 : animaux en peluche (héritage multiple)160
Exercice 64 : employés (héritage multiple, collection hétérogène)162
Exercice 65 : jeu de cartes (héritage multiple)164
14 Templates et bibliothèque standard
167
14.1 Principaux rappels167
14.2 Pas à pas : programmation générique168
14.3 Exercices171
Exercice 66 : ensembles et itérateurs (bibliothèque standard)171
Exercice 67 : tris revisités (template, bibliothèque standard)172
15 Exceptions
173
15.1 Principaux rappels173
15.2 Pas à pas : gestion des exceptions173
15.3 Exercices178
Exercice 68 : le retour des rationnels (exceptions)178
Exercice 69 : compression RLE (exceptions)179
16 Exercices généraux
181
Exercice 70 : algèbre matricielle181
Exercice 71 : fichiers et programmes182
Exercice 72 : bibliothèque 1183
Exercice 73 : échecs186
Exercice 74 : bibliothèque 2188
III Corrigés191
1 Variables, opérateurs et expressions
193
Exercice 1 : quel âge avez-vous ? (variables)193
Exercice 2 : quelques calculs (variables et expressions)194
2 Structures de contrôle
197
Exercice 3 : tables de multiplication (itération for)197
Exercice 4 : intervalles (expressions conditionnelles)197
Exercice 5 : expressions arithmétiques (expressions, branchements conditionnels)198
Exercice 6 : rebonds de balles (itération for)200
Exercice 7 : rebonds de balles revisités (boucles do... while)201
Exercice 8 : une histoire de prêt (boucles)202
Exercice 9 : nombres premiers (structures de contrôle)203
Exercice 10 : équations du 3e degré (expressions, structures de contrôle)204
3 Fonctions
207
Exercice 11 : portée207
Exercice 12 : demander un nombre (prototypes)208
Exercice 13 : échanges (passage des paramètres, surcharge)210
Exercice 14 : la fonction cosinus (définition et appel de fonction)211
Exercice 15 : calcul approché d'une intégrale (fonctions)212
4 Types avancés
215
Exercice 16 : générateur automatique de lettres (fonctions, chaînes de caractères)215
Exercice 17 : échauffement avec les tableaux dynamiques216
Exercice 18 : produit scalaire (tableaux dynamiques)217
Exercice 19 : segmentation en mots (string)218
Exercice 20 : multiplication de matrices (tableaux dynamiques)220
Exercice 21 : placement sans recouvrement (tableaux)222
Exercice 22 : nombres complexes (structures)225
Exercice 23 : sélection (pointeurs)226
Exercice 24 : QCM (structures + vector)227
Exercice 25 : nombres complexes revisités (structures)229
Exercice 26 : référence (structures, références)231
Exercice 27 : intégrales revisitées (tableaux, pointeurs)232
5 Flots
237
Exercice 28 : écriture dans un fichier (ofstream)237
Exercice 29 : lecture depuis un fichier (ifstream + manipulateurs)238
Exercice 30 : statistiques sur un fichier (fichiers, tableaux)239
Exercice 31 : QCM revisités (fichiers, structures)242
6 Fonctions récursives
249
Exercice 32 : factorielle (fonctions récursives)249
Exercice 33 : nombres de Fibonacci (fonctions récursives)252
Exercice 34 : recherche dichotomique (fonctions récursives)254
Exercice 35 : tours de Hanoï (fonctions récursives)255
Exercice 36 : mythiques labyrinthes (fonctions récursives)258
7 Exercices généraux
269
Exercice 37 : tri bulles269
Exercice 38 : algorithme d'Euclide270
Exercice 39 : piles et parenthèses272
Exercice 40 : arithmétique rationnelle274
Exercice 41 : piles et notation polonaise inverse278
Exercice 42 : recherche approchée de racine281
Exercice 43 : Culture de masse281
Exercice 44 : tri de Shell285
Exercice 45 : jeu du pendu286
8 Introduction à la POO
289
Exercice 46 : petits ronds (objets/classes)289
Exercice 47 : coordonnées tridimensionnelles (objets/classes)292
Exercice 48 : un petit tour de magie (objets/classes)295
9 Constructeurs et destructeurs
299
Exercice 49 : apéritif (constructeurs/destructeurs)299
Exercice 50 : un peu de douceur dans ce monde de brutes (constructeur/destructeurs)299
Exercice 51 : balles rebondissantes, le retour (constructeurs/destructeurs)299
10 Surcharge d'opérateurs
303
Exercice 52 : nombres complexes (surcharge d'opérateurs)303
Exercice 53 : nombres complexes encore (pointeurs, constructeurs)308
Exercice 54 : encore un peu plus de polynômes (surcharge d'opérateurs)309
11 Héritage
313
Exercice 55 : que de véhicules ! (héritage)313
Exercice 56 : vecteurs tridimensionnels (héritage)316
Exercice 57 : vecteurs unitaires (héritage)321
Exercice 58 : un peu d'algèbre élémentaire (héritage)326
12 Polymorphisme
329
Exercice 59 : formes polymorphiques (polymorphisme)329
Exercice 60 : encore des figures géométriques (collection hétérogène)332
Exercice 61 : puissance 4 (polymorphisme)340
Exercice 62 : un peu plus d'algèbre élémentaire (classes abstraites)344
13 Héritage multiple
349
Exercice 63 : animaux en peluche (héritage multiple)349
Exercice 64 : employés (héritage multiple, collection hétérogène)352
Exercice 65 : jeu de cartes (héritage multiple)356
14 Templates et bibliothèque standard
361
Exercice 66 : ensembles et itérateurs (bibliothèque standard)361
Exercice 67 : tris revisités (template, bibliothèque standard)363
15 Exceptions
371
Exercice 68 : le retour des rationnels (exceptions)371
Exercice 69 : compression RLE (exceptions)372
16 Exercices généraux
375
Exercice 70 : algèbre matricielle375
Exercice 71 : fichiers et programmes377
Exercice 72 : bibliothèque 1379
Exercice 73 : échecs382
Exercice 74 : bibliothèque 2384
Annexes388
A Bibliographie annotée391
B Correspondance avec le livre Programmation orientée objets en C++395