Zeiger in Array



  • Hallo, Leute. Kann mir jemand helfen?Ich bin gerade bei erlernen 'C'
    und kann nicht mit meine Hausaufgaben klar kommen.Mein Problem - Zeiger(Pointer).
    Einfach, ohne Zeiger, habe ich das schon gelöst, aber jetzt muss ich irgenwie
    das alles mit Zeiger erledigen. Also, folgende:
    Sind eine Array Matrix_A(4 Zeile,5 Spalte) mit int gefüllt. z.B.
    {{1,2,3,4,5}
    {2,3,4,5,6}
    {3,4,5,6,7}
    {4,5,6,7,8}}

    und noch ein Array Matrix_B (5 spalten) z.B.
    {4,5,6,7,8}
    Jetzt sollen wir bekommen Ergebnis( auch Array mit 4 Zeilen)
    Ergebnis[k] = Matrix_A[a][k] * Matrix_B[a]
    Füe Spalte und Zeile sind noch zweiVariable zulässig: 'a' für spalten und 'k' für zeilen.
    Mit Schleife geht alles gut.
    Ich werde hier nicht ganze QuelleCode schreiben, nur die wichtigste Zeile:

    for(k=0; k < 4; k = k + 1)
    for(a=0; a < 5; a = a + 1)
    
    ges_pkte [k] = ges_pkte[k] + Matrix_A [k][a] * Matrix_B[a];
    ________________________
    

    und Ausgabe:

    for(a = 0; a <= 4; a = a + 1)
    k = 0;
    bla bla bla...
    printf("\t%d",ges_pkte[k]) ;
    

    Alles funktioniert wunderbar, aber jetzt soll ich das alles mit Zeigern versehen.
    So mache ich das:

    int *z_matrix_a = &Matrix_A[4][5];
    int *z_matrix_b = &Matrix_B[5];
    int *z_ges_pkte = &ges_pkte[4];
    
    z_ges_pkte = &ges_pkte[0];
    z_matrix_a = &Matrix_A[0][0];
    z_matrix_b = &Matrix_B[0];
    
    for(k=0; k < 4; k = k + 1)
    for(a=0; a < 5; a = a + 1)
    
    *z_ges_pkte = *z_ges_pkte + *(z_matrix_a++) * *(z_matrix_b++);
    _______________________
    for(a = 0; a <= 4; a = a + 1)
    k = 0;
    bla bla bla...
    printf("\t%d",*z_ges_pkte) ;
    

    Keine Fehler beim Compilieren und blöde Ergebnis. Ich weiss, dass ich
    etwas falsch mache, aber allein ich komme nicht zu recht.
    Ich danke voraus für ihre Hilfe.



  • Logikfehler in der Implementierung:

    Du läufst durch die Schleife und bei jedem Duchlauf setzt du mit dem Operator ++ beide Zeiger hoch für das zweidimesionale Array z_matrix_a mag das sogar stimmen aber wenn du z_matrix_b für k=1 benutzt bist du jenseits des zulässigen Bereichs.

    Probiers mal damit.
    Ein paar Klammern mehr machen alles übersichtlicher

    for(i=0; i < 4; i++)
    for(k=0; k < 5; k++)
    *z_ges_pkte = (*z_ges_pkte) + ((z_matrix_a + (i*5+k)) * ((z_matrix_b + k));

    - Matrix_B ist von der üblichen Benennung eigentlich eine Vektor
    - In der Mathe ist es IMHO besser die Dereferenzierung von den MatheOperatoren zu trennen eine rein optische Angelegenheit
    - die Änderung von (a nach k) und (k nach i) dient der Schönheit und der Gewohnheit der Leute die öfters damit arbeiten
    - deine Schreibweise k=k+1 ist korrekt (k+=1 wäre auch zulässig), k++ ist die normalerweise benutzte.

    Hoffe geholfen zu haben


Anmelden zum Antworten