diff --git a/a3-2/README.md b/a3-2/README.md new file mode 100644 index 0000000..b192012 --- /dev/null +++ b/a3-2/README.md @@ -0,0 +1,27 @@ +## A3-2 Ergebnisse + +Grundsätzlich gibt es zwei Möglichkeiten, die `matrix_elem_sum` Funktion zu implementieren: + 1. Rekursiv + 2. Iterativ + +Ein rekursiver Ansatz wäre zwar warscheinlich intuitiver, wenn man eine higher-level Programmiersprache gewohnt ist, jedoch ist aufgrund des Aufbaus von Arrays in C ein iterativer Ansatz deutlich sinnvoller. + +```c +double matrix_elem_sum(double* matrix, int n, int* lengths) { + // gesamtlaenge der Matrix ermitteln + int length = 1; + for (int i = 0; i < n; i++) { + length *= lengths[i]; + } + + // iterativ alle Elemente der Matrix addieren + double sum = 0; + for (int i = 0; i < length; i++) { + sum += matrix[i]; + } + + return sum; +} +``` + +Da auch bei mehrdimensionalen Arrays in C alle Werte sequentiell hintereinander liegen, kann man einfach durch das multiplizieren der Größen der Teil-Matrizen, die Anzahl der gesamtwerte ermitteln, und anschließend Iterativ alle aufsummieren. diff --git a/a3-2/main.c b/a3-2/main.c new file mode 100644 index 0000000..c6cf073 --- /dev/null +++ b/a3-2/main.c @@ -0,0 +1,34 @@ +#include + +double matrix_elem_sum(double* matrix, int n, int* lengths) { + // gesamtlaenge der Matrix ermitteln + int length = 1; + for (int i = 0; i < n; i++) { + length *= lengths[i]; + } + + // iterativ alle Elemente der Matrix addieren + double sum = 0; + for (int i = 0; i < length; i++) { + sum += matrix[i]; + } + + return sum; +} + +int main(void) { + + double matrix2d[3][2] = { {111, 112}, {121, 122}, {131, 132} }; + int lengths2d[2] = {3, 2}; + + double matrix3d[2][3][4] = { + { {111, 112, 113, 114}, {121, 122, 123, 124}, {131, 132, 133, 134} }, + { {211, 212, 213, 214}, {221, 222, 223, 224}, {231, 232, 233, 234} } + }; + + int lengths3d[3] = {2, 3, 4}; + + + + return 0; +}