From 18a49919c88cb09a200a83bc875de554b09fddb5 Mon Sep 17 00:00:00 2001 From: "dario.genga" <dario.genga@etu.hesge.ch> Date: Tue, 23 Nov 2021 00:32:29 +0100 Subject: [PATCH] Add sub matrix --- main.c | 7 ++++++- matrix.c | 18 ++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/main.c b/main.c index a86789a..2ddb2da 100644 --- a/main.c +++ b/main.c @@ -11,7 +11,7 @@ #include "matrix.h" int main() { - matrix mat, cloned, transposed; + matrix mat, cloned, transposed, sub; int32_t m = 3; int32_t n = 4; int32_t s = m * n; @@ -33,10 +33,15 @@ int main() { matrix_transpose(&transposed, mat); printf("Transposed matrix :\n"); matrix_print(transposed); + // Sub matrix + matrix_extract_submatrix(&sub, transposed, 1, 4, 1, 3); + printf("Sub matrix :\n"); + matrix_print(sub); // Free the memory matrix_destroy(&mat); matrix_destroy(&cloned); matrix_destroy(&transposed); + matrix_destroy(&sub); return EXIT_SUCCESS; diff --git a/matrix.c b/matrix.c index fb71f56..c477170 100644 --- a/matrix.c +++ b/matrix.c @@ -122,3 +122,21 @@ error_code matrix_transpose(matrix *transposed, const matrix mat) { return ok; } +error_code matrix_extract_submatrix(matrix *sub, const matrix mat, int32_t m0, int32_t m1, int32_t n0, int32_t n1) { + if (m0 < 0 || m1 > mat.m || n0 < 0 || n1 > mat.n || m0 > m1 || n0 > n1) { + return err; + } + + error_code code = matrix_alloc(sub, m1 - m0 , n1 - n0 ); + if (code == err) { + return err; + } + + for (int i = m0; i < m1; i++) { + for (int k = n0; k < n1; k++) { + sub->data[i - m0][k - n0] = mat.data[i][k]; + } + } + + return ok; +} -- GitLab