diff --git a/imageInput.c b/imageInput.c index bb30de1..2e89d2a 100644 --- a/imageInput.c +++ b/imageInput.c @@ -19,4 +19,11 @@ GrayScaleImageSeries *readImages(const char *path) // TODO Vervollständigen Sie die Funktion clearSeries, welche eine Bildserie vollständig aus dem Speicher freigibt void clearSeries(GrayScaleImageSeries *series) { + for(size_t i = GrayScaleImageSeries.count - 1; i >= 0; i--) + { + free(GrayScaleImageSeries.images+GrayScaleImageSeries.count*sizeof(GrayScaleImage)*i); + free(GrayScaleImageSeries.labels+GrayScaleImageSeries.count*sizeof(unsigned char)*i); + } + GrayScaleImageSeries.images = NULL; + GrayScaleImageSeries.labels = NULL; } \ No newline at end of file diff --git a/matrix.c b/matrix.c index e69ebd6..934900e 100644 --- a/matrix.c +++ b/matrix.c @@ -13,49 +13,65 @@ typedef struct Matrix { Matrix createMatrix(unsigned int rows, unsigned int cols) { - + Matrix newMatrix; + newMatrix.rows = rows; + newMatrix.cols = cols; + newMatrix.buffer = calloc(rows*cols, sizeof(MatrixType)) + return newMatrix; } void clearMatrix(Matrix *matrix) { - + free(*matrix.buffer); + *matrix.buffer = NULL; } void setMatrixAt(MatrixType value, Matrix matrix, unsigned int rowIdx, unsigned int colIdx) { - + if (rowIdx >= matrix.rows || colIdx >= matrix.cols){ + printf("Index out of bounds\n"); //Error Message because Index Input exceeds Matrix +} + else{ + matrix.buffer[rowIdx * matrix.cols + colIdx] = value; //Writes Value of value variable in the selected place in Matrix +} } MatrixType getMatrixAt(const Matrix matrix, unsigned int rowIdx, unsigned int colIdx) { - + if (rowIdx >= matrix.rows || colIdx >= matrix.cols){ + printf("Index out of bounds\n"); + return 0; + } + else{ + + MatrixType value = matrix.buffer[rowIdx * matrix.cols + colIdx]; //Stores value of selected place of Matrix in value variable + return value; } + } Matrix add(const Matrix matrix1, const Matrix matrix2) { - + Matrix MatrixErgebnis = createMatrix(matrix1.rows, matrix1.cols); //Creating Result Matrix + if(matrix1.cols != matrix2.cols || matrix1.rows != matrix2.rows){ + printf("Matrix dimensions do not match\n"); //Error Message if dimensions of Input Matrixes are not identical + MatrixErgebnis = clearMatrix(MatrixErgebnis); + return MatrixErgebnis; + } + else{ + + for (unsigned int i = 0; i < matrix1.rows; i++){ + for (unsigned int j = 0; j < matrix1.cols; j++){ + //Adding Matrix Elements of same row and col index together and store in new Matrix + MatrixErgebnis.buffer[i * matrix1.cols + j] = matrix1.buffer[i * matrix1.cols + j] + matrix2.buffer[i * matrix1.cols + j]; + + } + } + + } +return MatrixErgebnis; } Matrix multiply(const Matrix matrix1, const Matrix matrix2) { - if (matrix1.rows == matrix2.cols) { - Matrix result; - result.rows = matrix1.rows; - result.cols = matrix2.cols; - - result.buffer = malloc(result.rows * result.cols * sizeof(MatrixType)); - - for(int i = 0; i < rows; i++) { - for(int j = 0; j < cols; j++) { - MatrixType value = 0; - for(int k = 0; k < matrix1.cols; k++) { - value += matrix1[i][k] * matrix2[k][j]; - } - result.buffer[i][i] = value; - } - } - return result; - } - printf("Die angegebenen Matrizen haben keine passenden Dimensionen für die Multiplikation"); - return NULL; + } \ No newline at end of file