Algorithmique
Techniques fondamentales de programmation
3e édition
Édition ENI
Avant-propos
Chapitre 1
Introduction à l'algorithmique
1. Les fondements de l'informatique13
1.1 Architecture de Von Neumann13
1.2 La machine de Turing17
1.3 Représentation interne des instructions et des données19
1.3.1 Le binaire19
1.3.2 Les octets et les mots22
1.3.3 L'hexadécimal23
2. L'algorithmique24
2.1 Programmer, c'est un art24
2.2 Définition : l'algorithme est une recette26
2.3 Pourquoi utiliser un algorithme ?27
2.4 Le formalisme28
2.4.1 La représentation graphique29
2.4.2 L'algorithme sous forme de texte30
2.5 La complexité32
3. Les langages d'implémentation35
3.1 Quel langage ?35
3.2 Classifications des langages37
3.2.1 Haut niveau, bas niveau38
3.2.2 Diverses classifications39
3.2.3 Compilé ou interprété39
3.3 La machine virtuelle41
3.4 PHP42
3.4.1 Les avantages42
3.4.2 Historique42
3.4.3 Informations pratiques43
3.4.4 Pages dynamiques44
3.4.5 Installer le nécessaire45
3.4.6 Un premier programme PHP46
4. Exercices47
Chapitre 2
Les variables et opérateurs
1. Les variables49
1.1 Principe49
1.2 Déclaration52
1.3 Types52
1.3.1 Les nombres53
1.3.2 Autres types numériques56
1.3.3 Les caractères57
1.3.4 Le type booléen59
1.4 Affectation60
1.4.1 Affectation de valeurs60
1.4.2 Affectation de variables63
1.5 Saisie et affichage64
1.6 Les constantes67
2. Opérateurs et calculs68
2.1 Les affectations68
2.2 Les opérateurs arithmétiques68
2.3 Les opérateurs booléens74
2.4 Les opérateurs de comparaison77
2.4.1 L'égalité77
2.4.2 La différence79
2.4.3 Inférieur, supérieur79
2.5 Le cas des chaînes de caractères80
3. Pour aller plus loin81
3.1 Les nombres négatifs81
3.2 La représentation des nombres réels83
3.3 Les dates87
3.4 Les caractères88
4. Types et langages90
4.1 Langages typés ou non90
4.2 La gestion de la mémoire91
5. Exercices92
Chapitre 3
Tests et logique booléenne
1. Les tests et conditions95
1.1 Principe95
1.2 Que tester ?97
1.3 Tests SI98
1.3.1 Forme simple98
1.3.2 Forme complexe100
1.4 Tests imbriqués102
1.5 Choix multiples106
1.6 Des exemples complets109
1.6.1 Le lendemain d'une date109
1.6.2 La validité d'une date113
1.6.3 L'heure dans n secondes114
2. L'algèbre booléen119
2.1 L'origine des tests119
2.2 Petites erreurs, grosses conséquences121
2.2.1 Ariane 5121
2.2.2 Mars Climate Orbiter122
2.3 George Boole122
2.4 L'algèbre123
2.4.1 Établir une communication123
2.4.2 La vérité125
2.4.3 La loi ET125
2.4.4 La loi OU126
2.4.5 Le contraire127
2.4.6 Les propriétés127
2.4.7 Quelques fonctions logiques131
2.4.8 Avec plus de deux variables134
2.5 Une dernière précision137
3. Exercices139
Chapitre 4
Les boucles
1. Les structures itératives141
1.1 Définition141
1.2 Quelques usages simples142
2. Tant Que143
2.1 Structure générale143
2.2 Boucles infinies et break145
2.3 Des exemples147
2.3.1 Une table de multiplication147
2.3.2 Une factorielle148
2.3.3 x à la puissance y149
2.3.4 Toutes les tables de multiplication152
2.3.5 Saisie de notes et calcul de moyennes153
2.3.6 Rendez la monnaie159
2.3.7 Trois boucles163
3. Répéter ... Jusqu'à164
3.1 Différences fondamentales164
3.2 Quelques exemples adaptés166
3.2.1 La factorielle166
3.2.2 Les trois boucles167
4. Pour... Fin Pour168
4.1 Une structure pour compter168
4.2 ... mais pas indispensable169
4.3 Quelle structure choisir ?169
4.4 Un piège à éviter170
4.5 Quelques exemples171
4.5.1 De nouveau trois boucles171
4.5.2 La factorielle172
4.5.3 Racine carrée avec précision173
4.5.4 Calcul du nombre PI176
5. Exercices178
Chapitre 5
Les tableaux et structures
1. Présentation181
1.1 Principe et définitions181
1.1.1 Simplifier les variables181
1.1.2 Les dimensions183
1.1.3 Les types184
1.1.4 Déclaration184
1.1.5 Utilisation185
1.1.6 Les tableaux dynamiques186
1.2 PHP et les tableaux187
1.3 Représentation en mémoire191
1.3.1 Représentation linéaire191
1.3.2 Représentation par référence193
2. Manipulations simples195
2.1 Recherche d'un élément195
2.2 Le plus grand/petit, moyenne197
2.3 Le morpion198
3. Algorithmes avancés203
3.1 Les algorithmes des tris203
3.1.1 Principe203
3.1.2 Le tri par création204
3.1.3 Le tri par sélection204
3.1.4 Le tri à bulles206
3.1.5 Le tri par insertion210
3.1.6 Le tri Shell213
3.1.7 Le tri Batcher215
3.2 Recherche par dichotomie216
4. Structures et enregistrements219
4.1 Principe219
4.2 Déclaration220
4.2.1 Type structuré220
4.2.2 Enregistrement221
4.3 Utiliser les enregistrements222
4.3.1 Utiliser les champs222
4.3.2 Un enregistrement dans une structure224
4.3.3 Un tableau dans une structure225
4.4 Les tableaux d'enregistrements227
4.4.1 Les tables227
4.4.2 Une table comme champ228
4.5 Et PHP ?229
5. Exercices231
Chapitre 6
Les sous-programmes
1. Présentation235
1.1 Principe235
1.2 Déclaration et définition237
1.2.1 Dans un algorithme237
1.2.2 En PHP238
1.3 Appel239
1.4 Fonctions et procédures240
1.4.1 Les procédures241
1.4.2 Les fonctions241
1.5 Variables locales et globales244
1.5.1 Les variables locales244
1.5.2 Les variables globales245
1.5.3 Variables globales et PHP246
1.6 Paramètres247
1.6.1 Les procédures247
1.6.2 Les fonctions250
1.6.3 Paramètres et PHP252
1.6.4 Petite application fonctionnelle253
1.7 Sous-programmes prédéfinis256
1.7.1 Un choix important256
1.7.2 Quelques exemples257
1.8 Dernier cas : les tableaux261
2. Les sous-programmes récursifs263
2.1 Principe263
2.2 Un premier exemple : la factorielle264
2.3 Un exemple pratique : les tours de Hanoi269
3. Exercices271
Chapitre 7
Les fichiers
1. Les différents fichiers273
1.1 Préambule273
1.2 Problématique274
1.3 Définition275
1.4 Les formats275
1.4.1 Types de contenus275
1.4.2 Le fichier binaire277
1.4.3 Le fichier texte278
1.4.4 Quel format utiliser ?280
1.5 Les accès aux fichiers281
1.5.1 Séquentiel281
1.5.2 Accès direct282
1.5.3 Indexé282
1.5.4 Autre ?282
2. Les enregistrements283
2.1 Les délimiteurs283
2.2 Largeur fixe286
2.3 Principes d'accès287
2.3.1 Étapes de base287
2.3.2 Identificateurs de fichiers et canaux288
2.3.3 Les modes d'ouverture289
3. Fichier texte séquentiel290
3.1 Ouvrir et fermer un fichier290
3.2 Lire et écrire des enregistrements291
3.2.1 Lecture291
3.2.2 Écriture293
3.3 Les enregistrements structurés297
3.4 Exemple en PHP300
4. Exercices302
Chapitre 8
Notions avancées
1. Les pointeurs et références303
1.1 Rappels sur la mémoire et les données303
1.1.1 Structure de la mémoire303
1.1.2 PHP : des limites qui n'en sont pas305
1.1.3 Brefs exemples en C305
1.2 Le pointeur306
1.2.1 Principe et définition306
1.2.2 Le C roi des pointeurs308
1.2.3 Applications309
1.3 Notation algorithmique312
1.3.1 Déclarer et utiliser les pointeurs312
1.3.2 Allocation dynamique314
1.4 PHP et les références316
1.4.1 Différences entre le C et PHP316
1.4.2 Les références317
1.4.3 Références sur structures320
1.4.4 Le piège en PHP321
1.4.5 La valeur null322
2. Les listes chaînées324
2.1 Listes chaînées simples324
2.1.1 Principe324
2.1.2 Création327
2.1.3 Parcours de la liste329
2.1.4 Recherche330
2.1.5 Ajout d'un élément331
2.1.6 Suppression d'un élément335
2.1.7 Supprimer toute la liste338
2.1.8 Parcours récursif338
2.2 L'implémentation en PHP339
2.3 Autres exemples de listes343
2.3.1 Listes circulaires343
2.3.2 Listes d'éléments triés343
2.3.3 Listes doublement chaînées343
2.3.4 Files et piles344
3. Les arbres345
3.1 Principe345
3.2 Définitions347
3.2.1 Base347
3.2.2 Terminologie347
3.2.3 Description horizontale348
3.2.4 Description verticale348
3.2.5 L'arbre binaire348
3.3 Parcours d'un arbre349
3.4 Arbre binaire ordonné352
3.4.1 Principe352
3.4.2 Recherche d'un élément352
3.4.3 Ajout d'un élément354
3.4.4 Suppression d'un noeud355
3.5 Exemples de tri356
3.5.1 Tri par fusion356
3.5.2 Tri rapide357
4. Exercices359
Chapitre 9
Une approche de l'objet
1. Principe de l'objet, une notion évidente361
1.1 Avant de continuer361
1.2 Rappels sur la programmation procédurale362
1.2.1 Les données362
1.2.2 Les traitements363
1.3 L'objet363
1.3.1 Dans la vie courante363
1.3.2 En informatique364
1.4 Classe, objets367
1.5 Déclaration et accès369
1.6 Les méthodes371
1.7 Portée des membres372
1.8 Encapsulation des données374
1.9 L'héritage376
1.9.1 Principe376
1.9.2 Commerce378
1.9.3 Hiérarchie379
1.9.4 Simple ou multiple380
1.10 Le polymorphisme381
1.10.1 Principe381
1.10.2 Le polymorphisme ad hoc381
1.10.3Le polymorphisme d'héritage382
1.10.4Le polymorphisme paramétrique384
2. Manipuler les objets385
2.1 Les constructeurs385
2.1.1 Déclaration385
2.1.2 Appel implicite386
2.1.3 L'héritage388
2.2 Les destructeurs390
2.3 Les attributs statiques391
2.4 Classes et méthodes abstraites393
2.5 Interfaces396
3. L'objet en PHP398
3.1 Les langages objet398
3.2 Déclaration des classes et objets399
3.3 Héritage402
3.4 Interfaces404
4. Exercices407
Chapitre 10
Corrigés des exercices
1. Introduction à l'algorithmique413
2. Les variables et opérateurs415
3. Tests et logique booléenne420
4. Les boucles428
5. Les tableaux et structures438
6. Les sous-programmes446
7. Les fichiers451
8. Notions avancées453
9. Une approche de l'objet457
Index
485