diff --git a/matrix.c b/matrix.c index 02f2473..624b824 100644 --- a/matrix.c +++ b/matrix.c @@ -1,5 +1,6 @@ #include #include +#include #include "matrix.h" // TODO Matrix-Funktionen implementieren @@ -7,6 +8,13 @@ Matrix createMatrix(unsigned int rows, unsigned int cols) { Matrix matrix; + Matrix empty = {0, 0, NULL}; + + if(rows == 0 || cols == 0) + { + //print("Fehler: Dimensionen muessen >= 1 sein!"); + return empty; + } matrix.rows = rows; matrix.cols = cols; @@ -14,7 +22,7 @@ Matrix createMatrix(unsigned int rows, unsigned int cols) if(matrix.buffer == NULL) { - printf("Fehler bei der Speicherreservierung! Keine Matrix erstellt!"); + //printf("Fehler bei der Speicherreservierung! Keine Matrix erstellt!"); matrix.rows = 0; matrix.cols = 0; } @@ -24,7 +32,7 @@ Matrix createMatrix(unsigned int rows, unsigned int cols) void clearMatrix(Matrix *matrix) { - free(matrix.buffer); + free(matrix->buffer); matrix->buffer = NULL; matrix->rows = 0; @@ -33,32 +41,32 @@ void clearMatrix(Matrix *matrix) void setMatrixAt(MatrixType value, Matrix *matrix, unsigned int rowIdx, unsigned int colIdx) { - if(matrix->buffer == NULL) + if(matrix.buffer == NULL) { - printf("Fehler beim Setzen! Matrix nicht initialisiert"); + //printf("Fehler beim Setzen! Matrix nicht initialisiert"); return; } - if(rowIdx >= matrix->rows || colIdx >= matrix->cols) + if(rowIdx >= matrix.rows || colIdx >= matrix.cols) { - printf("Ungueltige Indizes beim Setzen!\n"); + //printf("Ungueltige Indizes beim Setzen!\n"); return; } - matrix->buffer[rowIdx * matrix->cols + colIdx] = value; + matrix.buffer[rowIdx * matrix.cols + colIdx] = value; } MatrixType getMatrixAt(const Matrix matrix, unsigned int rowIdx, unsigned int colIdx) { if(matrix.buffer == NULL) { - printf("Fehler beim Lesen! Matrix nicht initialisiert"); + //printf("Fehler beim Lesen! Matrix nicht initialisiert"); return 0; } if(rowIdx >= matrix.rows || colIdx >= matrix.cols) { - printf("Ungueltige Indizes beim Lesen!\n"); + //printf("Ungueltige Indizes beim Lesen!\n"); return 0; } @@ -67,31 +75,134 @@ MatrixType getMatrixAt(const Matrix matrix, unsigned int rowIdx, unsigned int co Matrix add(const Matrix matrix1, const Matrix matrix2) { - if((matrix1.rows != matrix2.rows) || (matrix1.cols != matrix2.cols)) - { - printf("Fehler bei Addition: Matrix Dimensionen passen nicht ueberein!\n"); - Matrix empty = {0, 0, NULL}; - return empty; - } - float matrix1Wert = 0; float matrix2Wert = 0; float summe = 0; + int broadcasting = 0; - Matrix ergebnisMatrix = createMatrix(matrix1.rows, matrix1.cols); + Matrix broadcastedmatrix1 = {0,0,NULL}; + Matrix broadcastedmatrix2 = {0,0,NULL}; + + if((matrix1.rows != matrix2.rows) || (matrix1.cols != matrix2.cols)) + { + if((matrix1.rows != matrix2.rows) && (matrix1.cols == matrix2.cols)) + { + if(matrix1.rows == 1) + { + broadcastedmatrix1 = createMatrix(matrix2.rows, matrix2.cols); + + for(int row = 0; row