Matrix in Array speichern



  • 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 ein double ** 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 😉



  • 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.


Anmelden zum Antworten