#include "matrix.h" #include #include // TODO Matrix-Funktionen implementieren /*typedef struct { unsigned int rows; //Zeilen unsigned int cols; //Spalten MatrixType *buffer; //Zeiger auf Speicherbereich Reihen*Spalten } Matrix;*/ Matrix createMatrix(unsigned int rows, unsigned int cols) { MatrixType *buffer = malloc(rows * cols * sizeof(MatrixType)); // Speicher reservieren, malloc // liefert Zeiger auf Speicher Matrix newMatrix = {rows, cols, buffer}; // neue Matrix nach struct return newMatrix; } void clearMatrix(Matrix *matrix) { matrix->buffer = UNDEFINED_MATRIX_VALUE; matrix->rows = UNDEFINED_MATRIX_VALUE; matrix->cols = UNDEFINED_MATRIX_VALUE; free((*matrix).buffer); // Speicher freigeben } void setMatrixAt(const MatrixType value, Matrix matrix, const unsigned int rowIdx, // Kopie der Matrix wird übergeben const unsigned int colIdx) { matrix.buffer[rowIdx * matrix.cols + colIdx] = value; // rowIdx * matrix.cols -> Beginn der Zeile colIdx ->Spalte // innerhalb der Zeile } MatrixType getMatrixAt(const Matrix matrix, unsigned int rowIdx, // Kopie der Matrix wird übergeben unsigned int colIdx) { if (rowIdx >= matrix.rows || colIdx >= matrix.cols) { // Speichergröße nicht überschreiten return 0; } MatrixType value = matrix.buffer[rowIdx * matrix.cols + colIdx]; return value; } Matrix add(const Matrix matrix1, const Matrix matrix2) { Matrix result; const int cols1 = matrix1.cols; const int rows1 = matrix1.rows; const int cols2 = matrix2.cols; const int rows2 = matrix2.rows; const int colsEqu = (matrix1.cols == matrix2.cols) ? 1 : 0; const int rowsEqu = (matrix1.rows == matrix2.rows) ? 1 : 0; if(colsEqu && rowsEqu) { Matrix result = createMatrix(matrix1.rows, matrix1.cols); for(int i = 0; i < rows1; i++) { for (int j = 0; j < cols1; j++) { int valueM1 = getMatrixAt(matrix1, i, j); int valueM2 =getMatrixAt(matrix2, i, j); int sum = valueM1 + valueM2; setMatrixAt(sum, result,i,j); } } return result; } } Matrix multiply(const Matrix matrix1, const Matrix matrix2) { return matrix1; }