Compare commits

...
10 Commits
Author SHA1 Message Date
AD005\z004z3ez f3b964f17e add_matrix Funktion erstellt 2025-11-11 18:12:20 +01:00
AD005\z004z3ez 782bcdc350 Merge branch 'get_matrix' 2025-11-11 16:11:10 +01:00
AD005\z004z3ez a1c582fcff Merge branch 'set_matrix' 2025-11-11 16:10:03 +01:00
AD005\z004z3ez bf27920a61 get_matrix Funktion erstellt 2025-11-11 16:09:42 +01:00
wolfni101342 6885e104eb Merge branch 'create-matrix' 2025-11-10 15:51:18 +01:00
wolfni101342 d15f3d1b9c Merge branch 'clear-matrix' 2025-11-10 15:50:30 +01:00
wolfni101342 84fb7219fb clear matrix 2025-11-10 15:47:48 +01:00
wolfni101342 e2dbb0952f clear matrix func wip 2025-11-10 15:43:00 +01:00
wolfni101342 3a72794684 create matrix update wip 2025-11-10 15:33:39 +01:00
wolfni101342 f0bc0ce06a create matrix func wip 2025-11-10 15:13:32 +01:00
+125 -2
View File
@@ -6,12 +6,34 @@
Matrix createMatrix(unsigned int rows, unsigned int cols) Matrix createMatrix(unsigned int rows, unsigned int cols)
{ {
Matrix m;
m.rows = rows;
m.cols = cols;
m.data = NULL;
if(rows == 0 || cols == 0)
{
printf("Error");
exit(EXIT_FAILURE);
}
m.data = calloc(rows * cols, sizeof(MatrixType));
if (m.data == NULL)
{
printf("Error");
exit(EXIT_FAILURE);
}
return m;
} }
void clearMatrix(Matrix *matrix) void clearMatrix(Matrix *matrix)
{ {
free(matrix->data);
matrix->rows = 0;
matrix->cols = 0;
matrix->data = NULL;
} }
void setMatrixAt(MatrixType value, Matrix matrix, unsigned int rowIdx, unsigned int colIdx) void setMatrixAt(MatrixType value, Matrix matrix, unsigned int rowIdx, unsigned int colIdx)
@@ -22,11 +44,112 @@ void setMatrixAt(MatrixType value, Matrix matrix, unsigned int rowIdx, unsigned
MatrixType getMatrixAt(const Matrix matrix, unsigned int rowIdx, unsigned int colIdx) MatrixType getMatrixAt(const Matrix matrix, unsigned int rowIdx, unsigned int colIdx)
{ {
return matrix.data[(rowIdx * matrix.cols) + colIdx];
} }
Matrix add(const Matrix matrix1, const Matrix matrix2) static int can_add(Matrix matrix1, Matrix matrix2) {
int can_add;
if(matrix1.cols == matrix2.cols && matrix1.rows == matrix2.rows){
can_add = 1;
}
else if(matrix1.cols == 1 && matrix1.rows == matrix2.rows){
can_add = 2;
}
else if(matrix2.cols == 1 && matrix1.rows == matrix2.rows){
can_add = 3;
}
else if(matrix1.rows == 1 && matrix1.cols == matrix2.cols){
can_add = 4;
}
else if(matrix2.rows == 1 && matrix1.cols == matrix2.cols){
can_add = 5;
}
else{
can_add = 0;
}
return can_add;
}
Matrix add(const Matrix matrix1, const Matrix matrix2) //wir addieren nur wenn beide Matrizen gleich groß sind oder eine von beiden eine Zeile oder eine Spalte besitzt
{ {
int ok = can_add(matrix1,matrix2);
unsigned int erg_rows = (matrix1.rows == matrix2.rows) ? matrix1.rows : (matrix1.rows == 1 ? matrix2.rows : matrix1.rows);
unsigned int erg_cols = (matrix1.cols == matrix2.cols) ? matrix1.cols : (matrix1.cols == 1 ? matrix2.cols : matrix1.cols);
Matrix matrix_erg = createMatrix(erg_rows, erg_cols);
switch(ok)
{
case 1:
for(int i = 0; i < (matrix1.rows * matrix1.cols); i++)
matrix_erg.data[i] = matrix1.data[i] + matrix2.data[i];
break;
case 2:
for(int i = 0; i < erg_rows; i++){
for(int j = 0; j < erg_cols; j++)
matrix_erg.data[i * erg_cols + j] = matrix1.data[i * erg_cols + j] + matrix2.data[i];
}
break;
case 3:
for(int i = 0; i < erg_rows; i++){
for(int j = 0; j < erg_cols; j++)
matrix_erg.data[i * erg_cols + j] = matrix1.data[i] + matrix2.data[i * erg_cols + j];
}
break;
case 4:
for(int i = 0; i < erg_rows; i++){
for(int j = 0; j < erg_cols; j++)
matrix_erg.data[i * erg_cols + j] = matrix1.data[i * erg_cols + j] + matrix2.data[j];
}
break;
case 5:
for(int i = 0; i < erg_rows; i++){
for(int j = 0; j < erg_cols; j++)
matrix_erg.data[i * erg_cols + j] = matrix1.data[j] + matrix2.data[i * erg_cols + j];
}
break;
default:
printf("Matrix addition not possible\n");
exit(EXIT_FAILURE);
}
return matrix_erg;
} }