diff --git a/ex4/ex4.c b/ex4/ex4.c index 94682ef3f8570496b73b4bb45d9062fb9ac48aaf..75f39ea97a575c594e6b0228d14584bdee18d991 100644 --- a/ex4/ex4.c +++ b/ex4/ex4.c @@ -1,7 +1,80 @@ #include <math.h> -#include <stdbool.h> +#include <stdint.h> #include <stdio.h> #include <stdlib.h> -#include <string.h> -int main() {} \ No newline at end of file +typedef struct matrix { + int n; + int m; + float **data; +} matrix; + +matrix *matrix_create(int n, int m) { + matrix *mat = malloc(sizeof(matrix)); + mat->n = n; + mat->m = m; + mat->data = malloc(n * sizeof(float *)); + for (int i = 0; i < n; i++) { + mat->data[i] = malloc(m * sizeof(float)); + } + for (int i = 0; i < n; i++) { + for (int j = 0; j < m; j++) { + mat->data[i][j] = sqrt(i + j); + } + } + return mat; +} + +void matrix_destroy(matrix *mat) { + for (int i = 0; i < mat->n; i++) { + free(mat->data[i]); + } + free(mat->data); + free(mat); +} + +void matrix_print(matrix *mat) { + for (int i = 0; i < mat->n; i++) { + for (int j = 0; j < mat->m; j++) { + printf("%f ", mat->data[i][j]); + } + printf("\n"); + } +} + +matrix *matrix_moyenne(matrix *mat) { + matrix *mat2 = malloc(sizeof(matrix)); + mat2->n = mat->n; + mat2->m = mat->m; + mat2->data = malloc(mat->n * sizeof(float *)); + for (int i = 0; i < mat->n; i++) { + mat2->data[i] = malloc(mat->m * sizeof(float)); + } + for (int i = 0; i < mat->n; i++) { + for (int j = 0; j < mat->m; j++) { + if (i >= 1 && j >= 1 && i <= mat->n - 2 && j <= mat->m - 2) { + mat2->data[i][j] = + (mat->data[i][j] + mat->data[i + 1][j] + mat->data[i - 1][j] + + mat->data[i][j + 1] + mat->data[i][j - 1]) / + 5; + + } else { + mat2->data[i][j] = mat->data[i][j]; + } + } + } + return mat2; +} +int main() { + + matrix *mat = matrix_create(5, 4); + for (int i = 0; i < 10; i++) { + matrix *mat2 = matrix_moyenne(mat); + matrix_destroy(mat); + mat = mat2; + } + printf("voici une matirce moyenné d'une taille 5X4 \n"); + matrix_print(mat); + matrix_destroy(mat); + return EXIT_SUCCESS; +} \ No newline at end of file