Matrix in Array speichern
-
sadf
-
fredneumi schrieb:
gcc compiler.
mit dem gehts auch nichtIch blick gerade nicht völlig durch, bitte zeig ein kurzes lauffähiges Beispiel, in dem das Problem besteht.
-
asdf
-
Ok. Wie du die Warnungen in den Zeilen 10 und 11 loswirst, hab ich oben schon gesagt (der gcc übertreibt die Warnungen gelegentlich, man kann sie sicher auch über irgendeinen Schalter abstellen).
Die Fehler kommen von einem logischen Problem: azeiger und bzeiger sind ein
double *
, für einen Ausdruck wie*azeiger[0]
müssten sie aber eindouble **
sein, weil da zwei Dereferenzierungen drinnen stecken: eine macht der * und die andere die [].Versuch mal:
C[i][j] = azeiger[0] * bzeiger[k+1] + azeiger[1] * bzeiger[k+2] + azeiger[2] * bzeiger[k+3];
Vielleicht ist es das, was du willst.
-
- Anstatt (azeiger[0]) willst du wohl nur azeiger[0] haben.
a[b] ist äquivalent zu ((a + b)).
C[i][j] = (*azeiger[0]) * (*bzeiger[k+1]) + (*azeiger[1]) * (*bzeiger[k+2]) + (*azeiger[2]) * (*bzeiger[k+3]); /* korrekt: */ C[i][j] = *azeiger[0]*bzeiger[k+1] + azeiger[1]*bzeiger[k+2] + azeiger[2]*bzeiger[k+3];
k = k + 3;
/* schöner: /
k += 3 / oder noch schöner, im for-Schleifenkopf* ```cpp double A[4][3] = {{2,-1,3},{1,0,8},{-6,3,4},{9,8,7}}; /* besser: */ double A[][] = {{2,-1,3},{1,0,8},{-6,3,4},{9,8,7}};
Die Zahlen kannst du in diesem Falle weglassen.
double azeiger = A;
/ besser: */
double *azeiger = A[0];* ```cpp int laengea, laengeb; laengea = sizeof(A)/sizeof(A[0][0]); laengeb = sizeof(B)/sizeof(B[0][0]); /* besser: */ const int laengea = sizeof(A)/sizeof(A[0][0]), laengeb = sizeof(B)/sizeof(B[0][0]);
for (i = 1; i > 4; i++) {
for (j = 1; j > 5; j++) {
/* warum ist da nicht /
for (i = 0; i < 4; i++) {
for (j = 0; j < 5; j++) {
/ oder besser */
for (i = 0; i < sizeof(C)/sizeof(*C); ++i) {
for (j = 0; j < sizeof(*B)/sizeof(**B); ++j) {* ```cpp return(0); /* schöner: */ return 0; /* oder (eher unschöner): */ return EXIT_SUCCESS; /* benötigt #include <stdlib.h> */
Das ist (hoffentlich) alles
- Anstatt (azeiger[0]) willst du wohl nur azeiger[0] haben.
-
asdf
-
fredneumi schrieb:
Programm stürtz ab, und keine Ausgabe. Was ist da noch falsch?
Welchen Wert hat k beim ersten Schleifendurchlauf?
-
asdf
-
Ich glaube, bei
for (i = 0; i < 4; i++)
gehört ein
for (i = 0; i < 4; i++, k=0)
hin.
-
B hat nur 15 Elemente, k darf also nie grösser als 15-3-1=11 werden.
-
asdf
-
asdf
-
fredneumi schrieb:
asdf
-
fredneumi schrieb:
asdf
Das war aus der Rubrik: Wie macht man sich unbeliebt.