diff --git a/slides/cours_14.md b/slides/cours_14.md
index 22c5f2c154727b032e1305a58e82db1419472fa8..ceffe2c9dcd55dfdd83e99243b22ea9716910339 100644
--- a/slides/cours_14.md
+++ b/slides/cours_14.md
@@ -15,4 +15,92 @@ patat:
     backend: auto
 ...
 
+# Exercice 3
+
+* Stocker les numéros de téléphones internes d'une entreprise suivants dans un
+tableau de 10 positions.
+* Les numéros sont compris entre 100 et 299.
+* Soit $N$ le numéro de téléphone, la fonction de hachage est
+$$
+h(N)=N\mod 10.
+$$
+* La fonction de gestion des collisions est
+$$
+C_1(N,i)=(h(N)+3\cdot i)\mod 10.
+$$
+* Placer 145, 167, 110, 175, 210, 215 (mettre son état à occupé).
+* Supprimer 175 (rechercher 175, et mettre son état à supprimé).
+* Rechercher 35.
+* Les cases ni supprimées, ni occupées sont vides.
+* Expliquer se qui se passe si on utilise?
+$$
+C_1(N,i)=(h(N)+5\cdot i)\mod 10.
+$$
+
+# Préambule
+
+* On considère pas le cas du chaînage en cas de collisions.
+* L'insertion est construite avec une forme du type
+
+    ```C
+    index = h(key);
+    while (table[index].state == OCCUPIED && table[index].key != key) {
+       index = (index + k) % table_size; // attention à pas dépasser
+    }
+    table[index].key = key;
+    table[index].state = OCCUPIED;
+    ```
+* Gestion de l'état d'une case *explicite*
+
+    ```C
+    typedef enum {EMPTY, OCCUPIED, DELETED} state;
+    ```
+
+# L'insertion
+
+## Pseudocode?
+
+. . .
+
+```C
+insert(table, key, value) {
+    index = hash de la clé;
+    index = si "index" est déjà occupé dans le tableau gérer la collision;
+
+    changer l'état de la case à "index" à OCCUPIED;
+    changer la valeur de la case "index" à value;
+}
+```
+
+# La suppression
+
+## Pseudocode?
+
+. . .
+
+```C
+insert(table, key, value) {
+    index = hash de la clé;
+    index = si "index" est déjà occupé dans le tableau gérer la collision;
+
+    changer l'état de la case à "index" à OCCUPIED;
+    changer la valeur de la case "index" à value;
+}
+```
+
+# La recherche
+
+## Pseudocode?
+
+. . .
+
+```C
+insert(table, key, value) {
+    index = hash de la clé;
+    index = si "index" est déjà occupé dans le tableau gérer la collision;
+
+    changer l'état de la case à "index" à OCCUPIED;
+    changer la valeur de la case "index" à value;
+}
+```