Algorithmique
Raisonner pour concevoir
3e édition
Editions ENI
Chapitre 1
Qu'est-ce que l'algorithmique ?
1. Qu'est-ce que l'algorithmique ?11
2. Structure du livre16
3. Public visé19
4. Conventions adoptées20
5. Préface à la troisième édition21
Partie 1
Chapitre 2
Programmes directs
1. Introduction23
2. Premiers exemples24
3. Définition informelle d'un algorithme28
4. Spécifications32
5. Premiers algorithmes50
6. Exercices résolus61
7. Exercices91
8. Notes bibliographiques93
9. Résumé93
10. Bibliographie94
Chapitre 3
L'alternative
1. Introduction95
2. Définition de l'alternative95
3. Exercices résolus105
4. Exercices119
5. Résumé122
Chapitre 4
Structures élémentaires
1. Introduction123
2. Les chaînes de caractères124
2.1 Les caractères124
2.2 Les chaînes de caractères131
2.3 Exercices d'application sur les chaînes de caractères142
3. Le tableau143
3.1 Les tableaux simples143
3.2 Tableaux composés150
3.3 Deux fonctions utiles sur les tableaux151
3.3.1 La fonction appartient151
3.3.2 La fonction sous_tableau152
3.4 Exercices d'application sur les tableaux154
4. Définir un nouveau type de données154
4.1 Définir un type de données155
4.2 Discussion sur les invariants159
4.3 Exercices d'application sur les types de données160
5. Notes bibliographiques169
6. Résumé169
7. Bibliographie170
Chapitre 5
Itération
1. Introduction171
2. Premiers exemples de construction d'itérations172
2.1 La table de multiplication172
2.1.1 Le problème172
2.1.2 Construction de l'itération175
2.1.3 Une autre version185
2.2 Itérer dans un tableau190
2.2.1 Rang de la composante minimum d'un tableau190
2.2.2 Rechercher dans un tableau trié199
2.2.3 Recherche par dichotomie200
2.2.4 Extensions212
3. Explorer un tableau213
3.1 Rechercher une identité : le problème215
3.2 L'algorithme à écrire : chercher_identité217
3.3 Utilisation : effacer tous les clients d'identité donnée220
3.4 Définition de chercher_identité230
3.5 Vieillir les clients235
3.6 Exercices240
4. Algorithme ou programme ?241
4.1 Un exemple édifiant241
4.1.1 Quelques maladresses : les notations242
4.1.2 Quand les fautes font oublier les maladresses248
4.2 Une solution au problème de la moyenne250
4.3 Compléter l'exercice : les spécifications qui manquent257
4.4 Compléter l'exercice : remplir le tableau261
5. Exercices d'application266
6. Notes bibliographiques271
7. Résumé271
8. Bibliographie272
Chapitre 6
Récursivité
1. Introduction273
2. Introduction à la récursivité ; les chaînes de caractères274
2.1 Présentation de la récursivité274
2.2 Quelques exemples de spécifications récursives283
2.3 Exercices résolus288
2.4 Exercices314
3. Les nombres et la récursivité316
3.1 Arithmétique316
3.2 Factorielle et autres exercices usés317
3.3 Fractions318
3.4 Fonction réelle319
4. Nombres et chaînes de caractères : édition d'un entier320
5. Problèmes323
5.1 Recherche par dichotomie dans un tableau trié323
5.2 Palindromes323
5.3 Le drapeau de Dijkstra325
6. Résumé327
Chapitre 7
Récursivité ou itération ?
1. Introduction329
2. Retour sur la récursivité330
2.1 Premier exemple330
2.2 Deuxième exemple334
2.3 Troisième exemple335
3. Récursivité ou itération336
4. Exercices340
5. Résumé352
Partie 2
Chapitre 8
Trier
1. Introduction353
2. Spécifier un algorithme de tri354
2.1 Présentation du problème du tri354
2.2 Etude de la postcondition du tri356
3. Quelques algorithmes simples366
3.1 Tri par permutations : introduction367
3.2 Tri par permutations370
3.3 Tri « à bulle » (bubble sort)372
3.4 D'autres tris par permutations374
4. Fusionner deux tableaux triés388
4.1 Définition d'un vecteur389
4.1.1 Définition des prédicats391
4.1.2 Primitives de placement dans le vecteur392
4.1.3 Accès aux composantes du vecteur393
4.1.4 Exemples395
4.2 Fusion de deux vecteurs triés400
4.2.1 Spécification de l'algorithme de fusion401
4.2.2 Analyse de la fusion403
5. Exercices406
5.1 Tri par insertion dichotomique406
5.2 Un tri topologique407
5.3 Compléter les spécifications407
6. Notes bibliographiques409
7. Résumé409
8. Bibliographie409
Chapitre 9
Édition d'un nombre
1. Introduction411
2. Édition d'un entier dans une base quelconque412
2.1 Nombre de chiffres d'un entier412
2.2 Résolution du problème d'édition414
2.3 Résolution du problème réciproque417
3. Conversion des adresses Internet421
3.1 Conversion d'un entier en adresse « Internet Protocol »421
3.1.1 Introduction421
3.1.2 Conversion d'une adresse IPv4 en un entier422
3.1.3 Conversion d'une adresse entière en une adresse IPv4435
3.2 Exercice445
4. Conversion d'un nombre entier en chiffre romain447
5. Vérification des identifiants d'entreprises447
6. Vérification des identifiants de livres451
7. Résumé453
8. Bibliographie453
Chapitre 10
Introduction aux fichiers
1. Introduction455
2. Notions élémentaires456
2.1 Fichiers et articles456
2.2 Organisation et accès aux fichiers459
2.3 Association d'un fichier physique à un programme460
3. Organisation séquentielle463
3.1 Introduction463
3.2 Traitement d'un fichier séquentiel en lecture468
3.3 Parcours d'un fichier séquentiel472
3.4 Traitement en écriture d'un fichier séquentiel478
3.5 Mise à jour d'un fichier à organisation séquentielle482
4. L'organisation directe et l'accès sélectif485
4.1 Correspondance à l'aide d'une table d'accès486
4.2 Correspondance à l'aide d'une fonction de répartition487
5. Problèmes489
5.1 Statistiques d'import/export489
5.2 Exploiter un questionnaire d'attitude491
5.3 Exploiter les réponses à une enquête d'utilité publique491
5.4 Rechercher les anagrammes dans un dictionnaire492
6. Notes bibliographiques496
7. Résumé496
8. Bibliographie496
Chapitre 11
Simuler
1. Introduction497
2. Générer des nombres pseudo-aléatoires499
2.1 Quelques générateurs499
2.1.1 Le 147-générateur501
2.1.2 Générateurs de Hamming503
2.2 Tester une suite de nombres pseudo-aléatoires507
2.2.1 Test de l'histogramme511
3. Jeux de hasard515
3.1 Simuler une roulette515
3.2 Simuler un dé518
4. Simulation de processus dynamiques518
4.1 Propagation d'une rumeur519
4.2 Course poursuite521
5. Simulation statistique de phénomènes déterministes524
5.1 Calculer π524
5.2 Évaluer une intégrale définie526
6. Simulation de phénomènes aléatoires528
6.1 A la chasse aux mouches528
6.2 Propagation d'une rumeur534
6.3 Fiabilité des systèmes541
6.4 Dispersion des valeurs des composants d'un circuit électronique543
7. Notes bibliographiques547
8. Résumé547
9. Bibliographie547
Chapitre 12
Crypter
1. Introduction549
2. Intégrité549
2.1 Présentation549
2.2 Comparer deux empreintes552
2.3 Condenser le contenu d'un fichier556
3. Confidentialité560
3.1 Principes mathématiques de la confidentialité560
3.2 Cryptographie à clé secrète561
3.3 Cryptographie à clé symétrique562
3.4 Codage élémentaire : XOR562
3.5 Codage de Vernam565
3.6 Codage élémentaire à substitution mono-alphabétique simple567
3.7 La méthode de Vigenère568
4. Notes bibliographiques570
5. Conclusion571
6. Bibliographie571
Index573