Algorithmique et programmation en Java
5e édition
Vincent Granet
Dunod
Avant-proposXVII
Chapitre 1 • Introduction1
1.1 Environnement matériel1
1.2 Environnement logiciel4
1.3 Les langages de programmation6
1.4 Construction des programmes12
1.5 Démonstration de validité13
Chapitre 2 • Actions élémentaires17
2.1 Lecture d'une donnée17
2.2 Exécution d'une routine prédéfinie18
2.3 Écriture d'un résultat19
2.4 Affectation d'un nom à un objet19
2.5 Déclaration d'un nom20
2.5.1 Déclaration de constantes20
2.5.2 Déclaration de variables21
2.6 Règles de déduction21
2.6.1 L'affectation21
2.6.2 L'appel de routine22
2.7 Le programme sinus écrit en Java22
2.8 Exercices24
Chapitre 3 • Types élémentaires25
3.1 Le type entier26
3.2 Le type réel27
3.3 Le type booléen30
3.4 Le type caractère31
3.5 Constructeurs de types simples33
3.5.1 Les types énumérés33
3.5.2 Les types intervalles34
3.6 Exercices34
Chapitre 4 • Expressions37
4.1 Évaluation38
4.1.1 Composition du même opérateur plusieurs fois38
4.1.2 Composition de plusieurs opérateurs différents38
4.1.3 Parenthésage des parties d'une expression39
4.2 Type d'une expression39
4.3 Conversions de type40
4.4 Un exemple40
4.5 Exercices43
Chapitre 5 • Énoncés structurés45
5.1 Énoncé composé45
5.2 Énoncés conditionnels46
5.2.1 Énoncé choix46
5.2.2 Énoncé si48
5.3 Résolution d'une équation du second degré49
5.4 Exercices53
Chapitre 6 • Routines55
6.1 Intérêt55
6.2 Déclaration d'une routine56
6.3 Appel d'une routine57
6.4 Transmission des paramètres58
6.4.1 Transmission par valeur59
6.4.2 Transmission par résultat59
6.5 Retour d'une routine59
6.6 Localisation60
6.7 Règles de déduction62
6.8 Exemples63
6.8.1 Équation du second degré63
6.8.2 Date du lendemain64
6.9 Exercices67
Chapitre 7 • Programmation par objets69
7.1 Objets et classes69
7.1.1 Création des objets70
7.1.2 Destruction des objets71
7.1.3 Accès aux attributs71
7.1.4 Attributs de classe partagés72
7.1.5 Les classes en Java72
7.2 Les méthodes73
7.2.1 Accès aux méthodes74
7.2.2 Constructeurs74
7.2.3 Constructeurs en Java75
7.2.4 Les méthodes en Java75
7.3 Assertions sur les classes77
7.4 Exemples78
7.4.1 Équation du second degré78
7.4.2 Date du lendemain81
7.5 Exercices84
Chapitre 8 • Énoncés itératifs87
8.1 Forme générale87
8.2 L'énoncé tantque88
8.3 L'énoncé répéter89
8.4 Finitude90
8.5 Exemples90
8.5.1 Factorielle90
8.5.2 Minimum et maximum91
8.5.3 Division entière92
8.5.4 Plus grand commun diviseur93
8.5.5 Multiplication93
8.5.6 Puissance94
8.6 Exercices95
Chapitre 9 • Les tableaux97
9.1 Déclaration d'un tableau97
9.2 Dénotation d'un composant de tableau98
9.3 Modification sélective99
9.4 Opérations sur les tableaux99
9.5 Les tableaux en Java99
9.6 Un exemple101
9.7 Les chaînes de caractères103
9.8 Exercices105
Chapitre 10 • L'énoncé itératif pour107
10.1 Forme générale107
10.2 Forme restreinte108
10.3 Les énoncés pour de Java108
10.4 Exemples110
10.4.1 Le schéma de Horner110
10.4.2 Exemple en Java : nombres binaires111
10.4.3 Un tri interne simple112
10.4.4 Confrontation de modèle114
10.5 Complexité des algorithmes117
10.6 Exercices119
Chapitre 11 • Les tableaux à plusieurs dimensions123
11.1 Déclaration123
11.2 Dénotation d'un composant de tableau124
11.3 Modification sélective124
11.4 Opérations124
11.5 Tableaux à plusieurs dimensions en Java125
11.6 Exemples125
11.6.1 Initialisation d'une matrice125
11.6.2 Ligne de somme maximale126
11.6.3 Matrice symétrique127
11.6.4 Demi-matrice carrée128
11.6.5 Produit de matrices129
11.6.6 Carré magique130
11.7 Exercices132
Chapitre 12 • Héritage137
12.1 Classes héritières137
12.2 Redéfinition de méthodes140
12.3 Recherche d'un attribut ou d'une méthode141
12.4 Polymorphisme et liaison dynamique142
12.5 Classes abstraites144
12.6 Héritage simple et multiple144
12.7 Héritage et assertions145
12.7.1 Assertions sur les classes héritières145
12.7.2 Assertions sur les méthodes145
12.8 Relation d'héritage ou de clientèle146
12.9 L'héritage en Java147
12.10 Exercices150
Chapitre 13 • Fonctions anonymes153
13.1 Paramètres fonctions154
13.1.1 Fonctions anonymes en Java155
13.1.2 Filtrage, foreach et map157
13.1.3 Continuation159
13.2 Fonctions anonymes en résultat161
13.2.1 Composition161
13.2.2 Curryfication162
13.3 Fermeture164
13.3.1 Fermeture en Java164
13.3.2 Lambda récursives166
13.4 Exercices167
Chapitre 14 • Les exceptions169
14.1 Émission d'une exception169
14.2 Traitement d'une exception170
14.3 Le mécanisme d'exception de Java171
14.3.1 Traitement d'une exception171
14.3.2 Émission d'une exception172
14.4 Exercices173
Chapitre 15 • Les fichiers séquentiels175
15.1 Déclaration de type176
15.2 Notation176
15.3 Manipulation des fichiers177
15.3.1 Écriture177
15.3.2 Lecture178
15.4 Les fichiers de Java179
15.4.1 Fichiers d'octets179
15.4.2 Fichiers d'objets élémentaires181
15.4.3 Fichiers d'objets structurés185
15.5 Les fichiers de texte186
15.6 Les fichiers de texte en Java186
15.7 Automate et reconnaissance de mots188
15.8 Exercices193
Chapitre 16 • Récursivité195
16.1 Récursivité des actions196
16.1.1 Définition196
16.1.2 Finitude196
16.1.3 Écriture récursive des routines196
16.1.4 La pile d'évaluation199
16.1.5 Quand ne pas utiliser la récursivité ?200
16.1.6 Récursivité directe et croisée202
16.1.7 Zéro d'une fonction204
16.2 Récursivité des objets205
16.3 Exercices208
Chapitre 17 • Structures de données211
17.1 Définition d'un type abstrait212
17.2 L'implémentation d'un type abstrait214
17.3 Utilisation du type abstrait216
Chapitre 18 • Structures linéaires219
18.1 Les listes219
18.1.1 Définition abstraite220
18.1.2 L'implémentation en Java221
18.1.3 Énumération233
18.2 Les piles237
18.2.1 Définition abstraite237
18.2.2 L'implémentation en Java238
18.3 Les files241
18.3.1 Définition abstraite242
18.3.2 L'implémentation en Java242
18.4 Les dèques243
18.4.1 Définition abstraite244
18.4.2 L'implémentation en Java244
18.5 Exemple d'utilisation d'une Pile245
18.6 Exercices247
Chapitre 19 • Graphes251
19.1 Terminologie252
19.2 Définition abstraite d'un graphe253
19.3 L'implémentation en Java254
19.3.1 Matrice d'adjacence256
19.3.2 Listes d'adjacence258
19.4 Parcours d'un graphe260
19.4.1 Parcours en profondeur260
19.4.2 Parcours en largeur261
19.4.3 Programmation en Java des parcours de graphe262
19.5 Exemple263
19.6 Exercices263
Chapitre 20 • Structures arborescentes265
20.1 Terminologie266
20.2 Les arbres267
20.2.1 Définition abstraite268
20.2.2 L'implémentation en Java269
20.2.3 Algorithmes de parcours d'un arbre272
20.3 Arbre binaire273
20.3.1 Définition abstraite274
20.3.2 L'implémentation en Java275
20.3.3 Parcours d'un arbre binaire278
20.4 Représentation binaire des arbres généraux280
20.5 Exercices281
Chapitre 21 • Tables285
21.1 Définition abstraite286
21.1.1 Ensembles286
21.1.2 Description fonctionnelle286
21.1.3 Description axiomatique286
21.2 Représentation des éléments en Java286
21.3 Représentation par une liste288
21.3.1 Liste non ordonnée288
21.3.2 Liste ordonnée290
21.3.3 Recherche dichotomique292
21.4 Représentation par un arbre ordonné294
21.4.1 Recherche d'un élément295
21.4.2 Ajout d'un élément295
21.4.3 Suppression d'un élément296
21.5 Les arbres AVL298
21.5.1 Rotations299
21.5.2 Mise en oeuvre302
21.6 Arbres 2-3-4 et bicolores306
21.6.1 Les arbres 2-3-4306
21.6.2 Mise en oeuvre en Java309
21.6.3 Les arbres bicolores311
21.6.4 Mise en oeuvre en Java316
21.7 Tables d'adressage dispersé321
21.7.1 Le problème des collisions323
21.7.2 Choix de la fonction d'adressage323
21.7.3 Résolution des collisions325
21.8 Exercices329
Chapitre 22 • Files avec priorité333
22.1 Définition abstraite333
22.2 Représentation avec une liste334
22.3 Représentation avec un tas334
22.3.1 Premier335
22.3.2 Ajouter336
22.3.3 Supprimer337
22.3.4 L'implémentation en Java338
22.4 Exercices341
Chapitre 23 • Algorithmes de tri343
23.1 Introduction343
23.2 Tris internes344
23.2.1 L'implantation en Java345
23.2.2 Méthodes par sélection345
23.2.3 Méthodes par insertion350
23.2.4 Tri par échanges355
23.2.5 Comparaisons des méthodes359
23.2.6 Tri sans comparaison de clés361
23.3 Tris externes363
23.4 Exercices366
Chapitre 24 • Algorithmes sur les graphes369
24.1 Composantes connexes369
24.2 Fermeture transitive371
24.3 Plus court chemin374
24.3.1 Algorithme de Dijkstra374
24.3.2 Algorithme de Bellman-Ford378
24.3.3 Algorithme A*379
24.3.4 Algorithme IDA*381
24.4 Tri topologique383
24.4.1 L'implémentation en Java384
24.4.2 Existence de cycle dans un graphe386
24.4.3 Tri topologique inverse386
24.4.4 L'implémentation en Java386
24.5 Exercices387
Chapitre 25 • Algorithmes de rétro-parcours391
25.1 Écriture récursive391
25.2 Le problème des huit reines393
25.3 Écriture itérative395
25.4 Problème des sous-suites396
25.5 Jeux de stratégie398
25.5.1 Stratégie MinMax398
25.5.2 Coupure α-β401
25.5.3 Profondeur de l'arbre de jeu404
25.6 Exercices405
Chapitre 26 • Interfaces graphiques409
26.1 Systèmes interactifs409
26.2 Conception d'une application interactive411
26.3 Environnements graphiques413
26.3.1 Système de fenêtrage414
26.3.2 Caractéristiques des fenêtres416
26.3.3 Boîtes à outils418
26.3.4 Générateurs420
26.4 Interfaces graphiques en Java420
26.4.1 Une simple fenêtre421
26.4.2 Convertisseur Celsius-Fahrenheit423
26.4.3 Un composant graphique pour visualiser des couleurs427
26.4.4 Applets430
26.5 Exercices432
Bibliographie435
Index439