diff --git a/matrices_intro.md b/matrices_intro.md
index 2083c4f7277fb4bc3646cc23830d8e0b6e51ed1c..44c4ca61171929b44ac5fec2713105ff69291628 100644
--- a/matrices_intro.md
+++ b/matrices_intro.md
@@ -34,110 +34,114 @@ Le contenu de la matrice devra être alloué dans une zone contiguë de la mémo
 
 Pour manipuler des matrices, vous devrez implémenter les fonctions suivantes
 
-1. Fonctions pour la création de nouvelles matrices et leur destruction
-
-   * création d'une nouvelle matrice de `m` lignes et `n` colonnes et allocation de la mémoire
-
-       ```C
-       matrix matrix_create(int m, int n);
-       ```
-   * libération de la mémoire de la matrice en argument, le pointeur vers les données est mis à `NULL`{.C}, le nombre de lignes et de colonnes sont mis à `-1`
-
-       ```C
-       void matrix_destroy(matrix *mat);
-       ```
-   * allocation d'une matrice, et initialisation de ses valeurs à partir d'un tableau de taille `m` et `n`
-
-        ```C
-        matrix matrix_create_from_array(int m, int n, double data[]);
-        ```
-    * création du clone de d'une matrice, la nouvelle matrice est une copie de la matrice d'origine
-     
-        ```C
-        matrix matrix_clone(matrix mat);
-        ```
-    * affichage d'une matrice (très utile pour le débogage)
-
-        ```C
-        void matrix_print(matrix mat);
-        ```
-    * changement de la taille d'une matrice, si la nouvelle matrice est plus grande, les nouvelles cases sont initialisées à `0`, sinon les cases en trop disparaissent simplement (la fonction `realloc()`{.C} pourrait vous être utile)
-     
-        ```C
-        int matrix_resize(matrix *mat, int m, int n);
-        ```
-
-    * égalité parfaite ou approximative de deux matrices
-
-        ```C
-        bool matrix_is_approx_equal(matrix mat1, matrix mat2, double epsilon);
-        bool matrix_is_equal(matrix mat1, matrix mat2);
-        ```
-
-2. Fonctions pour les manipulations de matrices **en place** (on modifie les matrices passées en argument dans les fonctions). A vous de déterminer les signatures des fonctions
-
-    * addition de deux matrices, la première matrice est modifiée
-
-        ```C
-        ... matrix_add_in_place(...);
-        ```
-    * soustraction de deux matrices, la première matrice est modifiée
-
-        ```C
-        ... matrix_sub_in_place(...);
-        ```
-    * multiplication de deux matrices, la première matrice est modifiée
-
-        ```C
-        ... matrix_mult_in_place(...);
-        ```
-    * addition d'une matrice avec un scalaire, la matrice est modifiée
-
-        ```C
-        ... matrix_add_scalar_in_place(...);
-        ```
-    * multiplication d'une matrice avec un scalaire, la matrice est modifiée
-
-        ```C
-        ... matrix_mult_scalar_in_place(...);
-        ```
-   * calcul de la transposée d'une matrice, la matrice est modifiée
-
-       ```C
-       ... matrix_transpose_in_place(...);
-       ```
-3. Fonctions pour les manipulations de matrices, nécessitant une nouvelle allocation (il faut réutiliser les fonctions définies en 1 et 2)
-
-    * addition de deux matrices, et stockage du résultat dans une troisième matrice
-
-        ```C
-        ... matrix_add(...);
-        ```
-    * soustraction de deux matrices, et stockage du résultat dans une troisième matrice
-
-        ```C
-        ... matrix_sub(...);
-        ```
-    * multiplication de deux matrices, et stockage du résultat dans une troisième matrice
-
-        ```C
-        ... matrix_mult(...);
-        ```
-    * addition d'un scalaire avec une matrice, et stockage du résultat dans une troisième matrice
-
-        ```C
-        ... matrix_add_scalar(...);
-        ```
-    * multiplication d'un scalaire avec une matrice, et stockage du résultat dans une autre matrice
-
-        ```C
-        ... matrix_mult_scalar(...);
-        ```
-   * calcul de la transposée d'une matrice, et stocke le résultat dans une nouvelle matrice
-
-       ```C
-       ... matrix_transpose(...);
-       ```
+### Fonctions pour la création de nouvelles matrices et leur destruction
+
+* création d'une nouvelle matrice de `m` lignes et `n` colonnes et allocation de la mémoire
+
+   ```C
+   matrix matrix_create(int m, int n);
+   ```
+* libération de la mémoire de la matrice en argument, le pointeur vers les données est mis à `NULL`{.C}, le nombre de lignes et de colonnes sont mis à `-1`
+
+   ```C
+   void matrix_destroy(matrix *mat);
+   ```
+* allocation d'une matrice, et initialisation de ses valeurs à partir d'un tableau de taille `m` et `n`
+
+    ```C
+    matrix matrix_create_from_array(int m, int n, double data[]);
+    ```
+* création du clone de d'une matrice, la nouvelle matrice est une copie de la matrice d'origine
+ 
+    ```C
+    matrix matrix_clone(matrix mat);
+    ```
+* affichage d'une matrice (très utile pour le débogage)
+
+    ```C
+    void matrix_print(matrix mat);
+    ```
+* changement de la taille d'une matrice, si la nouvelle matrice est plus grande, les nouvelles cases sont initialisées à `0`, sinon les cases en trop disparaissent simplement (la fonction `realloc()`{.C} pourrait vous être utile)
+ 
+    ```C
+    int matrix_resize(matrix *mat, int m, int n);
+    ```
+
+* égalité parfaite ou approximative de deux matrices
+
+    ```C
+    bool matrix_is_approx_equal(matrix mat1, matrix mat2, double epsilon);
+    bool matrix_is_equal(matrix mat1, matrix mat2);
+    ```
+
+### Fonctions pour les manipulations de matrices **en place**
+
+Les fonctions modifient les matrices passées en argument. A vous de déterminer les signatures des fonctions
+
+* addition de deux matrices, la première matrice est modifiée
+
+    ```C
+    ... matrix_add_in_place(...);
+    ```
+* soustraction de deux matrices, la première matrice est modifiée
+
+    ```C
+    ... matrix_sub_in_place(...);
+    ```
+* multiplication de deux matrices, la première matrice est modifiée
+
+    ```C
+    ... matrix_mult_in_place(...);
+    ```
+* addition d'une matrice avec un scalaire, la matrice est modifiée
+
+    ```C
+    ... matrix_add_scalar_in_place(...);
+    ```
+* multiplication d'une matrice avec un scalaire, la matrice est modifiée
+
+    ```C
+    ... matrix_mult_scalar_in_place(...);
+    ```
+* calcul de la transposée d'une matrice, la matrice est modifiée
+
+   ```C
+   ... matrix_transpose_in_place(...);
+   ```
+### Fonctions pour les manipulations de matrices
+
+Ces opérations nécessitent une nouvelle allocation (il faut réutiliser les fonctions définies en 1 et 2).
+
+* addition de deux matrices, et stockage du résultat dans une troisième matrice
+
+    ```C
+    ... matrix_add(...);
+    ```
+* soustraction de deux matrices, et stockage du résultat dans une troisième matrice
+
+    ```C
+    ... matrix_sub(...);
+    ```
+* multiplication de deux matrices, et stockage du résultat dans une troisième matrice
+
+    ```C
+    ... matrix_mult(...);
+    ```
+* addition d'un scalaire avec une matrice, et stockage du résultat dans une troisième matrice
+
+    ```C
+    ... matrix_add_scalar(...);
+    ```
+* multiplication d'un scalaire avec une matrice, et stockage du résultat dans une autre matrice
+
+    ```C
+    ... matrix_mult_scalar(...);
+    ```
+* calcul de la transposée d'une matrice, et stocke le résultat dans une nouvelle matrice
+
+   ```C
+   ... matrix_transpose(...);
+   ```
 
 <!-- 2. Fonctions pour les manipulations de matrices **en place** (on modifie les matrices passées en argument dans les fonctions)
 
@@ -227,13 +231,15 @@ vérifier automatiquement si les résultats que vous obtenez sont corrects.
 
 ## Indications
 
-Ce travail pratique est compliqué, car il requiert l'utilisation de pointeurs et il y a de grands risques
-de fuites mémoires. Pensez à utiliser les warnings et les sanitizers, cela peut vous sauver d'erreurs
+* Pensez à compiler souvent: le compilateur est votre ami.
+* Évitez d'écrire toutes les fonctions en un fois sans tester si les fonctionnalités marchent comme vous le souhaitez.
+* Pensez à utiliser les warnings et les sanitizers, cela peut vous sauver d'erreurs
 terribles et très difficiles à découvrir
 
-```bash
--Wall -Wextra -pedantic -fsanitize=address
-```
+    ```C
+    -Wall -Wextra -pedantic -fsanitize=address
+    ```
+* Lorsque vous voyez apparaître des warnings corrigez-les immédiatement et pas "quand vous aurez fini". Il arrive régulièrement qu'un warning vous indique une erreur de logique dans votre code.
 
 ## Rapide introduction/rappel aux matrices