diff --git a/ex1/ex1.c b/ex1/ex1.c index a24c2804046dd904d3c5224bd0a2e61dc3b12408..dd8f9ac08f5239d83c5559677f242d2bcd7ce7bc 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; }