diff --git a/matrices_intro.md b/matrices_intro.md index 422dfd4056c1d2a3a524402334a9312df682c364..2083c4f7277fb4bc3646cc23830d8e0b6e51ed1c 100644 --- a/matrices_intro.md +++ b/matrices_intro.md @@ -41,7 +41,7 @@ Pour manipuler des matrices, vous devrez implémenter les fonctions suivantes ```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 mises à `-1` + * 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); @@ -108,35 +108,35 @@ Pour manipuler des matrices, vous devrez implémenter les fonctions suivantes ``` 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, retourne `1` si tout s'est bien passé, `0` sinon + * addition de deux matrices, et stockage du résultat dans une troisième matrice ```C - int matrix_add(matrix mat1, matrix mat2, matrix *res); + ... matrix_add(...); ``` - * soustraction de deux matrices, et stockage du résultat dans une troisième matrice, retourne `1` si tout s'est bien passé, `0` sinon + * soustraction de deux matrices, et stockage du résultat dans une troisième matrice ```C - int matrix_sub(matrix mat1, matrix mat2, matrix *res); + ... matrix_sub(...); ``` - * multiplication de deux matrices, et stockage du résultat dans une troisième matrice, retourne `1` si tout s'est bien passé, `0` sinon + * multiplication de deux matrices, et stockage du résultat dans une troisième matrice ```C - int matrix_mult(matrix mat1, matrix mat2, matrix *res); + ... matrix_mult(...); ``` - * addition d'un scalaire avec une matrice, et stockage du résultat dans une troisième matrice, retourne `1` si tout s'est bien passé, `0` sinon + * addition d'un scalaire avec une matrice, et stockage du résultat dans une troisième matrice ```C - int matrix_sub(matrix mat1, matrix mat2, matrix *res); + ... matrix_add_scalar(...); ``` - * mutliplication d'un scalaire avec une matrice, la matrice est modifiée, la fonction retourne `1` si tout s'est bien passé, `0` sinon + * multiplication d'un scalaire avec une matrice, et stockage du résultat dans une autre matrice ```C - int matrix_mult_scalar(matrix *mat1, double scalar); + ... matrix_mult_scalar(...); ``` - * calcul de la transposée d'une matrice, la matrice est modifiée, la fonction retourne `1` si tout s'est bien passé, `0` sinon + * calcul de la transposée d'une matrice, et stocke le résultat dans une nouvelle matrice ```C - int matrix_transpose(matrix* mat); + ... matrix_transpose(...); ``` <!-- 2. Fonctions pour les manipulations de matrices **en place** (on modifie les matrices passées en argument dans les fonctions) @@ -144,57 +144,57 @@ Pour manipuler des matrices, vous devrez implémenter les fonctions suivantes * addition de deux matrices, la première matrice est modifiée, la fonction retourne `1` si tout s'est bien passé, `0` sinon ```C - int matrix_add_in_place(matrix *mat1, matrix mat2); + int matrix_add_in_place(matrix mat1, matrix mat2); ``` * soustraction de deux matrices, la première matrice est modifiée, la fonction retourne `1` si tout s'est bien passé, `0` sinon ```C - int matrix_sub_in_place(matrix *mat1, matrix mat2); + int matrix_sub_in_place(matrix mat1, matrix mat2); ``` * multiplication de deux matrices, la première matrice est modifiée, la fonction retourne `1` si tout s'est bien passé, `0` sinon ```C - int matrix_mult_in_place(matrix *mat1, matrix mat2); + int matrix_mult_in_place(matrix mat1, matrix mat2); ``` * addition d'une matrice avec un scalaire, la matrice est modifiée, la fonction retourne `1` si tout s'est bien passé, `0` sinon ```C - int matrix_add_scalar_in_place(matrix *mat1, double scalar); + int matrix_add_scalar_in_place(matrix mat1, double scalar); ``` * multiplication d'une matrice avec un scalaire, la matrice est modifiée, la fonction retourne `1` si tout s'est bien passé, `0` sinon ```C - int matrix_mult_scalar_in_place(matrix *mat1, double scalar); + int matrix_mult_scalar_in_place(matrix mat1, double scalar); ``` * calcul de la transposée d'une matrice, la matrice est modifiée, la fonction retourne `1` si tout s'est bien passé, `0` sinon ```C - int matrix_transpose_in_place(matrix* mat); + int matrix_transpose_in_place(matrix mat); ``` 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, retourne `1` si tout s'est bien passé, `0` sinon ```C - int matrix_add(matrix mat1, matrix mat2, matrix *res); + int matrix_add(matrix mat1, matrix mat2, matrix res); ``` * soustraction de deux matrices, et stockage du résultat dans une troisième matrice, retourne `1` si tout s'est bien passé, `0` sinon ```C - int matrix_sub(matrix mat1, matrix mat2, matrix *res); + int matrix_sub(matrix mat1, matrix mat2, matrix res); ``` * multiplication de deux matrices, et stockage du résultat dans une troisième matrice, retourne `1` si tout s'est bien passé, `0` sinon ```C - int matrix_mult(matrix mat1, matrix mat2, matrix *res); + int matrix_mult(matrix mat1, matrix mat2, matrix res); * addition d'un scalaire avec une matrice, et stockage du résultat dans une troisième matrice, retourne `1` si tout s'est bien passé, `0` sinon ```C - int matrix_sub(matrix mat1, matrix mat2, matrix *res); + int matrix_add_scalar(matrix mat1, matrix mat2, matrix res); * mutliplication d'un scalaire avec une matrice, la matrice est modifiée, la fonction retourne `1` si tout s'est bien passé, `0` sinon ```C - int matrix_mult_scalar(matrix *mat1, double scalar); + int matrix_mult_scalar(matrix mat1, double scalar); ``` * calcul de la transposée d'une matrice, la matrice est modifiée, la fonction retourne `1` si tout s'est bien passé, `0` sinon @@ -225,6 +225,16 @@ Les matrices avec lesquelles on effectuera les opérations doivent être affich pour vérifier si les résultats sont corrects. Essayez également d'écrire des petits tests pour 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 +terribles et très difficiles à découvrir + +```bash +-Wall -Wextra -pedantic -fsanitize=address +``` + ## Rapide introduction/rappel aux matrices Une matrice est un **tableau de nombres**, a un nombre de lignes noté, $m$, et un nombre de colonnes noté $n$.