diff --git a/slides/cours_8.md b/slides/cours_8.md index 8155af0d87b3a10c3d75c90b23eadfed782915e8..b69cae3c4a576c94cf8cf5117b0e7e3cb1a4f0db 100644 --- a/slides/cours_8.md +++ b/slides/cours_8.md @@ -175,7 +175,7 @@ bool board[n][n]; ```C // Pour chaque ligne placer la reine sur toutes les colonnes -// Et compter les solutions +// et compter les solutions void nbr_solutions(board, coloumn, counter); // Placer la reine à li, co et rendre inaccessible devant void placer_devant(board_ini, board, li, co); @@ -190,7 +190,7 @@ void placer_devant(board_ini, board, li, co); nbr_solutions(board, column, counter) // pour chaque ligne // si la case libre - // si clumn < n - 1 + // si column < n - 1 // créer un nouveau board, poser une reine // et mettre à jour le tableau // nbr_solutions(board, column, counter) @@ -209,7 +209,7 @@ placer_devant(old_board, board, ligne, colonne) // board = copy(board); // board est occupé à ligne/colonne // toutes les cases des colonnes - // suivantes sont mises à jour + // suivantes sont mises à jour ``` # Le code du problème des 8 reines (4/N) @@ -228,8 +228,8 @@ void nb_sol(int n, bool board_ini[n][n], int co, int *ptr_cpt) { for (int li = 0; li < n; li++) { if (board_ini[li][co]) { if (co < n - 1) { - bool board[n][n]; // alocation à chaque - nouvelle tentative + bool board[n][n]; // allocation + // à chaque nouvelle tentative prises_devant(n, board_ini, board, li, co); nb_sol(n, board, co + 1, ptr_cpt); } else { @@ -278,7 +278,7 @@ void prises_devant( * de type `LIFO` (*Last in first out*). -](figs/Stack.svg){width=70%} ## Des exemples de la vraie vie @@ -296,13 +296,13 @@ void prises_devant( . . . -1. Empiler (push), ajouter un élément sur la pile, -2. Dépiler (pop), retirer l'élément du sommet de la pile et le retrouner, -3. Liste vide? (is_empty?) +1. Empiler (push): ajouter un élément sur la pile. +2. Dépiler (pop): retirer l'élément du sommet de la pile et le retrouner. +3. Liste vide? (is_empty?). . . . -4. Jeter un oeil (peek), retourner l'élément du sommet de la pile (sans le dépiler), +4. Jeter un oeil (peek): retourner l'élément du sommet de la pile (sans le dépiler). 5. Nombre d'éléments (length). ## Comment faire les 4,5 à partir de 1 à 3? @@ -310,7 +310,7 @@ void prises_devant( . . . 4. Dépiler l'élément, le copier, puis l'empiler à nouveau. -5. Dépiler jusqu'à ce que la pile soit vide puis empiler à nouveau. +5. Dépiler jusqu'à ce que la pile soit vide, puis empiler à nouveau. . . . @@ -323,7 +323,7 @@ mémoire). ## Implémentation -* Jusqu'ici on a pas du tout parlé d'implémentation (d'où le nom de structure +* Jusqu'ici on n'a pas du tout parlé d'implémentation (d'où le nom de structure abstraite). * Pas de choix unique d'implémentation. @@ -331,7 +331,7 @@ mémoire). . . . -Et oui vous avez deviner: un tableau! +Et oui vous avez deviné: un tableau! ## La structure: de quoi avons-nous besoin (pile de taille fixe)? @@ -412,13 +412,13 @@ int stack_peek(stack *s) { # Gestion d'erreur, level 0 * Il y a plusieurs façon de traiter les erreur: - * Rien faire (laisser la responsabilité à l'utilisateur). + * Ne rien faire (laisser la responsabilité à l'utilisateur). * Faire paniquer le programme (il plante plus ou moins violemment). * Utiliser des codes d'erreurs. ## La panique -* En C on a les `assert()` pour faire paniquer un programme. +* En C, on a les `assert()` pour faire paniquer un programme. # Assertions (1/3) @@ -433,7 +433,7 @@ void assert(int expression); - Macro permettant de tester une condition lors de l'exécution d'un programme: - Si `expression == 0`{.C} (condition fausse), `assert()`{.C} affiche un message d'erreur sur `stderr`{.C} et termine l'exécution du programme. - Sinon l'exécution se poursuit normalement. - - Peuvent être désactivés avec `-DNDEBUG` (équivalent à `#define + - Peuvent être désactivés à la compilation avec `-DNDEBUG` (équivalent à `#define NDEBUG`) ## À quoi ça sert? @@ -473,7 +473,7 @@ int stack_peek(stack *s) { - Vérification de la validité des pointeurs (typiquement `!= NULL`{.C}). - Vérification du domaine des indices (dépassement de tableau). -## Bug vs erreur de *runtime* +## Bug vs. erreur de *runtime* - Les assertions sont là pour détecter les bugs (erreurs d'implémentation). - Les assertions ne sont pas là pour gérer les problèmes externes au programme (allocation mémoire qui échoue, mauvais paramètre d'entrée passé par l'utilisateur, ...).