diff --git a/slides/boucles_conditions.md b/slides/boucles_conditions.md
new file mode 100644
index 0000000000000000000000000000000000000000..ed5c54803f2d10efb3e5bfd8f7315a60e402acb0
--- /dev/null
+++ b/slides/boucles_conditions.md
@@ -0,0 +1,199 @@
+---
+title: "Boucles et conditions"
+date: "2021-09-28"
+patat:
+    wrap: true
+    margins:
+        left: 10
+        right: 10
+---
+
+# Quiz: Que fait le code suivant?
+
+```C
+#include <stdio.h>
+#include <stdlib.h>
+int main() {
+  printf("Enter n: ");
+  int n = 0;
+  scanf("%d", &n);
+  int res = 0;
+  for (int i = 0; i <= n; ++i) {
+    res += i;
+  }
+  printf("For = %d, the result is %d\n", n, res);
+  if (sum != n * (n+1) / 2) {
+    printf("Error: the answer is wrong.\n");
+    return EXIT_FAILURE;
+  }
+  return EXIT_SUCCESS;
+}
+```
+
+# Génération d'un exécutable
+
+- Pour pouvoir être exécuté un code C doit être d'abord compilé (avec `gcc` ou `clang`).
+- Pour un code `prog.c` la compilation "minimale" est
+
+    ```bash
+    $ clang prog.c
+    $ ./a.out # exécutable par défaut
+    ```
+
+- Il existe une multitude d'options de compilation:
+
+    ```bash
+    $ clang -std=c11 -Wall -Wextra prog.c -o prog
+    ```
+    1. `-std=c11` utilisation de C11.
+    2. `-Wall` et `-Wextra` activation des warnings.
+    3. `-o` défini le fichier exécutable à produire en sortie.
+
+# Structures de contrôle: `if`{.C} .. `else if`{.C} .. `else`{.C} (1/2)
+
+## Syntaxe
+
+```C
+if (expression) {
+    instructions;
+} else if (expression) { // optionnel
+                         // il peut y en avoir plusieurs
+    instructions;
+} else {
+    instructions; // optionnel
+}
+```
+
+```C
+if (x) { // si x s'évalue à `vrai`
+    printf("x s'évalue à vrai.\n");
+} else if (y == 8) { // si y vaut 8
+    printf("y vaut 8.\n");
+} else {
+    printf("Ni l'un ni l'autre.\n");
+}
+```
+
+# Entrées/sorties: `printf()`{.C} (1/2)
+
+## Généralités
+
+- La fonction `printf()`{.C} permet d'afficher du texte sur le terminal:
+
+    ```C
+    int printf(const char *format, ...);
+    ```
+- Nombre d'arguments variables.
+- `format`{.C} est le texte, ainsi que le format (type) des variables à afficher.
+- Les arguments suivants sont les expressions à afficher.
+
+# Entrées/sorties: `printf()`{.C} (2/2)
+
+## Exemple
+
+```C
+#include <stdio.h>
+#include <stdlib.h>
+
+int main() {
+    printf("Hello world.\n");
+    int val = 1;
+    printf("Hello world %d time.\n", val);
+    printf("%f squared is equal to %f.\n", 2.5, 2.5*2.5);
+    return EXIT_SUCCESS;
+}
+```
+
+# Entrées/sorties: `scanf()`{.C} (1/2)
+
+## Généralités
+
+- La fonction `scanf()`{.C} permet de lire du texte formaté entré au clavier:
+
+    ```C
+    int scanf(const char *format, ...);
+    ```
+
+- `format`{.C} est le format des variables à lire (comme `printf()`{.C}).
+- Les arguments suivants sont les variables où sont stockées les valeurs lues.
+
+# Entrées/sorties: `scanf()`{.C} (2/2)
+
+## Exemple
+
+```C
+#include <stdio.h>
+#include <stdlib.h>
+
+int main() {
+    printf("Enter 3 numbers: \n");
+    int i, j, k;
+    scanf("%d %d %d", &i, &j, &k);
+    printf("You entered: %d %d %d\n", i, j, k);
+    
+    return EXIT_SUCCESS;
+}
+```
+
+# Structures de contrôle: `continue`{.C}, `break`{.C}
+
+- `continue`{.C} saute à la prochaine itération d'une boucle.
+
+    ```C
+    int i = 0;
+    while (i < 10) {
+        if (i == 3) {
+            continue;
+        }
+        printf("%d\n", i);
+        i += 1;
+    }
+    ```
+
+- `break`{.C} quitte le bloc itératif courant d'une boucle.
+
+    ```C
+    for (int i = 0; i < 10; i++) {
+        if (i == 3) {
+            break;
+        }
+        printf("%d\n", i);
+    }
+    ```
+
+# La fonction `main()` (1/2)
+
+## Généralités
+
+- Point d'entrée du programme.
+- Retourne le code d'erreur du programme:
+    - 0: tout s'est bien passé.
+    - Pas zéro: problème.
+- La valeur de retour peut être lue par le shell qui a exécuté le programme.
+- `EXIT_SUCCESS`{.C} et `EXIT_FAILURE`{.C} (de `stdlib.h`) sont des valeurs de retour **portables** de programmes C. 
+
+# La fonction `main()` (2/2)
+
+## Exemple
+
+```C
+int main() {
+    // ...
+    if (error)
+	    return EXIT_FAILURE;
+    else
+	    return EXIT_SUCCESS;
+}
+```
+
+- Le code d'erreur est lu dans le shell avec `$?`{.bash}
+
+```bash
+$ ./prog
+$ echo $?
+0 # tout s'est bien passé par exemple
+$ if [ $? -eq 0 ]; then echo "OK" ; else echo "ERROR"; fi
+ERROR # si tout s'est mal passé
+```
+
+
diff --git a/slides/figs/matrix.png b/slides/figs/matrix.png
deleted file mode 100644
index 7fc07f4c8b426af6d9b873f349c832844d92cf50..0000000000000000000000000000000000000000
Binary files a/slides/figs/matrix.png and /dev/null differ
diff --git a/slides/figs/matrix_qr.png b/slides/figs/matrix_qr.png
new file mode 100644
index 0000000000000000000000000000000000000000..ce2c45261290e5dc508c661a2c66b3545776e553
Binary files /dev/null and b/slides/figs/matrix_qr.png differ
diff --git a/slides/figs/terminal_open.png b/slides/figs/terminal_open.png
new file mode 100644
index 0000000000000000000000000000000000000000..16bd9c85f6380b34bb9c46c2286831ae9bb66ab2
Binary files /dev/null and b/slides/figs/terminal_open.png differ