|
| Titre : | Du C au C++ : de la programmation procédurale à l'objet | | Type de document : | texte imprime | | Auteurs : | Frédéric Drouillon | | Editeur : | Paris : ENI | | Année de publication : | cop. 2011 | | Collection : | Ressources Informatiques | | Importance : | 577p. | | Présentation : | ill., couv. ill. en coul. | | Format : | 21cm | | ISBN/ISSN/EAN : | 978-2-7460-6655-7 | | Note générale : | Index p.569-577 | | Langues : | Français | | Mots-clés : | C plus-plus (langage de programmation) | | Résumé : |
Cours pour apprendre à programmer et maîtriser la conception algorithmique avec les langages de programmation C et C++. Il s'agit d'un parcours des structures de données fondamentales qui réunit par la pratique l'algorithmique à la programmation.
Ce livre s'adresse aux développeurs débutants qui souhaitent maîtriser la conception algorithmique en s'appuyant sur le langage C puis sur le langage C++. L'efficacité, la complémentarité mais aussi la généricité de ces langages vont permettre au lecteur d'acquérir un savoir faire fondamental en programmation informatique pour évoluer ensuite facilement vers d'autres langages de développement. Dans cette perspective, l'auteur a tenu, non seulement à exposer le fonctionnement des outils fondamentaux du langage mais également à fournir les moyens de les mettre en pratique. Ainsi, chaque section théorique est suivie d'une section ""mise en pratique"" dédiée, composée d'exercices diversifiés. Les quatre premiers chapitres concernent l'apprentissage du langage C et les premières armes en algorithmique : - le premier chapitre permet de maîtriser l'écriture et l'organisation d'instructions simples à partir de variables basiques et d'opérations effectuées dessus - Le second chapitre introduit la notion de bloc d'instructions, avec les possibilités fondamentales de saut, branchement, boucle et écriture de fonctions. - Le troisième chapitre expose des types de données beaucoup plus puissants : les structures et les tableaux. Ces nouveaux types de variables permettent d'accéder à des niveaux de conception beaucoup plus élaborés. - Le quatrième chapitre va surtout donner de la puissance à l'écriture via les variables pointeurs qui permettent l'allocation dynamique et l'élaboration de structures de données non natives dans le langage comme les listes chainées. La suite du livre concerne essentiellement les listes ; les listes chainées dynamiques et statiques, mais également les piles et les files ainsi que les arbres, essentiellement les arbres binaires. Pour ce faire, ces chapitres donnent les clés de la récursivité, élément incontournable pour l'implémentation des arbres en C et C++. L'auteur a fait le choix de présenter les structures de données entre le langage C et le langage C++ pour illustrer la passerelle qu'elles peuvent représenter entre le monde sans objet du C et le monde de l'objet C++. La dernière partie présente les fonctionnalités et la dimension objet du langage C++. Tous les points importants sont abordés avec des petits programmes d'illustration. L'objectif est de fournir au lecteur un marchepied conséquent vers le monde de l'objet et d'autres langages objet et de lui donner les clefs pour passer à Java ou C# par exemple. | | Note de contenu : |
Introduction
A. Objectif : apprendre à programmer 24
B. Contenu du cours 24
C. Publics visés 24
D. Comment apprendre à programmer ? 25
1. Comprendre n'est pas savoir faire 25
2. Trois niveaux de difficulté 25
a. Maîtriser les outils 26
b. Résoudre un problème 26
c. Concevoir un programme 27
3. Un apprentissage non linéaire 27
E. Organisation du livre 28
1. Chapitres 28
2. Solutions des exercices 29
3. Annexes 29
F. Environnements de développement 30
G. Remerciements 30
H. Conclusion : la programmation comme écriture 31
Chapitre 1 Variables simples
A. Introduction dans la programmation C 34
1. Qu'est-ce que programmer ? 34
2. Le positionnement par rapport à l'ordinateur 34
3. Les logiciels de la programmation 35
a. Le compilateur 35
b. L'IDE : environnement de développement 35
c. Installation 36
4. Base d'un programme 36
a. Des données et des instructions 36
b. Des "librairies" de fonctions 36
5. Premier programme 37
a. La fonction main() : entrée du programme 37
b. Afficher du texte avec la fonction printf() 37
6. Mise en pratique : découverte du compilateur 38
B. Variables simples 39
1. Qu'est-ce qu'une variable en informatique ? 39
2. Avoir des variables dans un programme 39
a. Les types de variables élémentaires en C 39
b. Déclarer ses variables dans un programme 40
c. Contraintes pour le choix des noms 41
3. Mise en pratique : avoir des variables dans un programme 41
4. Manipulations de base sur les variables 42
a. Affecter une valeur à une variable 42
b. Des valeurs de type caractère (codage ASCII) 43
c. printf() pour afficher des valeurs 44
d. Obtenir et afficher la taille en mémoire d'une variable 46
e. Obtenir et afficher l'adresse mémoire d'une variable 47
f. scanf() pour récupérer une valeur entrée par l'utilisateur 47
g. Les pièges de scanf() 49
5. Mise en pratique : manipulations de variables 49
6. Pour comprendre les variables 51
a. Codage et mesure de l'information 51
b. Plages de valeurs en décimal 52
c. Troncature 52
d. Codage des nombres négatifs 53
7. Mise en pratique : codage des informations numériques 54
8. Expérimentation : variables simples, déclaration, affectation, affichage, saisie 54
C. Les opérations 56
1. La notion d'expression 56
2. Opérations arithmétiques 57
a. Les opérateurs +, -, *, /, % 57
b. Les affectations combinées 58
c. Pré et post incrémentations ou décrémentations 58
d. Opérations entre types différents, opérateur de "cast" 59
e. Priorités entre opérateurs 60
3. Mise en pratique : opérations arithmétiques, cast 63
4. Obtenir des valeurs aléatoires 66
a. Principe du pseudo aléatoire 66
b. La fonction rand() 67
c. La fonction srand() 68
d. Valeurs aléatoires dans des fourchettes 69
5. Mise en pratique : opérations et nombres aléatoires 71
6. Opérations bits à bits 71
a. ET - opérateur & 71
b. OU exclusif - opérateur ^ 72
c. OU inclusif - opérateur | 73
d. Complément - opérateur ~ 73
e. Décalages gauche et droite - opérateurs >> et << 73
f. Priorités des opérateurs bits à bits 73
7. Mise en pratique : opérations bits à bits 74
8. Expérimentation : opérations arithmétiques, valeurs aléatoires 74
Chapitre 2 Les contrôles des blocs d'isntructions
A. Blocs d'instructions et conditions 78
1. Qu'est-ce qu'un bloc d'instructions ? 78
a. Définition 78
b. Exemple 78
c. Utilité d'un bloc d'instructions 79
2. Définir une condition 79
a. Pourquoi une condition ? 79
b. Comment définir une condition ? 80
c. Les opérateurs de comparaison 80
d. L'opérateur unaire NON ! 81
e. Priorités des opérateurs NON et comparaison 81
3. Mise en pratique : opérateurs de comparaison et NON 82
B. Sauts conditionnels 83
1. L'instruction if 83
2. Le couple d'instructions if-else 84
3. La forme contractée du if-else, opérateur conditionnel ? 85
4. La cascade d'instructions if-else if-else 86
5. Expérimentation : les sauts conditionnels (les trois if) 86
6. Mise en pratique : les sauts conditionnels 89
C. Branchements 91
1. Branchement sélectif : switch, case et break 91
2. Rupture de séquence : goto avec étiquette 94
3. Expérimentation : branchement sélectif switch 94
4. Mise en pratique : l'aiguillage switch 96
D. Les tests multiconditions (ET/OU) 97
1. Conjonction ET, opérateur && 97
a. Et avec deux expressions membres 97
b. Et avec plus de deux expressions membres 98
2. Disjonction OU, opérateur || 99
a. Ou avec deux expressions membres 99
b. Ou avec plus de deux expressions membres 100
3. Et prioritaire sur OU 100
4. Priorité avec les autres opérateurs 101
5. Mise en pratique : les opérateurs logiques ET, OU 101
E. Boucles 103
1. Boucle Tant que : le while 103
2. Boucle Faire {...} Tant que : le do-while 105
3. Boucle comptée Pour : le for 105
4. Boucles imbriquées 107
5. Sortie et saut forcés dans une boucle 108
a. Sortir avec l'instruction break 108
b. Passer à l'itération suivante avec l'instruction continue 108
c. Sortir d'une ou de plusieurs boucles imbriquées avec l'instruction goto 109
6. Mise en pratique : les boucles while, do-while et for 109
F. Utilisations typiques de boucles 112
1. Créer un menu utilisateur 112
2. Boucle d'événements dans un jeu vidéo 114
a. Récupérer les entrées clavier (kbhit() et getch()) 114
b. Boucle d'événements simple 114
c. Contrôler le temps d'exécution 115
3. Commencer la création d'un jeu en mode console 116
4. Mise en pratique : menus, boucles d'événements 119
G. Fonctions 121
1. Qu'est-ce qu'une fonction ? 121
2. Écrire sa fonction 122
a. Où écrire sa fonction ? 122
b. Conditions à remplir 122
c. Exemple fonction sans retour ni paramètre 123
d. Exemple fonction avec retour et sans paramètre 123
e. Exemple de fonction sans retour avec un paramètre 124
f. Exemple de fonction avec retour et paramètre 124
g. Conclusion : quatre cas d'écriture de fonction 124
3. Utiliser sa fonction 125
a. Appel de la fonction 125
b. Récupération de la valeur de retour 125
c. Passage de valeurs aux paramètres 126
d. Précision sur le passage par valeur 127
e. Visibilité et déclaration de la fonction 128
4. Cas des fonctions avec liste variable de paramètres 129
a. Liste variable de paramètres de même type 129
b. Liste variable de paramètres de types différents 130
c. Transformer printf() 132
5. Mise en pratique : fonctions 134
a. Identifier les composants d'une fonction 134
b. Déclaration de fonctions 134
c. Procédures sans paramètre 135
d. Fonctions sans paramètre 135
e. Fonctions avec paramètres 135
H. Style, commentaires et indentation 140
1. Pourquoi soigner le style ? 140
2. Typographie et choix des noms 140
3. Indentation rigoureuse et accolades 141
4. Parenthèses pour dissiper les ambiguïtés 143
5. Commentaires pertinents 143
6. Mise en pratique : style, indentation, commentaires 144
Chapitre 3 Variables ensembles (structures et tableaux)
A. Structure 146
1. Qu'est-ce qu'une structure ? 146
2. Avoir une structure dans un programme 146
a. Définir un type de structure 146
b. Déclarer ses variables structure 147
3. Utiliser une structure 148
a. Accès aux éléments avec l'opérateur point 148
b. Priorité de l'opérateur point 148
c. Une structure comme champ dans une structure 148
d. Initialiser une structure à la déclaration 149
e. Copier une structure 151
4. Mise en pratique : définir, déclarer, initialiser des structures 151
B. Structures et fonctions 152
1. Retourner une structure 152
2. Structures en paramètre de fonction 153
3. Expérimentation : une entité mobile à l'écran 155
4. Mise en pratique : structures et fonctions 158
C. Typedef, enum et #define 159
1. Utiliser un typedef 159
2. Utiliser un enum 161
3. Utiliser un #define 162
4. Mise en pratique : typedef, enum, #define 163
D. Tableaux statiques 164
1. Qu'est-ce qu'un tableau ? 164
2. Avoir un tableau statique dans un programme 164
a. Définir et déclarer un tableau 164
b. Utiliser des #define pour les tailles 165
3. Utiliser un tableau 165
a. Accéder aux éléments du tableau avec l'opérateur crochet [] 165
b. Priorité de l'opérateur crochet 166
c. Débordement de tableau 166
d. Initialiser un tableau à la déclaration 166
e. Parcourir un tableau avec une boucle for 167
f. Trier un tableau 167
4. Tableaux à plusieurs dimensions 168
a. Déclarer un tableau à plusieurs dimensions 168
b. Initialiser la déclaration 170
c. Parcourir un tableau à plusieurs dimensions 170
5. Expérimentation : tableaux statiques 171
6. Mise en pratique : opérations de base sur les tableaux statiques (non dynamiques) 175
a. Déclaration de tableaux, accès aux éléments 175
b. Initialisation de tableaux à la déclaration 176
c. Tableaux à plusieurs dimensions 176
d. Boucles et tableaux 177
E. Exemples d'utilisations de tableaux 179
1. Chaînes de caractères 179
2. Image bitmap 180
3. Stocker des données localisées 181
4. Expérimentation : utilisation de chaînes de caractères 182
5. Mise en pratique : tableaux 183
a. Chaînes de caractères 183
b. Image, terrain de jeux 185
c. Localisation de données via plusieurs dimensions 187
F. Tableaux et structures 187
1. Tableau comme champ dans une structure 187
2. Tableau de structures 188
3. Différences entre tableaux et structures 190
4. Mise en pratique : tableaux de structures 191
G. Tableaux et fonctions 195
1. Utiliser un tableau déclaré en global 195
2. Tableau en paramètre de fonction 196
a. Précision sur le type tableau 196
b. La variable pointeur 197
c. En paramètre, conversion du tableau en pointeur 197
d. Choix pour l'écriture des tableaux en paramètre 200
e. Modification des données via un passage par adresse 200
3. Quelques fonctions de traitement de chaînes de caractères 203
a. Récupérer une chaîne entrée par l'utilisateur 203
b. Obtenir la taille d'une chaîne 203
c. Copier une chaîne 204
d. Comparer deux chaînes 204
e. Concaténer deux chaînes 204
4. Expérimentation : tableaux et fonctions 205
5. Mise en pratique : tableaux et fonctions 210
a. Appels de fonctions, tableaux en paramètre 210
b. Manipulations sur les chaînes 213
H. Gestion des variables 214
1. Visibilité des variables 214
a. Profondeur de la déclaration 214
b. Portée des variables 215
c. Masquage d'une variable 215
2. Durée de vie des variables 217
a. Variables globales 217
b. Variables locales (auto) 217
c. Variables static 217
3. Choix méthodologiques 218
4. Mise en pratique : gestion de variables 218
I. Structuration d'un programme, étude d'un automate cellulaire 221
1. Clarifier et définir ses objectifs 221
a. Principe de l'automate cellulaire 221
b. Fonctionnement envisagé 222
2. Trouver une structure de données valable 223
3. Identifier les fonctions principales 224
4. Choisir le niveau des variables fondamentales 225
5. Écrire les fonctions 226
a. Fonction d'initialisation 226
b. Fonction d'affichage 227
c. Fonction de calcul 227
d. Fonction de comptage des voisins 229
e. Fonction de recopie 229
f. Montage dans le main() 230
6. Intégrer une librairie personnelle 231
7. Répartir son code sur plusieurs fichiers C 232
8. Mise en pratique : structuration d'un programme 234
a. Simulation d'un feu de forêt 234
b. Tristus et rigolus 235
c. Simulation d'une attaque de microbes dans le sang 235
d. Bancs de poissons, mouvements de populations 235
e. Élection présidentielle 235
f. Chenille 236
g. Système de vie artificielle, colonies de fourmis 236
h. Boutons et pages 237
i. Panneaux de bois et entrepôts 238
j. Nenuphs et clans 238
k. Neige 1 239
l. Neige 2 239
m. Neige 3 239
n. Casse-brique simple 239
o. Casse-brique guru 239
p. Space invader simple 240
q. Space invader more 240
r. Space invader guru 240
s. Pacman débutant 240
t. Pacman intermediate 240
u. Pacman guru 240
v. Jeu de miroirs 240
w. Simulations football 240
Chapitre 4 Variables pointeurs
A. Principe du pointeur 244
1. Qu'est-ce qu'un pointeur ? 244
a. Mémoire RAM 244
b. Une variable pointeur 245
c. Quatre opérateurs 245
d. Trois utilisations fondamentales des pointeurs 245
2. Déclarer un pointeur dans un programme 246
3. Fonctionnement des quatre opérateurs 247
a. Opérateur adresse : & 247
b. Opérateur étoile : * 248
c. Opérateur flèche : -> 249
d. Opérateur crochet : [] 249
e. Priorité des quatre opérateurs 250
4. Allouer dynamiquement de la mémoire 250
a. La fonction malloc() 250
b. Libérer la mémoire allouée : la fonction free() 251
c. Le pointeur générique void* 253
d. La valeur Null 253
5. Attention à la validité d'une adresse mémoire 254
a. Validité d'une adresse mémoire 254
b. Pourquoi caster le retour des fonctions d'allocation ? 256
6. Cas des tableaux de pointeurs 257
a. Une structure de données très utile 257
b. Un tableau de chaînes de caractères 258
c. Utiliser les arguments de lignes de commandes 259
7. Expérimentation : base pointeurs 261
8. Mise en pratique : base pointeurs 264
a. Avoir des pointeurs et les manipuler 264
b. Tests tableaux / pointeurs 264
c. Base allocation dynamique 266
d. Attention aux erreurs 267
e. Tableaux de chaînes 268
B. Allocation dynamique de tableaux 268
1. Allouer un tableau avec un pointeur 268
2. Allouer une matrice avec un pointeur de pointeur 269
3. Différences entre tableaux statiques et dynamiques 272
4. Autres fonctions d'allocation dynamique 272
a. Fonction calloc() 273
b. Fonction realloc() 273
5. Mise en pratique : allocation dynamique 274
a. Allouer dynamiquement des tableaux 274
b. Allouer dynamiquement des matrices 276
c. Allocation dynamique calloc() et realloc() 278
C. Pointeurs en paramètre de fonction 279
1. Passage par référence 279
a. Cas général d'une variable quelconque 279
b. Exemple : une fonction qui retourne l'heure 280
c. Passage par référence d'une structure 282
d. Passage par référence d'une variable pointeur 282
2. Tableaux dynamiques en paramètre 286
3. Mise en pratique : passage par référence 288
a. Passage par référence, base 288
b. Passage par référence, opérateurs bit à bit 290
c. Passage de pointeurs par référence 291
d. Passage de tableaux dynamiques 292
D. Fichiers (type File*) 293
1. Notions de base 293
a. Le type File* 293
b. Ouverture et fermeture d'un fichier 293
c. Spécifier un chemin d'accès 295
2. Fichiers binaires 296
a. Écriture et lecture en mode binaire 296
b. Détecter la fin d'un fichier binaire 297
c. Déplacements dans un fichier 298
3. Écriture et lecture en mode texte 298
a. Détecter la fin d'un fichier, EOF et feof() 298
b. Lecture / écriture de caractères 299
c. Lecture / écriture de chaînes 300
d. Lecture / écriture formatées 301
4. Sauvegarde d'éléments dynamiques 303
a. Sauver et récupérer un tableau dynamique 303
b. Récupérer des données via des pointeurs 304
5. Mise en pratique : fichiers 305
Chapitre 5 Récursivité
A. Fonctions récursives 310
1. Qu'est-ce que la récursivité ? 310
2. Une fonction récursive basique 310
3. Pile d'appels et débordement 312
4. Retourner une valeur 313
5. Représentation et analyse du fonctionnement 315
a. Analyse descendante 316
b. Analyse ascendante 317
6. Choisir entre itératif ou récursif 317
B. Exemples classiques de fonctions récursives 318
1. Calculs 318
a. Afficher les chiffres d'un entier 318
b. Produit factoriel 319
c. Suite de Fibonacci 319
d. Changement de base arithmétique d'un nombre 321
e. Puissance 323
f. PGCD, algorithme d'Euclide 324
2. Dessins 326
a. Tracé d'une règle graduée : "diviser pour résoudre" 326
b. Tracé de cercles 329
c. Tracé de carrés 330
d. Tracé d'un arbre 331
3. Créations et jeux 334
a. Trouver un chemin dans un labyrinthe 334
b. Création d'un labyrinthe 338
4. Les tours de Hanoï 340
5. Tri rapide d'un tableau de nombres 342
C. Mise en pratique : récursivité 344
Chapitre 6 Structures de données listes et algorithmes
A. Listes chaînées dynamiques 350
1. Qu'est-ce qu'une liste chaînée ? 350
a. Une chaîne constituée de maillons 350
b. Trois types de listes chaînées 350
c. Les actions sur une liste chaînée 351
d. Listes chaînées contre tableaux 352
2. Implémenter une liste simple 352
a. Structure de données d'un maillon 353
b. Début et fin de la liste 353
c. Initialiser un maillon 354
d. Ajouter un maillon au début d'une liste 354
e. Insérer un maillon dans une liste 356
f. Parcourir la liste 359
g. Supprimer un maillon au début de la liste 361
h. Supprimer un élément sur critère 361
i. Détruire la liste 364
j. Sauvegarder la liste 364
3. Implémenter une liste simple circulaire 366
a. Structure de données d'une liste circulaire 366
b. Liste vide 367
c. Début et fin de la liste 367
d. Initialiser un maillon 367
e. Ajouter un maillon 367
f. Parcourir la liste 368
g. Supprimer un maillon 369
h. Détruire la liste 369
4. Implémenter une liste symétrique 370
a. Structure de données 370
b. Liste vide 370
c. Début et fin de la liste 370
d. Initialiser un élément 370
i. Test dans le main() 386
4. Mise en pratique : les piles 387
C. Files 389
1. Principes de la file 389
a. Modèle de données file 389
b. Implémentation statique ou dynamique 389
c. Primitives de gestion des files 390
d. Applications importantes des files 390
2. Implémentation d'une file en dynamique 391
a. Structure de données 391
b. File vide, file pleine 391
c. Initialisation 392
d. Enfiler 392
e. Lire la tête, lire la queue 393
f. Défiler 393
g. Vider, détruire 394
h. Affichage 394
i. Test dans le main() 395
3. Implémentation d'une file en statique (tableau) 396
a. Structure de données 396
b. File vide, file pleine 397
c. Initialisation 397
d. Enfiler 398
e. Lire la tête, lire la queue 398
f. Défiler 399
g. Vider, détruire 399
h. Affichage 399
i. Test dans le main() 400
4. Mise en pratique : les files 401
D. Arbres 403
1. Généralités sur les arbres 403
a. Principe 403
b. Exemples d'utilisation des arbres 404
c. Nomenclature des arbres 406
2. Types d'arbre 407
a. Arbre binaire 407
b. Arbre n-aire 407
c. Transformer un arbre n-aire en arbre binaire 408
3. Représentations en mémoire 408
a. Arbre n-aire 408
b. Arbre binaire 410
c. Structures de données statiques ou dynamiques 411
E. Contrôler un arbre binaire 412
1. Créer un arbre binaire 412
a. Créer un arbre à partir d'un schéma descriptif 412
b. Créer un arbre à partir des données aléatoires d'un tableau 415
c. Créer un arbre en insérant des éléments ordonnés 417
2. Parcourir l'arbre 417
a. Parcours en profondeur 418
b. Parcours en largeur, par niveau 422
3. Afficher l'arbre 423
a. Afficher un arbre avec indentation 423
b. Dessiner l'arbre sans les liens 424
4. Obtenir des propriétés de l'arbre binaire 425
a. Connaître la taille 425
b. Connaître la hauteur 426
c. Savoir si un noeud est une feuille 426
d. Compter le nombre des feuilles de l'arbre 427
e. Lister toutes les feuilles 427
f. Faire la somme des valeurs des noeuds 428
g. Comparer des valeurs des noeuds de l'arbre 429
h. Ramener un noeud de l'arbre à partir d'une valeur 429
5. Dupliquer l'arbre 430
6. Détruire l'arbre 431
7. Conversion statique-dynamique d'un arbre binaire 431
a. Conversion d'un arbre statique en dynamique 431
b. Conversion d'un arbre dynamique en statique 432
8. Sauvegarde et chargement d'un arbre binaire 433
a. Sauvegarder un arbre dynamique 433
b. Charger (load) un arbre dynamique 433
9. Arbres binaires sur fichiers 434
a. Structure de données 434
b. Lecture d'un noeud à partir de son numéro d'enregistrement 434
c. Adaptation des fonctions pour les arbres binaires dynamiques ou statiques 435
10. Mise en pratique : arbre binaire 435
F. Arbres binaires de recherche 439
1. Définition 439
2. Structure de données 440
3. Insérer un élément dans l'arbre selon sa clé 441
a. Comparer deux clés 441
b. Insérer un élément à la bonne place 441
4. Rechercher dans l'arbre un élément selon sa clé 442
5. Supprimer un élément dans l'arbre de recherche 443
a. Trois cas 444
b. Fonction de recherche du noeud max 445
c. Fonction de suppression 445
6. Lister tous les éléments de l'arbre (parcours en largeur) 446
7. Afficher l'arbre 448
8. Test dans le main() 449
9. Mise en pratique : arbres 450
Chapitre 7 Variables objet, découvrir C++
A. C inclus en C++ 452
1. Un projet console en C++ 452
a. Bibliothèque <iostream> 453
b. L'instruction using namespace std; 453
2. Un programme C compilé en C++ 454
B. C augmenté en C++ 458
1. Entrée-sortie console : cout et cin 458
a. Utiliser cout et cin 458
b. Instructions de formatage en sortie 459
2. Variables et constantes 462
a. Déclarations plus souples 462
b. Type bool 462
c. Type caractère unicode : wchar_t 463
d. Typedef inutile pour les structures 463
e. Type référence (pointeur masqué) 464
f. Type pointeur, opérateurs new et delete 467
g. Constantes et pointeurs 468
h. Constantes (const) et énumération (enum) plutôt que #define 469
3. Conversions de types 470
a. static_cast<type> 470
b. const_cast<type> 470
c. reinterpret_cast<type> 471
d. dynamic_cast<type> 471
4. Fonctions 472
a. Fonctions embarquées "inline" 472
b. Retourner une référence 472
c. Surcharge des fonctions 474
d. Valeurs par défaut de paramètres 475
e. Fonctions génériques (template) 476
f. Fonctions comme champs de structures 478
5. Gestion des exceptions (base) 480
a. Instruction throw 480
b. Instruction de saut try-catch 481
c. Instruction throw et appels de fonctions 482
d. Instruction throw sans valeur de retour 483
e. Préciser les retours d'exceptions des fonctions 484
f. Exception non identifiée 485
g. Bloc catch(...) par défaut 486
6. Espaces de noms (namespace) et raccourcis (using) 487
7. Intégrer d'autres langages dans le code C++ 491
C. La dimension objet du C++ 492
1. Classe et objet 492
a. Qu'est-ce qu'une classe ? 493
b. Qu'est-ce qu'un objet ? 493
c. Définir une classe 493
d. Déclarer un objet 494
e. Droits d'accès 494
f. Un programme C muté en classe et objet 495
2. Constructeur 500
a. Paramétrer un objet à sa déclaration 500
b. Le pointeur this 502
c. Constructeur sans paramètre 503
d. Constructeurs avec paramètres 504
e. Constructeur et copie d'objet 505
f. Constructeur avec conversion 509
3. Destructeur 510
4. Classes et membres "static" 512
a. Qualificatif static en C 512
b. Qualificatif static et objets 513
5. Surcharge des opérateurs 514
a. Fonction operator globale hors classe 515
b. Fonction operator localisée dans une classe 516
c. Fonction operator et données dynamiques 519
6. Classes génériques ("template" ou "patron") 523
a. Principe 523
b. Syntaxe de base 523
c. Syntaxe constructeurs 524
d. Syntaxe avec plusieurs types génériques 525
e. Exemple d'implémentation d'une pile générique 525
f. Spécialisation de fonction sur un type donné 527
7. Héritage 529
a. Définir une classe dérivée 529
b. Appeler explicitement un constructeur de la classe de base 531
c. Redéfinition de données ou de fonctions 532
d. Spécifier un membre de la classe de base 533
e. Droits d'accès de la classe héritée 534
f. Héritage multiple 539
g. Héritage multiple avec une base virtuelle 543
8. Pointeurs polymorphes, virtualité 546
a. Accès pointeurs par défaut aux fonctions redéfinies 547
b. Accès pointeur aux fonctions virtuelles redéfinies 548
c. Intérêt des accès pointeurs aux fonctions virtuelles 550
d. Classes abstraites, fonctions virtuelles pures 551
9. Classes et fonctions "amies" (friend) 556
Chapitre 8 Annexe
A. Priorité et associativité des opérateurs 560
B. Quelques outils d'affichage en console Windows 561
C. Librairie C de création en mode console 563
1. Téléchargement 563
2. Installation 563
3. Utilisation 563
4. Fonctions disponibles 564
a. Manipuler le curseur en écriture 564
b. Manipuler la couleur 564
c. Quelques manipulations sur la fenêtre console 565
d. La gestion des évènements 566
e. Chbitmap : buffer de données pour affichage 566
f. Chtext : opérations de text en mode Chbitmap 567
Index | | Permalink : | ./index.php?lvl=notice_display&id=15124 |
Du C au C++ : de la programmation procédurale à l'objet [texte imprime] / Frédéric Drouillon . - Paris : ENI, cop. 2011 . - 577p. : ill., couv. ill. en coul. ; 21cm. - ( Ressources Informatiques) . ISBN : 978-2-7460-6655-7 Index p.569-577 Langues : Français | Mots-clés : | C plus-plus (langage de programmation) | | Résumé : |
Cours pour apprendre à programmer et maîtriser la conception algorithmique avec les langages de programmation C et C++. Il s'agit d'un parcours des structures de données fondamentales qui réunit par la pratique l'algorithmique à la programmation.
Ce livre s'adresse aux développeurs débutants qui souhaitent maîtriser la conception algorithmique en s'appuyant sur le langage C puis sur le langage C++. L'efficacité, la complémentarité mais aussi la généricité de ces langages vont permettre au lecteur d'acquérir un savoir faire fondamental en programmation informatique pour évoluer ensuite facilement vers d'autres langages de développement. Dans cette perspective, l'auteur a tenu, non seulement à exposer le fonctionnement des outils fondamentaux du langage mais également à fournir les moyens de les mettre en pratique. Ainsi, chaque section théorique est suivie d'une section ""mise en pratique"" dédiée, composée d'exercices diversifiés. Les quatre premiers chapitres concernent l'apprentissage du langage C et les premières armes en algorithmique : - le premier chapitre permet de maîtriser l'écriture et l'organisation d'instructions simples à partir de variables basiques et d'opérations effectuées dessus - Le second chapitre introduit la notion de bloc d'instructions, avec les possibilités fondamentales de saut, branchement, boucle et écriture de fonctions. - Le troisième chapitre expose des types de données beaucoup plus puissants : les structures et les tableaux. Ces nouveaux types de variables permettent d'accéder à des niveaux de conception beaucoup plus élaborés. - Le quatrième chapitre va surtout donner de la puissance à l'écriture via les variables pointeurs qui permettent l'allocation dynamique et l'élaboration de structures de données non natives dans le langage comme les listes chainées. La suite du livre concerne essentiellement les listes ; les listes chainées dynamiques et statiques, mais également les piles et les files ainsi que les arbres, essentiellement les arbres binaires. Pour ce faire, ces chapitres donnent les clés de la récursivité, élément incontournable pour l'implémentation des arbres en C et C++. L'auteur a fait le choix de présenter les structures de données entre le langage C et le langage C++ pour illustrer la passerelle qu'elles peuvent représenter entre le monde sans objet du C et le monde de l'objet C++. La dernière partie présente les fonctionnalités et la dimension objet du langage C++. Tous les points importants sont abordés avec des petits programmes d'illustration. L'objectif est de fournir au lecteur un marchepied conséquent vers le monde de l'objet et d'autres langages objet et de lui donner les clefs pour passer à Java ou C# par exemple. | | Note de contenu : |
Introduction
A. Objectif : apprendre à programmer 24
B. Contenu du cours 24
C. Publics visés 24
D. Comment apprendre à programmer ? 25
1. Comprendre n'est pas savoir faire 25
2. Trois niveaux de difficulté 25
a. Maîtriser les outils 26
b. Résoudre un problème 26
c. Concevoir un programme 27
3. Un apprentissage non linéaire 27
E. Organisation du livre 28
1. Chapitres 28
2. Solutions des exercices 29
3. Annexes 29
F. Environnements de développement 30
G. Remerciements 30
H. Conclusion : la programmation comme écriture 31
Chapitre 1 Variables simples
A. Introduction dans la programmation C 34
1. Qu'est-ce que programmer ? 34
2. Le positionnement par rapport à l'ordinateur 34
3. Les logiciels de la programmation 35
a. Le compilateur 35
b. L'IDE : environnement de développement 35
c. Installation 36
4. Base d'un programme 36
a. Des données et des instructions 36
b. Des "librairies" de fonctions 36
5. Premier programme 37
a. La fonction main() : entrée du programme 37
b. Afficher du texte avec la fonction printf() 37
6. Mise en pratique : découverte du compilateur 38
B. Variables simples 39
1. Qu'est-ce qu'une variable en informatique ? 39
2. Avoir des variables dans un programme 39
a. Les types de variables élémentaires en C 39
b. Déclarer ses variables dans un programme 40
c. Contraintes pour le choix des noms 41
3. Mise en pratique : avoir des variables dans un programme 41
4. Manipulations de base sur les variables 42
a. Affecter une valeur à une variable 42
b. Des valeurs de type caractère (codage ASCII) 43
c. printf() pour afficher des valeurs 44
d. Obtenir et afficher la taille en mémoire d'une variable 46
e. Obtenir et afficher l'adresse mémoire d'une variable 47
f. scanf() pour récupérer une valeur entrée par l'utilisateur 47
g. Les pièges de scanf() 49
5. Mise en pratique : manipulations de variables 49
6. Pour comprendre les variables 51
a. Codage et mesure de l'information 51
b. Plages de valeurs en décimal 52
c. Troncature 52
d. Codage des nombres négatifs 53
7. Mise en pratique : codage des informations numériques 54
8. Expérimentation : variables simples, déclaration, affectation, affichage, saisie 54
C. Les opérations 56
1. La notion d'expression 56
2. Opérations arithmétiques 57
a. Les opérateurs +, -, *, /, % 57
b. Les affectations combinées 58
c. Pré et post incrémentations ou décrémentations 58
d. Opérations entre types différents, opérateur de "cast" 59
e. Priorités entre opérateurs 60
3. Mise en pratique : opérations arithmétiques, cast 63
4. Obtenir des valeurs aléatoires 66
a. Principe du pseudo aléatoire 66
b. La fonction rand() 67
c. La fonction srand() 68
d. Valeurs aléatoires dans des fourchettes 69
5. Mise en pratique : opérations et nombres aléatoires 71
6. Opérations bits à bits 71
a. ET - opérateur & 71
b. OU exclusif - opérateur ^ 72
c. OU inclusif - opérateur | 73
d. Complément - opérateur ~ 73
e. Décalages gauche et droite - opérateurs >> et << 73
f. Priorités des opérateurs bits à bits 73
7. Mise en pratique : opérations bits à bits 74
8. Expérimentation : opérations arithmétiques, valeurs aléatoires 74
Chapitre 2 Les contrôles des blocs d'isntructions
A. Blocs d'instructions et conditions 78
1. Qu'est-ce qu'un bloc d'instructions ? 78
a. Définition 78
b. Exemple 78
c. Utilité d'un bloc d'instructions 79
2. Définir une condition 79
a. Pourquoi une condition ? 79
b. Comment définir une condition ? 80
c. Les opérateurs de comparaison 80
d. L'opérateur unaire NON ! 81
e. Priorités des opérateurs NON et comparaison 81
3. Mise en pratique : opérateurs de comparaison et NON 82
B. Sauts conditionnels 83
1. L'instruction if 83
2. Le couple d'instructions if-else 84
3. La forme contractée du if-else, opérateur conditionnel ? 85
4. La cascade d'instructions if-else if-else 86
5. Expérimentation : les sauts conditionnels (les trois if) 86
6. Mise en pratique : les sauts conditionnels 89
C. Branchements 91
1. Branchement sélectif : switch, case et break 91
2. Rupture de séquence : goto avec étiquette 94
3. Expérimentation : branchement sélectif switch 94
4. Mise en pratique : l'aiguillage switch 96
D. Les tests multiconditions (ET/OU) 97
1. Conjonction ET, opérateur && 97
a. Et avec deux expressions membres 97
b. Et avec plus de deux expressions membres 98
2. Disjonction OU, opérateur || 99
a. Ou avec deux expressions membres 99
b. Ou avec plus de deux expressions membres 100
3. Et prioritaire sur OU 100
4. Priorité avec les autres opérateurs 101
5. Mise en pratique : les opérateurs logiques ET, OU 101
E. Boucles 103
1. Boucle Tant que : le while 103
2. Boucle Faire {...} Tant que : le do-while 105
3. Boucle comptée Pour : le for 105
4. Boucles imbriquées 107
5. Sortie et saut forcés dans une boucle 108
a. Sortir avec l'instruction break 108
b. Passer à l'itération suivante avec l'instruction continue 108
c. Sortir d'une ou de plusieurs boucles imbriquées avec l'instruction goto 109
6. Mise en pratique : les boucles while, do-while et for 109
F. Utilisations typiques de boucles 112
1. Créer un menu utilisateur 112
2. Boucle d'événements dans un jeu vidéo 114
a. Récupérer les entrées clavier (kbhit() et getch()) 114
b. Boucle d'événements simple 114
c. Contrôler le temps d'exécution 115
3. Commencer la création d'un jeu en mode console 116
4. Mise en pratique : menus, boucles d'événements 119
G. Fonctions 121
1. Qu'est-ce qu'une fonction ? 121
2. Écrire sa fonction 122
a. Où écrire sa fonction ? 122
b. Conditions à remplir 122
c. Exemple fonction sans retour ni paramètre 123
d. Exemple fonction avec retour et sans paramètre 123
e. Exemple de fonction sans retour avec un paramètre 124
f. Exemple de fonction avec retour et paramètre 124
g. Conclusion : quatre cas d'écriture de fonction 124
3. Utiliser sa fonction 125
a. Appel de la fonction 125
b. Récupération de la valeur de retour 125
c. Passage de valeurs aux paramètres 126
d. Précision sur le passage par valeur 127
e. Visibilité et déclaration de la fonction 128
4. Cas des fonctions avec liste variable de paramètres 129
a. Liste variable de paramètres de même type 129
b. Liste variable de paramètres de types différents 130
c. Transformer printf() 132
5. Mise en pratique : fonctions 134
a. Identifier les composants d'une fonction 134
b. Déclaration de fonctions 134
c. Procédures sans paramètre 135
d. Fonctions sans paramètre 135
e. Fonctions avec paramètres 135
H. Style, commentaires et indentation 140
1. Pourquoi soigner le style ? 140
2. Typographie et choix des noms 140
3. Indentation rigoureuse et accolades 141
4. Parenthèses pour dissiper les ambiguïtés 143
5. Commentaires pertinents 143
6. Mise en pratique : style, indentation, commentaires 144
Chapitre 3 Variables ensembles (structures et tableaux)
A. Structure 146
1. Qu'est-ce qu'une structure ? 146
2. Avoir une structure dans un programme 146
a. Définir un type de structure 146
b. Déclarer ses variables structure 147
3. Utiliser une structure 148
a. Accès aux éléments avec l'opérateur point 148
b. Priorité de l'opérateur point 148
c. Une structure comme champ dans une structure 148
d. Initialiser une structure à la déclaration 149
e. Copier une structure 151
4. Mise en pratique : définir, déclarer, initialiser des structures 151
B. Structures et fonctions 152
1. Retourner une structure 152
2. Structures en paramètre de fonction 153
3. Expérimentation : une entité mobile à l'écran 155
4. Mise en pratique : structures et fonctions 158
C. Typedef, enum et #define 159
1. Utiliser un typedef 159
2. Utiliser un enum 161
3. Utiliser un #define 162
4. Mise en pratique : typedef, enum, #define 163
D. Tableaux statiques 164
1. Qu'est-ce qu'un tableau ? 164
2. Avoir un tableau statique dans un programme 164
a. Définir et déclarer un tableau 164
b. Utiliser des #define pour les tailles 165
3. Utiliser un tableau 165
a. Accéder aux éléments du tableau avec l'opérateur crochet [] 165
b. Priorité de l'opérateur crochet 166
c. Débordement de tableau 166
d. Initialiser un tableau à la déclaration 166
e. Parcourir un tableau avec une boucle for 167
f. Trier un tableau 167
4. Tableaux à plusieurs dimensions 168
a. Déclarer un tableau à plusieurs dimensions 168
b. Initialiser la déclaration 170
c. Parcourir un tableau à plusieurs dimensions 170
5. Expérimentation : tableaux statiques 171
6. Mise en pratique : opérations de base sur les tableaux statiques (non dynamiques) 175
a. Déclaration de tableaux, accès aux éléments 175
b. Initialisation de tableaux à la déclaration 176
c. Tableaux à plusieurs dimensions 176
d. Boucles et tableaux 177
E. Exemples d'utilisations de tableaux 179
1. Chaînes de caractères 179
2. Image bitmap 180
3. Stocker des données localisées 181
4. Expérimentation : utilisation de chaînes de caractères 182
5. Mise en pratique : tableaux 183
a. Chaînes de caractères 183
b. Image, terrain de jeux 185
c. Localisation de données via plusieurs dimensions 187
F. Tableaux et structures 187
1. Tableau comme champ dans une structure 187
2. Tableau de structures 188
3. Différences entre tableaux et structures 190
4. Mise en pratique : tableaux de structures 191
G. Tableaux et fonctions 195
1. Utiliser un tableau déclaré en global 195
2. Tableau en paramètre de fonction 196
a. Précision sur le type tableau 196
b. La variable pointeur 197
c. En paramètre, conversion du tableau en pointeur 197
d. Choix pour l'écriture des tableaux en paramètre 200
e. Modification des données via un passage par adresse 200
3. Quelques fonctions de traitement de chaînes de caractères 203
a. Récupérer une chaîne entrée par l'utilisateur 203
b. Obtenir la taille d'une chaîne 203
c. Copier une chaîne 204
d. Comparer deux chaînes 204
e. Concaténer deux chaînes 204
4. Expérimentation : tableaux et fonctions 205
5. Mise en pratique : tableaux et fonctions 210
a. Appels de fonctions, tableaux en paramètre 210
b. Manipulations sur les chaînes 213
H. Gestion des variables 214
1. Visibilité des variables 214
a. Profondeur de la déclaration 214
b. Portée des variables 215
c. Masquage d'une variable 215
2. Durée de vie des variables 217
a. Variables globales 217
b. Variables locales (auto) 217
c. Variables static 217
3. Choix méthodologiques 218
4. Mise en pratique : gestion de variables 218
I. Structuration d'un programme, étude d'un automate cellulaire 221
1. Clarifier et définir ses objectifs 221
a. Principe de l'automate cellulaire 221
b. Fonctionnement envisagé 222
2. Trouver une structure de données valable 223
3. Identifier les fonctions principales 224
4. Choisir le niveau des variables fondamentales 225
5. Écrire les fonctions 226
a. Fonction d'initialisation 226
b. Fonction d'affichage 227
c. Fonction de calcul 227
d. Fonction de comptage des voisins 229
e. Fonction de recopie 229
f. Montage dans le main() 230
6. Intégrer une librairie personnelle 231
7. Répartir son code sur plusieurs fichiers C 232
8. Mise en pratique : structuration d'un programme 234
a. Simulation d'un feu de forêt 234
b. Tristus et rigolus 235
c. Simulation d'une attaque de microbes dans le sang 235
d. Bancs de poissons, mouvements de populations 235
e. Élection présidentielle 235
f. Chenille 236
g. Système de vie artificielle, colonies de fourmis 236
h. Boutons et pages 237
i. Panneaux de bois et entrepôts 238
j. Nenuphs et clans 238
k. Neige 1 239
l. Neige 2 239
m. Neige 3 239
n. Casse-brique simple 239
o. Casse-brique guru 239
p. Space invader simple 240
q. Space invader more 240
r. Space invader guru 240
s. Pacman débutant 240
t. Pacman intermediate 240
u. Pacman guru 240
v. Jeu de miroirs 240
w. Simulations football 240
Chapitre 4 Variables pointeurs
A. Principe du pointeur 244
1. Qu'est-ce qu'un pointeur ? 244
a. Mémoire RAM 244
b. Une variable pointeur 245
c. Quatre opérateurs 245
d. Trois utilisations fondamentales des pointeurs 245
2. Déclarer un pointeur dans un programme 246
3. Fonctionnement des quatre opérateurs 247
a. Opérateur adresse : & 247
b. Opérateur étoile : * 248
c. Opérateur flèche : -> 249
d. Opérateur crochet : [] 249
e. Priorité des quatre opérateurs 250
4. Allouer dynamiquement de la mémoire 250
a. La fonction malloc() 250
b. Libérer la mémoire allouée : la fonction free() 251
c. Le pointeur générique void* 253
d. La valeur Null 253
5. Attention à la validité d'une adresse mémoire 254
a. Validité d'une adresse mémoire 254
b. Pourquoi caster le retour des fonctions d'allocation ? 256
6. Cas des tableaux de pointeurs 257
a. Une structure de données très utile 257
b. Un tableau de chaînes de caractères 258
c. Utiliser les arguments de lignes de commandes 259
7. Expérimentation : base pointeurs 261
8. Mise en pratique : base pointeurs 264
a. Avoir des pointeurs et les manipuler 264
b. Tests tableaux / pointeurs 264
c. Base allocation dynamique 266
d. Attention aux erreurs 267
e. Tableaux de chaînes 268
B. Allocation dynamique de tableaux 268
1. Allouer un tableau avec un pointeur 268
2. Allouer une matrice avec un pointeur de pointeur 269
3. Différences entre tableaux statiques et dynamiques 272
4. Autres fonctions d'allocation dynamique 272
a. Fonction calloc() 273
b. Fonction realloc() 273
5. Mise en pratique : allocation dynamique 274
a. Allouer dynamiquement des tableaux 274
b. Allouer dynamiquement des matrices 276
c. Allocation dynamique calloc() et realloc() 278
C. Pointeurs en paramètre de fonction 279
1. Passage par référence 279
a. Cas général d'une variable quelconque 279
b. Exemple : une fonction qui retourne l'heure 280
c. Passage par référence d'une structure 282
d. Passage par référence d'une variable pointeur 282
2. Tableaux dynamiques en paramètre 286
3. Mise en pratique : passage par référence 288
a. Passage par référence, base 288
b. Passage par référence, opérateurs bit à bit 290
c. Passage de pointeurs par référence 291
d. Passage de tableaux dynamiques 292
D. Fichiers (type File*) 293
1. Notions de base 293
a. Le type File* 293
b. Ouverture et fermeture d'un fichier 293
c. Spécifier un chemin d'accès 295
2. Fichiers binaires 296
a. Écriture et lecture en mode binaire 296
b. Détecter la fin d'un fichier binaire 297
c. Déplacements dans un fichier 298
3. Écriture et lecture en mode texte 298
a. Détecter la fin d'un fichier, EOF et feof() 298
b. Lecture / écriture de caractères 299
c. Lecture / écriture de chaînes 300
d. Lecture / écriture formatées 301
4. Sauvegarde d'éléments dynamiques 303
a. Sauver et récupérer un tableau dynamique 303
b. Récupérer des données via des pointeurs 304
5. Mise en pratique : fichiers 305
Chapitre 5 Récursivité
A. Fonctions récursives 310
1. Qu'est-ce que la récursivité ? 310
2. Une fonction récursive basique 310
3. Pile d'appels et débordement 312
4. Retourner une valeur 313
5. Représentation et analyse du fonctionnement 315
a. Analyse descendante 316
b. Analyse ascendante 317
6. Choisir entre itératif ou récursif 317
B. Exemples classiques de fonctions récursives 318
1. Calculs 318
a. Afficher les chiffres d'un entier 318
b. Produit factoriel 319
c. Suite de Fibonacci 319
d. Changement de base arithmétique d'un nombre 321
e. Puissance 323
f. PGCD, algorithme d'Euclide 324
2. Dessins 326
a. Tracé d'une règle graduée : "diviser pour résoudre" 326
b. Tracé de cercles 329
c. Tracé de carrés 330
d. Tracé d'un arbre 331
3. Créations et jeux 334
a. Trouver un chemin dans un labyrinthe 334
b. Création d'un labyrinthe 338
4. Les tours de Hanoï 340
5. Tri rapide d'un tableau de nombres 342
C. Mise en pratique : récursivité 344
Chapitre 6 Structures de données listes et algorithmes
A. Listes chaînées dynamiques 350
1. Qu'est-ce qu'une liste chaînée ? 350
a. Une chaîne constituée de maillons 350
b. Trois types de listes chaînées 350
c. Les actions sur une liste chaînée 351
d. Listes chaînées contre tableaux 352
2. Implémenter une liste simple 352
a. Structure de données d'un maillon 353
b. Début et fin de la liste 353
c. Initialiser un maillon 354
d. Ajouter un maillon au début d'une liste 354
e. Insérer un maillon dans une liste 356
f. Parcourir la liste 359
g. Supprimer un maillon au début de la liste 361
h. Supprimer un élément sur critère 361
i. Détruire la liste 364
j. Sauvegarder la liste 364
3. Implémenter une liste simple circulaire 366
a. Structure de données d'une liste circulaire 366
b. Liste vide 367
c. Début et fin de la liste 367
d. Initialiser un maillon 367
e. Ajouter un maillon 367
f. Parcourir la liste 368
g. Supprimer un maillon 369
h. Détruire la liste 369
4. Implémenter une liste symétrique 370
a. Structure de données 370
b. Liste vide 370
c. Début et fin de la liste 370
d. Initialiser un élément 370
i. Test dans le main() 386
4. Mise en pratique : les piles 387
C. Files 389
1. Principes de la file 389
a. Modèle de données file 389
b. Implémentation statique ou dynamique 389
c. Primitives de gestion des files 390
d. Applications importantes des files 390
2. Implémentation d'une file en dynamique 391
a. Structure de données 391
b. File vide, file pleine 391
c. Initialisation 392
d. Enfiler 392
e. Lire la tête, lire la queue 393
f. Défiler 393
g. Vider, détruire 394
h. Affichage 394
i. Test dans le main() 395
3. Implémentation d'une file en statique (tableau) 396
a. Structure de données 396
b. File vide, file pleine 397
c. Initialisation 397
d. Enfiler 398
e. Lire la tête, lire la queue 398
f. Défiler 399
g. Vider, détruire 399
h. Affichage 399
i. Test dans le main() 400
4. Mise en pratique : les files 401
D. Arbres 403
1. Généralités sur les arbres 403
a. Principe 403
b. Exemples d'utilisation des arbres 404
c. Nomenclature des arbres 406
2. Types d'arbre 407
a. Arbre binaire 407
b. Arbre n-aire 407
c. Transformer un arbre n-aire en arbre binaire 408
3. Représentations en mémoire 408
a. Arbre n-aire 408
b. Arbre binaire 410
c. Structures de données statiques ou dynamiques 411
E. Contrôler un arbre binaire 412
1. Créer un arbre binaire 412
a. Créer un arbre à partir d'un schéma descriptif 412
b. Créer un arbre à partir des données aléatoires d'un tableau 415
c. Créer un arbre en insérant des éléments ordonnés 417
2. Parcourir l'arbre 417
a. Parcours en profondeur 418
b. Parcours en largeur, par niveau 422
3. Afficher l'arbre 423
a. Afficher un arbre avec indentation 423
b. Dessiner l'arbre sans les liens 424
4. Obtenir des propriétés de l'arbre binaire 425
a. Connaître la taille 425
b. Connaître la hauteur 426
c. Savoir si un noeud est une feuille 426
d. Compter le nombre des feuilles de l'arbre 427
e. Lister toutes les feuilles 427
f. Faire la somme des valeurs des noeuds 428
g. Comparer des valeurs des noeuds de l'arbre 429
h. Ramener un noeud de l'arbre à partir d'une valeur 429
5. Dupliquer l'arbre 430
6. Détruire l'arbre 431
7. Conversion statique-dynamique d'un arbre binaire 431
a. Conversion d'un arbre statique en dynamique 431
b. Conversion d'un arbre dynamique en statique 432
8. Sauvegarde et chargement d'un arbre binaire 433
a. Sauvegarder un arbre dynamique 433
b. Charger (load) un arbre dynamique 433
9. Arbres binaires sur fichiers 434
a. Structure de données 434
b. Lecture d'un noeud à partir de son numéro d'enregistrement 434
c. Adaptation des fonctions pour les arbres binaires dynamiques ou statiques 435
10. Mise en pratique : arbre binaire 435
F. Arbres binaires de recherche 439
1. Définition 439
2. Structure de données 440
3. Insérer un élément dans l'arbre selon sa clé 441
a. Comparer deux clés 441
b. Insérer un élément à la bonne place 441
4. Rechercher dans l'arbre un élément selon sa clé 442
5. Supprimer un élément dans l'arbre de recherche 443
a. Trois cas 444
b. Fonction de recherche du noeud max 445
c. Fonction de suppression 445
6. Lister tous les éléments de l'arbre (parcours en largeur) 446
7. Afficher l'arbre 448
8. Test dans le main() 449
9. Mise en pratique : arbres 450
Chapitre 7 Variables objet, découvrir C++
A. C inclus en C++ 452
1. Un projet console en C++ 452
a. Bibliothèque <iostream> 453
b. L'instruction using namespace std; 453
2. Un programme C compilé en C++ 454
B. C augmenté en C++ 458
1. Entrée-sortie console : cout et cin 458
a. Utiliser cout et cin 458
b. Instructions de formatage en sortie 459
2. Variables et constantes 462
a. Déclarations plus souples 462
b. Type bool 462
c. Type caractère unicode : wchar_t 463
d. Typedef inutile pour les structures 463
e. Type référence (pointeur masqué) 464
f. Type pointeur, opérateurs new et delete 467
g. Constantes et pointeurs 468
h. Constantes (const) et énumération (enum) plutôt que #define 469
3. Conversions de types 470
a. static_cast<type> 470
b. const_cast<type> 470
c. reinterpret_cast<type> 471
d. dynamic_cast<type> 471
4. Fonctions 472
a. Fonctions embarquées "inline" 472
b. Retourner une référence 472
c. Surcharge des fonctions 474
d. Valeurs par défaut de paramètres 475
e. Fonctions génériques (template) 476
f. Fonctions comme champs de structures 478
5. Gestion des exceptions (base) 480
a. Instruction throw 480
b. Instruction de saut try-catch 481
c. Instruction throw et appels de fonctions 482
d. Instruction throw sans valeur de retour 483
e. Préciser les retours d'exceptions des fonctions 484
f. Exception non identifiée 485
g. Bloc catch(...) par défaut 486
6. Espaces de noms (namespace) et raccourcis (using) 487
7. Intégrer d'autres langages dans le code C++ 491
C. La dimension objet du C++ 492
1. Classe et objet 492
a. Qu'est-ce qu'une classe ? 493
b. Qu'est-ce qu'un objet ? 493
c. Définir une classe 493
d. Déclarer un objet 494
e. Droits d'accès 494
f. Un programme C muté en classe et objet 495
2. Constructeur 500
a. Paramétrer un objet à sa déclaration 500
b. Le pointeur this 502
c. Constructeur sans paramètre 503
d. Constructeurs avec paramètres 504
e. Constructeur et copie d'objet 505
f. Constructeur avec conversion 509
3. Destructeur 510
4. Classes et membres "static" 512
a. Qualificatif static en C 512
b. Qualificatif static et objets 513
5. Surcharge des opérateurs 514
a. Fonction operator globale hors classe 515
b. Fonction operator localisée dans une classe 516
c. Fonction operator et données dynamiques 519
6. Classes génériques ("template" ou "patron") 523
a. Principe 523
b. Syntaxe de base 523
c. Syntaxe constructeurs 524
d. Syntaxe avec plusieurs types génériques 525
e. Exemple d'implémentation d'une pile générique 525
f. Spécialisation de fonction sur un type donné 527
7. Héritage 529
a. Définir une classe dérivée 529
b. Appeler explicitement un constructeur de la classe de base 531
c. Redéfinition de données ou de fonctions 532
d. Spécifier un membre de la classe de base 533
e. Droits d'accès de la classe héritée 534
f. Héritage multiple 539
g. Héritage multiple avec une base virtuelle 543
8. Pointeurs polymorphes, virtualité 546
a. Accès pointeurs par défaut aux fonctions redéfinies 547
b. Accès pointeur aux fonctions virtuelles redéfinies 548
c. Intérêt des accès pointeurs aux fonctions virtuelles 550
d. Classes abstraites, fonctions virtuelles pures 551
9. Classes et fonctions "amies" (friend) 556
Chapitre 8 Annexe
A. Priorité et associativité des opérateurs 560
B. Quelques outils d'affichage en console Windows 561
C. Librairie C de création en mode console 563
1. Téléchargement 563
2. Installation 563
3. Utilisation 563
4. Fonctions disponibles 564
a. Manipuler le curseur en écriture 564
b. Manipuler la couleur 564
c. Quelques manipulations sur la fenêtre console 565
d. La gestion des évènements 566
e. Chbitmap : buffer de données pour affichage 566
f. Chtext : opérations de text en mode Chbitmap 567
Index | | Permalink : | ./index.php?lvl=notice_display&id=15124 |
|  |