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