Compare 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
AD005\z004z3ez 6c0dd3f87f set_Matrix Dunktion erstellt 2025-11-11 16:00:57 +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
+128 -4
View File
@@ -6,26 +6,150 @@
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)
{
free(matrix->data);
matrix->rows = 0;
matrix->cols = 0;
matrix->data = NULL;
}
void setMatrixAt(MatrixType value, Matrix matrix, unsigned int rowIdx, unsigned int colIdx)
{
matrix.data[(rowIdx * matrix.cols) + colIdx] = value; //wir setzen den data-Wert an der Stelle (rowIdx*Spalten + colIdx) auf den Wert von value
}
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;
}