From 6a5aa9a8fce251fb7032d7688a7f0ff54278ba8a Mon Sep 17 00:00:00 2001 From: "dario.genga" <dario.genga@etu.hesge.ch> Date: Mon, 22 Nov 2021 19:18:59 +0100 Subject: [PATCH] Add matrix initialization from array --- main.c | 11 ++++++++++- matrix.c | 16 ++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/main.c b/main.c index 0a04670..fb6e61b 100644 --- a/main.c +++ b/main.c @@ -12,7 +12,16 @@ int main() { matrix mat; - matrix_init(&mat, 3, 4, 0); + int32_t m = 3; + int32_t n = 4; + int32_t s = m * n; + int32_t val = 0; + int32_t data[12] = { 2, 1, -1, -2, 3, 1, 1, 3, 1, 4, -1, -1 }; + matrix_init(&mat, m, n, val); + printf("Empty matrix %dx%d\n", m, n); + matrix_print(mat); + matrix_init_from_array(&mat, m, n, data, s); + printf("Matrix %dx%d from array\n", m, n); matrix_print(mat); return EXIT_SUCCESS; diff --git a/matrix.c b/matrix.c index a390d2d..9d8118f 100644 --- a/matrix.c +++ b/matrix.c @@ -49,6 +49,22 @@ error_code matrix_init(matrix *mat, int32_t m, int32_t n, int32_t val) { return ok; } +error_code matrix_init_from_array(matrix *mat, int32_t m, int32_t n, int32_t data[], int32_t s) { + if (m <= 0 || n <= 0 || m * n != s) { + return err; + } + + matrix_alloc(mat, m, n); + + for (int i = 0; i < m; i++) { + for (int k = 0; k < n; k++) { + mat->data[i][k] = data[k + (i * n)]; + } + } + + return ok; +} + error_code matrix_print(const matrix mat) { for (int i = 0; i < mat.m; i++) { printf("["); -- GitLab