diff --git a/ex1/ex1.c b/ex1/ex1.c index 2f02cc262ad595685c0f18165377423d9151129e..e3096a1791ce4062a71a9a5bf8ad2c6ced22b998 100644 --- a/ex1/ex1.c +++ b/ex1/ex1.c @@ -7,7 +7,69 @@ #include <stdlib.h> #include <string.h> #include <stdbool.h> +#include <math.h> + +double **alloc_matrix(int nb_row, int nb_col) { + double **matrix = malloc(sizeof(double) * nb_row); + for (int i = 0; i < nb_row; i++) { + matrix[i] = malloc(sizeof(double) * nb_col); + } + return matrix; +} + +double **create_matrix(int nb_row, int nb_col) { + double **matrix = alloc_matrix(nb_row, nb_col); + + for (int row = 0; row < nb_row; row++) { + for (int col = 0; col < nb_col; col++) { + matrix[row][col] = sqrt(row + col); + } + } + return matrix; +} + +double **average_matrix(double **matrix, int nb_row, int nb_col) { + double **average = alloc_matrix(nb_row, nb_col); + + for (int row = 0; row < nb_row; row++) { + for (int col = 0; col < nb_col; col++) { + double ave = 0; + if (row >= 1 && row <= nb_row -2 && col >= 1 && col <= nb_col - 2) { + ave = (1.0 / 5.0) * (matrix[row][col] + matrix[row+1][col] + matrix[row-1][col] + matrix[row][col+1] + matrix[row][col-1]); + } else { + ave = matrix[row][col]; + } + average[row][col] = ave; + } + } + + return average; +} + +void destroy(double **matrix, int nb_row) { + for (int row = 0; row < nb_row; row++) { + free(matrix[row]); + } + free(matrix); +} + +void print_matrix(double **matrix, int nb_row, int nb_col) { + for (int row = 0; row < nb_row; row++) { + for (int col = 0; col < nb_col; col++) { + printf("%f ", matrix[row][col]); + } + printf("\n"); + } +} int main() { + int row = 5; + int col = 4; + double **matrix = create_matrix(row, col); + double **average = average_matrix(matrix, row, col); + print_matrix(average, row, col); + + destroy(matrix, row); + destroy(average, row); return EXIT_SUCCESS; }