Bases en algorithmique et en programmation
Cours et 120 exercices corrigés
Pascal Lienhardt
Samuel Peltier
Agnès Arnould
Laurent Fuchs
ellipse
I Notions élémentaires15
1 Types, variables, expressions
17
1.1 Notions essentielles18
1.1.1 Types et comparaisons de valeurs18
1.1.2 Types de base19
1.1.3 Types construits24
1.1.4 Expressions28
1.1.5 Variables non mutables30
1.2 Conventions d'écriture34
1.2.1 Espaces35
1.2.2 Identificateurs35
1.2.3 Valeurs36
1.2.4 Variables36
1.2.5 Indentations37
1.3 Compléments37
1.3.1 Remarques générales37
1.3.2 Types numériques41
1.4 Exercices44
1.5 Corrigés48
2 Fonctions
55
2.1 Notions essentielles56
2.1.1 Définition de fonction56
2.1.2 Appel de fonction59
2.1.3 Conception et vérification de fonction61
2.1.4 Fonctions prédéfinies63
2.2 Conventions d'écriture64
2.3 Compléments66
2.3.1 Détection des erreurs66
2.3.2 Déclaration de variable us déclaration de fonction en OCaml69
2.4 Exercices70
2.5 Corrigés74
3 Conditionnelle
85
3.1 Notions essentielles86
3.1.1 Expression conditionnelle86
3.1.2 Conditionnelles imbriquées90
3.1.3 Contrôle du domaine de définition d'une fonction ....92
3.2 Conventions d'écriture94
3.3 Compléments95
3.4 Exercices96
3.5 Corrigés100
II Récursivité111
4 Composition de fonctions
113
4.1 Notions essentielles114
4.1.1 Définition de fonctions composées114
4.1.2 Exécution de fonctions composées116
4.1.3 Utilité de la composition de fonctions120
4.2 Compléments121
4.2.1 Pile d'exécution121
4.2.2 Conception et vérification122
4.2.3 Contrôle des domaines d'une fonction125
4.3 Exercices129
4.4 Corrigés135
5 Fonctions récursives
149
5.1 Notions essentielles150
5.1.1 Définition150
5.1.2 Exécution151
5.1.3 Terminaison153
5.1.4 Complexité156
5.1.5 Forme générale158
5.1.6 Tests159
5.2 Conventions d'écriture160
5.3 Compléments160
5.3.1 Récursivité simple vs récursivité générale160
5.3.2 Récursivité terminale162
5.3.3 Conception164
5.4 Exercices168
5.5 Corrigés173
6 Listes
189
6.1 Notions essentielles191
6.1.1 Définition191
6.1.2 Opérations de base193
6.1.3 Manipulation de listes : algorithmes de base198
6.2 Conventions d'écriture203
6.3 Compléments206
6.3.1 Une structure linéaire récursive206
6.3.2 Conception208
6.4 Exercices211
6.5 Corrigés217
III Itérativité239
7 Variables mutables, affectation
241
7.1 Notions essentielles243
7.1.1 Variables mutables : définition243
7.1.2 Affectation246
7.1.3 Paramètres mutables247
7.1.4 Bloc248
7.1.5 Entrées - sorties251
7.2 Conventions d'écriture253
7.2.1 Déclarations de variables253
7.2.2 Parenthésage254
7.2.3 Bloc255
7.2.4 if then else255
7.3 Exercices256
7.4 Corrigés265
8 Instructions itératives
281
8.1 Notions essentielles282
8.1.1 Boucle for282
8.1.2 Boucle while286
8.1.3 Conception291
8.1.4 Tests293
8.1.5 Une opération courante : la saisie contrôlée295
8.2 Conventions d'écriture295
8.2.1 for us while295
8.2.2 Alignement296
8.2.3 Composition de fonctions vs fonction « longue »296
8.2.4 Parenthèses296
8.2.5 Variables locales297
8.3 Compléments297
8.3.1 for, while et récursif terminal297
8.3.2 Imbrication de boucles300
8.4 Exercices302
8.5 Corrigés308
9 Tableaux
325
9.1 Notions essentielles325
9.1.1 Définition et opérations de base325
9.1.2 Manipulation de tableaux : algorithmes de base328
9.2 Compléments332
9.2.1 Tableaux bi-dimensionnels332
9.2.2 Initialisation d'un tableau338
9.2.3 Listes vs tableaux340
9.3 Exercices341
9.4 Corrigés346
IV Annexes361
10 Compléments
363
10.1 Graphique363
10.1.1 Bibliothèque graphies363
10.1.2 Transformation géométrique entre différents espaces365
10.1.3 Exemple du tracé d'une courbe368
10.1.4 Exemple du calcul d'une approximation de n370
10.2 Exercice : simulation du jeu de bataille372
10.3 Exercice : jeu de serpent384
11 Aspects « techniques »
403
11.1 Fonctions utilitaires403
11.1.1 Signatures des fonctions utilitaires403
11.1.2 Codes des fonctions utilitaires406
11.2 Interprétation412
11.2.1 Utilisation d'un interpréteur ocaml en ligne412
11.2.2 Utilisation d'un interpréteur ocaml « local »418
11.3 Installation de OCaml419
11.3.1 Pour Linux Ubuntu 20.04419
11.3.2 Pour Windows423
11.3.3 Pour macOS427
11.3.4 Environnements de développement442