#include #include #include "matrix.h" // TODO Matrix-Funktionen implementieren Matrix createMatrix(unsigned int rows, unsigned int cols) { Matrix m; m.rows = rows; m.cols = cols; m.buffer = (MatrixType*) calloc(rows * cols, sizeof(MatrixType)); // calloc, statt malloc benutzt, um direkt alle Werte mit 0 zu initialisieren return m; } void clearMatrix(Matrix *matrix) { if(matrix == NULL){ // falls clearMatrix(NULL) aufgerufen wird, sonst würde es abstürzen, wenn mann direkt free(matrix->buffer) schreibt return; } free(matrix->buffer); // matrix->buffer = (*matrix).buffer matrix->buffer = NULL; // falls clearMatrix doppelt aufgerufen wird matrix->rows = 0; // Matrix wird als komplett leer markiert matrix->cols = 0; } void setMatrixAt(MatrixType value, Matrix matrix, unsigned int rowIdx, unsigned int colIdx) //schreiben { if(rowIdx < matrix.rows && colIdx < matrix.cols) { matrix.buffer[rowIdx * matrix.cols + colIdx] = value; } } MatrixType getMatrixAt(const Matrix matrix, unsigned int rowIdx, unsigned int colIdx) //lesen { if(rowIdx < matrix.rows && colIdx < matrix.cols) { return matrix.buffer[rowIdx * matrix.cols + colIdx]; } else { return UNDEFINED_MATRIX_VALUE; } } Matrix add(const Matrix matrix1, const Matrix matrix2) { Matrix empty = {0,0,NULL}; return empty; } Matrix multiply(const Matrix matrix1, const Matrix matrix2) { if(matrix1.cols == matrix2.rows && matrix1.buffer != NULL && matrix2.buffer != NULL) { Matrix ergebnis = createMatrix(matrix1.rows, matrix2.cols); for(unsigned int i = 0; i < matrix1.rows; i++) { for(unsigned int k = 0; k < matrix2.cols; k++) // i und k bestimmen die Zelle in der das Ergebnis berechnet wird { MatrixType summe = 0.0f; for(unsigned int p = 0; p < matrix1.cols ; p++) { summe += getMatrixAt(matrix1, i, p) * getMatrixAt(matrix2, p, k); } setMatrixAt(summe, ergebnis, i, k); } } return ergebnis; } else { Matrix leer = {0, 0, NULL}; return leer; } }