Seite 1 von 1

rechnen mit zeiger

Verfasst: So Dez 14, 2014 10:03 am
von zitrone
Hallo liebes Forum Team
Ich komme nicht weiter, velleich könnt ihr mir helfen. Meine problem das berechnung in schleife zupacken. :shock:
weitere variable nicht zulasig

Code: Alles auswählen

#include <stdio.h>
#define ZEILEN 4
#define SPALTEN 5

int main(void)
{
    int i, j;
    int matrix_a[ZEILEN][SPALTEN] = { { 3, 15, 10, 30, 14 },
                           			  { 16, 12, 12, 24, 8 },
                                      { 8, 5, 15, 20, 20 },
                                      { 10, 8, 14, 10, 25 } };

    int matrix_b[5] = { 3, 2, 1, 2, 3 };
    int ges_pkt[4] = { 0, 0, 0, 0, };

    int *z_matrix_a;
    int *z_matrix_b;
    int *z_ges_pkt;

    z_matrix_a = &matrix_a[0][0];
    z_matrix_b = &matrix_b[0];
    z_ges_pkt = &ges_pkt[0];

/*************************************************************************************************/
/*     gesamtberechnung                                                                                   */
/**********************************************************************************************/


   *(z_ges_pkt) =    (*(z_matrix_a) * *(z_matrix_b)) +
                     (*(z_matrix_a+1) * *(z_matrix_b+1))+
                     (*(z_matrix_a+2) * *(z_matrix_b+2))+
                     (*(z_matrix_a+3) * *(z_matrix_b+3))+
                     (*(z_matrix_a+4) * *(z_matrix_b+4));


    *(z_ges_pkt+1) = (*(z_matrix_a+5) * *(z_matrix_b) ) +
                     (*(z_matrix_a+6) * *(z_matrix_b+1))+
                     (*(z_matrix_a+7) * *(z_matrix_b+2))+
                     (*(z_matrix_a+8) * *(z_matrix_b+3))+
                     (*(z_matrix_a+9) * *(z_matrix_b+4));

   *(z_ges_pkt+2) =  (*(z_matrix_a+10) * *(z_matrix_b)) +
                     (*(z_matrix_a+11) * *(z_matrix_b+1))+
                     (*(z_matrix_a+12) * *(z_matrix_b+2))+
                     (*(z_matrix_a+13) * *(z_matrix_b+3))+
                     (*(z_matrix_a+14) * *(z_matrix_b+4));

   *(z_ges_pkt+3) =  (*(z_matrix_a+15) * *(z_matrix_b))+
                     (*(z_matrix_a+16) * *(z_matrix_b+1))+
                     (*(z_matrix_a+17) * *(z_matrix_b+2))+
                     (*(z_matrix_a+18) * *(z_matrix_b+3))+
                     (*(z_matrix_a+19) * *(z_matrix_b+4));

/***********************************************************************************************************************/

	printf("\n\n\n");
    printf("\n\tDie Punktdarstellung fuer 4 Klassen: ");
    printf("\n\tNr der Aufg.   1       2      3      4      5     Gesamt Pkt.");
    printf("\n\tKlasse 8a:     %d   !  %d  !  %d  !  %d  !  %d  !   %d",
    matrix_a[0][0],matrix_a[0][1],matrix_a[0][2],matrix_a[0][3],matrix_a[0][4],ges_pkt[0]);
    printf("\n\tKlasse 8b:    %d   !  %d  !  %d  !  %d  !   %d  !   %d",
    matrix_a[1][0],matrix_a[1][1],matrix_a[1][2],matrix_a[1][3],matrix_a[1][4],ges_pkt[1]);
    printf("\n\tKlasse 8c:     %d   !   %d  !  %d  !  %d  !  %d  !   %d",
    matrix_a[2][0],matrix_a[2][1],matrix_a[2][2],matrix_a[2][3],matrix_a[2][4],ges_pkt[2]);
    printf("\n\tKlasse 8d:    %d   !   %d  !  %d  !  %d  !  %d  !   %d",
    matrix_a[3][0],matrix_a[3][1],matrix_a[3][2],matrix_a[3][3],matrix_a[3][4],ges_pkt[3]);
    printf("\n\tPkt/Aufg.:     %d   !   %d  !   %d  !   %d  !   %d  !",
    matrix_b[0],matrix_b[1],matrix_b[2],matrix_b[3],matrix_b[4]);

    printf("\n\n\n\n");
}
Edit by Xin: Code-Tage hinzugefügt

Re: rechnen mit zeiger

Verfasst: So Dez 14, 2014 10:18 am
von Xin
zitrone hat geschrieben:Hallo liebes Forum Team
Ich komme nicht weiter, velleich könnt ihr mir helfen. Meine problem das berechnung in schleife zupacken. :shock:
weitere variable nicht zulasig


Okay, i und j schreien ja nach Schleifen, wenn das eine Hausaufgabe ist.

Im Prinzip guckst Du vorrangig, wo sich Dinge wiederholen. Bei z_matrix_b ändert sich ja nix. Bei z_matrix_a gehst Du pro Zeile 5 Elemente weiter

Code: Alles auswählen

   *(z_ges_pkt) =    (*(z_matrix_a) * *(z_matrix_b)) +
                     (*(z_matrix_a+1) * *(z_matrix_b+1))+
                     (*(z_matrix_a+2) * *(z_matrix_b+2))+
                     (*(z_matrix_a+3) * *(z_matrix_b+3))+
                     (*(z_matrix_a+4) * *(z_matrix_b+4));


    *(z_ges_pkt+1) = (*(z_matrix_a+5) * *(z_matrix_b) ) +
                     (*(z_matrix_a+6) * *(z_matrix_b+1))+
                     (*(z_matrix_a+7) * *(z_matrix_b+2))+
                     (*(z_matrix_a+8) * *(z_matrix_b+3))+
                     (*(z_matrix_a+9) * *(z_matrix_b+4));
Du kannst also z_matrix_a pro Durchlauf um 5 Elemente weitersetzen und könntest wieder mit der ersten +1, +2, +3... dich durch die Berechnung ziehen.

Code: Alles auswählen

for( i = 0; i<4; i++ )
{
   *(z_ges_pkt) =    (*(z_matrix_a) * *(z_matrix_b)) +
                     (*(z_matrix_a+1) * *(z_matrix_b+1))+
                     (*(z_matrix_a+2) * *(z_matrix_b+2))+
                     (*(z_matrix_a+3) * *(z_matrix_b+3))+
                     (*(z_matrix_a+4) * *(z_matrix_b+4));

  z_matrix_a += 5;
  z_ges_pkt++;
}
Nun kannst Du Dir +1, +2, +3 in eine For-Schleife packen und mit j ersetzen. Du setzt *(z_ges_pkt) auf 0 und addierst dann die 5 Elemente auf.

Probier das mal.

Re: rechnen mit zeiger

Verfasst: So Dez 14, 2014 12:37 pm
von zitrone
vielen vielen Dank! Du hast mir sehr weiter geholfen. :D Jezt weis ich wo mein Fehler lag.