Skip to content
Snippets Groups Projects
Verified Commit 35c2caf0 authored by orestis.malaspin's avatar orestis.malaspin
Browse files
parents 5aeaa6ae 01c7f9e9
No related branches found
No related tags found
No related merge requests found
---
title: "Tris et backtracking"
title: "Tris"
date: "2021-11-10"
patat:
eval:
......
......@@ -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*).
![Une pile où on ajoute A, puis B avant de les retirer. Souce:
![Une pile où on ajoute A, puis B avant de les retirer. Source:
[Wikipedia](https://upload.wikimedia.org/wikipedia/commons/e/e1/Stack_%28data_structure%29_LIFO.svg)](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, ...).
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment