Matrix.c kommentiert

This commit is contained in:
silvana884 2025-11-26 10:52:42 +01:00
parent 4c984c59da
commit 3e9041e437

View File

@ -2,8 +2,9 @@
#include <string.h> #include <string.h>
#include "matrix.h" #include "matrix.h"
// TODO Matrix-Funktionen implementieren //Erstellt eine mit Nullen gefuellte Matrix, wenn genug Speicherplatz vorhanden ist und ein out-of-bounds-error durch unpassende Spalten oder Zeilen verhindert werden kann.
//Gibt die erstellte Matrix als Matrix-Objekt zurueck, also als eine Kopie der erstellten Matrix.
//@Param: rows gibt die Anzahl der Zeilen der neuen Matrix an, cols gibt die Anzahl der Spalten an
Matrix createMatrix(unsigned int rows, unsigned int cols) Matrix createMatrix(unsigned int rows, unsigned int cols)
{ {
if(rows && cols){ if(rows && cols){
@ -32,7 +33,8 @@ Matrix createMatrix(unsigned int rows, unsigned int cols)
return matrix; return matrix;
} }
//Loescht die uebergebene Matrix vollstaendig aus dem Speicher.
//@Param: *matrix Gibt den Zeiger auf die zu loeschende Matrix wieder. Dadurch wird nicht nur eine Kopie geloescht, sondern tatsaechlich die Matrix.
void clearMatrix(Matrix *matrix) void clearMatrix(Matrix *matrix)
{ {
free(matrix->buffer); free(matrix->buffer);
@ -41,11 +43,19 @@ void clearMatrix(Matrix *matrix)
matrix->cols = 0; matrix->cols = 0;
} }
//Setzt den Wert einer Matrix an einer bestimmten Stelle im Array.
//@Param: value gibt den einzufuegenden Wert an, matrix die Matrix, deren Wert geandert oder gesetzt werden soll,
// rowIdx die Anzahl der Zeilen, die im Speicher uebersprungen werden soll, um in die gewunschte Zeile zu kommen,
// collIdx die Nummer der Spalte, die geandert werden soll
void setMatrixAt(MatrixType value, Matrix matrix, unsigned int rowIdx, unsigned int colIdx) void setMatrixAt(MatrixType value, Matrix matrix, unsigned int rowIdx, unsigned int colIdx)
{ {
matrix.buffer[rowIdx * matrix.cols + colIdx] = value; matrix.buffer[rowIdx * matrix.cols + colIdx] = value;
} }
//Gibt den Wert einer Matrix an einer bestimmten Stelle im Array zurueck.
//@Param: value gibt den einzufuegenden Wert an, matrix die Matrix, deren Wert geandert oder gesetzt werden soll,
//rowIdx die Anzahl der Zeilen, die im Speicher uebersprungen werden soll, um in die gewunschte Zeile zu kommen,
// collIdx die Nummer der Spalte, die gelesen werden soll
MatrixType getMatrixAt(const Matrix matrix, unsigned int rowIdx, unsigned int colIdx) MatrixType getMatrixAt(const Matrix matrix, unsigned int rowIdx, unsigned int colIdx)
{ {
if(rowIdx >= matrix.rows || colIdx >= matrix.cols){ if(rowIdx >= matrix.rows || colIdx >= matrix.cols){
@ -54,6 +64,11 @@ MatrixType getMatrixAt(const Matrix matrix, unsigned int rowIdx, unsigned int co
return matrix.buffer[rowIdx * matrix.cols + colIdx]; return matrix.buffer[rowIdx * matrix.cols + colIdx];
} }
//Addiert zwei Matrizen miteinander oder broadcastet die eine Matrix mit einem Vektor.
//Ueberpueft, ob broadcasting moeglich ist. Wenn nicht, werden die Matrizen addiert. Prueft zusaetzlich, ob Matrizenaddition moeglich ist.
//Ist Broadcasting moeglich, wird die broadcasting-Methode aufgerufen.
//Gibt addierte Matrix zurueck, nachdem diese in der Funktion erstellt wurde.
//@param: matrix1 und matrix2 sind die Matrizen, deren Spalten und Zeilen ueberprueft werden und von denen moeglicherweise einer ein Vektor ist fuer das Broadcasting.
Matrix add(const Matrix matrix1, const Matrix matrix2) Matrix add(const Matrix matrix1, const Matrix matrix2)
{ {
int rows1 = rows(matrix1); int rows1 = rows(matrix1);
@ -91,6 +106,9 @@ Matrix add(const Matrix matrix1, const Matrix matrix2)
} }
} }
//Gibt die Matrix zurueck, die nach dem Broadcasting entstanden ist.
//Addiert einen Vektor zu einer Matrix, sodass jede Zelle der Matrix mit der Koordinate des Vektors addiert wird.
//@param: vektor ist die einspaltige Matrix, deren Koordinaten auf die Matrix addiert werden, matrix ist die Matrix, zu der der Vektor addiert wird.
Matrix broadcasting(const Matrix vektor, const Matrix matrix) Matrix broadcasting(const Matrix vektor, const Matrix matrix)
{ {
int rowsM = rows(matrix); int rowsM = rows(matrix);
@ -109,6 +127,8 @@ Matrix broadcasting(const Matrix vektor, const Matrix matrix)
return result; return result;
} }
//Prueft, ob Multiplikation zweier Matrizen moeglich ist und gibt fuer den Fall, dass es moeglich ist, eine neue Matrix mit den Ergebnissen zurueck.
//@param: matrix1 und matrix2 geben die Matrizen an, die miteinander multipliziert werden sollen
Matrix multiply(const Matrix matrix1, const Matrix matrix2) Matrix multiply(const Matrix matrix1, const Matrix matrix2)
{ {
int rows1 = rows(matrix1); int rows1 = rows(matrix1);
@ -142,11 +162,15 @@ Matrix multiply(const Matrix matrix1, const Matrix matrix2)
return createMatrix(0,0); return createMatrix(0,0);
} }
//Gibt die Strukturvariable rows einer Matrix zurueck
//@param: matrix gibt an, von welcher Matrix die Strukturvariable uebergeben werden soll
int rows(const Matrix matrix) int rows(const Matrix matrix)
{ {
return matrix.rows; return matrix.rows;
} }
//Gibt die Strukturvariable cols einer Matrix zurueck
//@param: matrix gibt an, von welcher Matrix die Strukturvariable uebergeben werden soll
int cols(const Matrix matrix) int cols(const Matrix matrix)
{ {
return matrix.cols; return matrix.cols;