From 81fccf8d34190c5c79f379f87811df4b9e80fce7 Mon Sep 17 00:00:00 2001 From: Florian Burgener <florian.burgener@etu.hesge.ch> Date: Tue, 3 May 2022 13:14:54 +0200 Subject: [PATCH] Exercice 1 --- ex1/ex1.c | 93 +++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 69 insertions(+), 24 deletions(-) diff --git a/ex1/ex1.c b/ex1/ex1.c index a24c280..dd8f9ac 100644 --- a/ex1/ex1.c +++ b/ex1/ex1.c @@ -16,30 +16,75 @@ #include <stdlib.h> #include <string.h> +double **matrix_init(int m, int n) { + double **matrix = (double **)malloc(sizeof(double *) * m); + + for (int i = 0; i < m; i += 1) { + matrix[i] = (double *)malloc(sizeof(double) * n); + + for (int j = 0; j < n; j += 1) { + matrix[i][j] = sqrt(i + j); + } + } + + return matrix; +} + +void matrix_destroy(double **matrix, int m) { + for (int i = 0; i < m; i += 1) { + free(matrix[i]); + } + + free(matrix); +} + +void matrix_print(double **matrix, int m, int n) { + for (int i = 0; i < m; i += 1) { + for (int j = 0; j < n; j += 1) { + printf("%lf ", matrix[i][j]); + } + + printf("\n"); + } +} + +double **matrix_average(double **matrix, int m, int n) { + double **output = matrix_init(m, n); + + for (int i = 0; i < m; i += 1) { + for (int j = 0; j < n; j += 1) { + double value = 0; + + if (i >= 1 && i <= m - 2 && j >= 1 && j <= n - 2) { + value += matrix[i][j]; + value += matrix[i + 1][j]; + value += matrix[i - 1][j]; + value += matrix[i][j + 1]; + value += matrix[i][j - 1]; + value /= 5; + } else { + value = matrix[i][j]; + } + + output[i][j] = value; + } + } + + return output; +} + int main() { - // int32_t values_length = 5; - // double values[values_length]; - - // for (int32_t i = 0; i < values_length; i += 1) { - // double value; - // scanf("%lf", &value); - // values[i] = value; - // } - - // int32_t values_length = 5; - // int32_t values[values_length]; - - // for (int32_t i = 0; i < values_length; i += 1) { - // int32_t value; - // scanf("%d", &value); - // values[i] = value; - // } - - // char a[100]; - // int32_t b; - // scanf("%s %d", a, &b); - // printf("%s %d\n", a, b); - - printf("ex1\n"); + int m = 5; + int n = 4; + double **M = matrix_init(m, n); + + for (int i = 0; i < 10; i += 1) { + double **N = matrix_average(M, m, n); + matrix_destroy(M, m); + M = N; + } + + matrix_print(M, m, n); + matrix_destroy(M, m); return EXIT_SUCCESS; } -- GitLab