Zeiger auf Arrays[Matrix]



  • Moin,

    habe folgendes Problem, wäre nett wenn Ihr mit weiterhelfen könntet!

    Wenn den Quelltext(unten) kompiliert und das Programm start, wird eine Tabelle mit Zahlen u.s.w. ausgegeben. Jedoch stimmen die "Gesamt Pkte." nicht(wie Ihr seht).
    Es sollte heißen: Klasse8a = 151, Klasse8b = 156, Klasse8c = 149, KLasse8d = 155.

    Die Umrechnungsformel dafür ist:

    (Pkt/Aufg) * (1.Aufgabe für Klasse8a)+ (Pkt/Aufg)* (2.Aufgabe für Klasse8a) u.s.w bis als Gesamtpunktzahl für KLasse 8a = 151 herauskommt.

    Wie Ihr im Quelltext seht, habe ich das auch so programmiert, jedoch bekomme ich kein Zugriff auf die Zahlen von "8b - 8d"! Wie bekomme ich meinen Pointer auf Array dazu mir auch diese Zahlen zu geben? Ich habe den Berechnungsteil makiert wo ich der Meinung bin, hier liegt der Fehler!

    Hier der Quelltext:

    #include <stdio.h>

    void main(void)

    {

    int matrix_a [2][5] = {{ 1, 2, 3, 4, 5},

          { 3, 2, 1, 2, 3}};
    

    int matrix_b [4][5] = {{ 3, 15, 10, 30, 14},

          {16, 12, 12, 24,  8},
    
          { 8,  5, 15, 20, 20},
    
          {10,  8, 14, 10, 25}};
    

    int ges_pkte [4] = { 0, 0, 0, 0 };

    int *z_matrix_a;

    int *z_matrix_b;

    int *z_ges_pkte;

    z_matrix_a = &matrix_a[1][0];

    z_matrix_b = &matrix_b[0][0];

    z_ges_pkte = &ges_pkte[0];

    int k,

      a;
    

    /-----------------------Hier liegt der Fehler---------------------/

    for(k=0; k<5; k++)

    for(a=0; a<4; a++)
    
      *(z\_ges\_pkte+a) += *(z\_matrix\_a+k) * *(z\_matrix\_b+k);
    

    /------------------------------------------------------------------/

    z_matrix_a = &matrix_a[0][0];

    z_matrix_b = &matrix_b[0][0];

    printf("\n\n Die Punktverteilung fuer alle 4 Klassen:");

    printf("\n\n Nr der Aufg.");

    for(k=0; k<5; k++)

    printf(" %6d", *z_matrix_a++);

    printf(" Gesamt Pkt.");

    z_ges_pkte = &ges_pkte[0];

    z_matrix_b = &matrix_b[0][0];

    for(k=0; k<4; k++)

    {
    
      printf("\\n\\n !Klasse 8%c:     ", 97+k);
    
      for(a=0; a<5; a++)
    

    printf("%4d !", *z_matrix_b++);

      printf("%6d    ! ", *z\_ges\_pkte++);
    
    }
    

    printf("\n\n !Pkt/Aufg.: ");

    for(k=0; k<5; k++)
    

    printf("%4d !", *z_matrix_a++);

    printf("\n\n\n");

    }[/code]

    Bitte HELFT mir !!!

    M f G -> Robb.



  • hi!

    1. hat es eine besondere bewandnis, dass matrix b größer als a ist?
    2. warum arbeitest du so viel mit pointern. das macht die sache in diesem fall nur unnötig kompliziert. vorallem weil du 2dimensionale arrays verwendest. mach das doch mittels indizierung (eckige klammern)

    cu todo



  • @todo:

    Zu Deiner Frage mit den vielen Pointer:
    Ich muss Sie verwenden, weil es so in meinen Prüfungsaufgaben steht.

    Jedoch habe ich keinen Plan wie ich dies realisieren soll!

    M f G -> Robb.



  • du solltest zu dem pointer nicht nur einen wert (wie z.b. k) addieren, sondern auch noch n*array_x_size, damit du auch in die anderen "zeilen des arrayss gelangst", also z.b.

    (pointer+x+yarray_x_size)

    also im berechnungsteil:

    ... += (z_matrix_a+k+a*5) + *(z_matrix_b+k+a5)

    array_x_size ist die anzahl "der spalten des arrays", also in deinem fall wie viele zahlen in den inneren geschweiften klammern bei der dekl. stehen

    cu todo



  • nochwas: waraum hast du bei der init. von z_matrix_a eine 1 als ersten index bei matrix_a? und warum ist matrix a kleiner als b? für mein beispiel von vorhin müsste die auch so groß wie b sein



  • Zu z_matrix_a[1][0]:Weil die Zahlen in der ersten Zeile für die "Aufgaben-Nr" ist und die zweite für die "Berechnung". Jedoch darf der "z_ges_pkte" nicht auf "matrix_a[0][0]", weil das ja die Zahlen für die Aufgnr. sind!!

    seeya.robb.



  • Ich habs(endlich!!!) Die Lösung sieht so aus:

    *(z_ges_pkte +k) += *(z_matrix_a +a) * *(z_matrix_b +k *5 +a);

    Greets -> Robb.


Anmelden zum Antworten