a3-2
This commit is contained in:
parent
bb7617ba21
commit
5a5d7ddd0f
|
@ -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.
|
|
@ -0,0 +1,34 @@
|
|||
#include <stdio.h>
|
||||
|
||||
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;
|
||||
}
|
Loading…
Reference in New Issue