From f3b964f17e3b741397fd7741de4dcf615369f3bd Mon Sep 17 00:00:00 2001 From: "AD005\\z004z3ez" Date: Tue, 11 Nov 2025 18:12:20 +0100 Subject: [PATCH] add_matrix Funktion erstellt --- matrix.c | 103 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 102 insertions(+), 1 deletion(-) diff --git a/matrix.c b/matrix.c index 28ebf1b..29de399 100644 --- a/matrix.c +++ b/matrix.c @@ -47,8 +47,109 @@ MatrixType getMatrixAt(const Matrix matrix, unsigned int rowIdx, unsigned int co return matrix.data[(rowIdx * matrix.cols) + colIdx]; } -Matrix add(const Matrix matrix1, const Matrix matrix2) +static int can_add(Matrix matrix1, Matrix matrix2) { + + int can_add; + + if(matrix1.cols == matrix2.cols && matrix1.rows == matrix2.rows){ + + can_add = 1; + + } + else if(matrix1.cols == 1 && matrix1.rows == matrix2.rows){ + + can_add = 2; + + } + else if(matrix2.cols == 1 && matrix1.rows == matrix2.rows){ + + can_add = 3; + + } + else if(matrix1.rows == 1 && matrix1.cols == matrix2.cols){ + + can_add = 4; + + } + else if(matrix2.rows == 1 && matrix1.cols == matrix2.cols){ + + can_add = 5; + + } + else{ + + can_add = 0; + + } + + return can_add; + } + +Matrix add(const Matrix matrix1, const Matrix matrix2) //wir addieren nur wenn beide Matrizen gleich groß sind oder eine von beiden eine Zeile oder eine Spalte besitzt { + int ok = can_add(matrix1,matrix2); + + unsigned int erg_rows = (matrix1.rows == matrix2.rows) ? matrix1.rows : (matrix1.rows == 1 ? matrix2.rows : matrix1.rows); + unsigned int erg_cols = (matrix1.cols == matrix2.cols) ? matrix1.cols : (matrix1.cols == 1 ? matrix2.cols : matrix1.cols); + + Matrix matrix_erg = createMatrix(erg_rows, erg_cols); + + switch(ok) + { + case 1: + + for(int i = 0; i < (matrix1.rows * matrix1.cols); i++) + + matrix_erg.data[i] = matrix1.data[i] + matrix2.data[i]; + + break; + + case 2: + + for(int i = 0; i < erg_rows; i++){ + for(int j = 0; j < erg_cols; j++) + + matrix_erg.data[i * erg_cols + j] = matrix1.data[i * erg_cols + j] + matrix2.data[i]; + } + break; + + case 3: + + for(int i = 0; i < erg_rows; i++){ + for(int j = 0; j < erg_cols; j++) + + matrix_erg.data[i * erg_cols + j] = matrix1.data[i] + matrix2.data[i * erg_cols + j]; + } + break; + + case 4: + + for(int i = 0; i < erg_rows; i++){ + for(int j = 0; j < erg_cols; j++) + + matrix_erg.data[i * erg_cols + j] = matrix1.data[i * erg_cols + j] + matrix2.data[j]; + } + break; + + case 5: + + for(int i = 0; i < erg_rows; i++){ + for(int j = 0; j < erg_cols; j++) + + matrix_erg.data[i * erg_cols + j] = matrix1.data[j] + matrix2.data[i * erg_cols + j]; + } + break; + + default: + printf("Matrix addition not possible\n"); + exit(EXIT_FAILURE); + + + } + +return matrix_erg; + + }