From 229c4c8b651c1dd7ef26766bc59c7a3783eefd52 Mon Sep 17 00:00:00 2001 From: Pascal Siepe Date: Tue, 27 Oct 2026 21:53:13 +0100 Subject: [PATCH] matrixTests 12 bestanden, 4 durchgefallen --- Startcode/matrix.c | 80 ++++++++++++++++++++++++++++++++++++--- Startcode/matrix.h | 6 +++ Startcode/runMatrixTests | Bin 0 -> 64824 bytes 3 files changed, 81 insertions(+), 5 deletions(-) create mode 100755 Startcode/runMatrixTests diff --git a/Startcode/matrix.c b/Startcode/matrix.c index ad00628..04a312d 100644 --- a/Startcode/matrix.c +++ b/Startcode/matrix.c @@ -6,30 +6,100 @@ Matrix createMatrix(unsigned int rows, unsigned int cols) { - + if(rows == 0 || cols == 0){ + return (Matrix) {0, 0, NULL}; // Compound struct, kann für c99 verwendet werden + } + MatrixType *arr = malloc(rows * cols * sizeof(MatrixType)); + Matrix new_matrix = {rows, cols, arr}; + return new_matrix; } void clearMatrix(Matrix *matrix) { - + free(matrix->buffer); + matrix->buffer = NULL; + matrix->rows = 0; + matrix->cols = 0; } void setMatrixAt(MatrixType value, Matrix matrix, unsigned int rowIdx, unsigned int colIdx) { - + if(rowIdx < matrix.rows && colIdx < matrix.cols){ + *(matrix.buffer + rowIdx * matrix.rows + colIdx) = value; + } } MatrixType getMatrixAt(const Matrix matrix, unsigned int rowIdx, unsigned int colIdx) { - + if(rowIdx >= matrix.rows || colIdx >= matrix.cols){ + return 0; + } + return *(matrix.buffer + rowIdx * matrix.rows + colIdx); } Matrix add(const Matrix matrix1, const Matrix matrix2) { + int n1 = matrix1.cols; + int m1 = matrix1.rows; + int n2 = matrix2.cols; + int m2 = matrix2.cols; + + if(n1 == 1 && m1 == m2){ + Matrix new_mat = createMatrix(m2, n2); + for(int i = 0; i < m2; i++){ + for(int j = 0; j < n2; j++){ + *(new_mat.buffer + i * n2 + j) = *(matrix2.buffer + i * n2 + j) + *(matrix1.buffer + i); + } + } + return new_mat; + } + if(n2 == 1 && m1 == m2){ + Matrix new_mat = createMatrix(m1, n1); + for(int i = 0; i < m1; i++){ + for(int j = 0; j < n1; j++){ + *(new_mat.buffer + i * n1 + j) = *(matrix1.buffer + i * n1 + j) + *(matrix2.buffer + i); + } + } + return new_mat; + } + + if(n1 != n2 || m1 != m2){ + return (Matrix) {0, 0, NULL}; + } + + Matrix new_mat = createMatrix(n1, m1); + + for(int i = 0; i < m1; i++){ + for(int j = 0; j < n1; j++){ + *(new_mat.buffer + i * n1 + j) = *(matrix1.buffer + i * n1 + j) + *(matrix2.buffer + i * n1 + j); + } + } + return new_mat; } Matrix multiply(const Matrix matrix1, const Matrix matrix2) { - + int m = matrix1.rows; + int q = matrix1.cols; + int l = matrix2.cols; + + if(q != matrix2.rows){ + return (Matrix) {0, 0, NULL}; + } + + Matrix new_matrix = createMatrix(m, l); + MatrixType *new_mat_arr = new_matrix.buffer; + + for(int i = 0; i < m; i++){ + for(int j = 0; j < l; j++){ + int sum = 0; + for(int k = 0; k < q; k++){ + sum += *(matrix1.buffer + i * q + k) * *(matrix2.buffer + k * l + j); + } + *(new_mat_arr + i * l + j) = sum; + } + } + + return new_matrix; } \ No newline at end of file diff --git a/Startcode/matrix.h b/Startcode/matrix.h index cc640d1..e751efc 100644 --- a/Startcode/matrix.h +++ b/Startcode/matrix.h @@ -7,6 +7,12 @@ typedef float MatrixType; // TODO Matrixtyp definieren +typedef struct { + int rows; + int cols; + MatrixType *buffer; +} Matrix; + Matrix createMatrix(unsigned int rows, unsigned int cols); void clearMatrix(Matrix *matrix); diff --git a/Startcode/runMatrixTests b/Startcode/runMatrixTests new file mode 100755 index 0000000000000000000000000000000000000000..9de5604531fcf1bfdf1fb0028f6b11b9e8688e81 GIT binary patch literal 64824 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