Zeiger für ein mehrdemensionales Array setzen
-
Hallo.
Habe folgendes kleines Berechnungsprogramm:
/*************************************************************************/ /* Klassenarbeiten */ /*************************************************************************/ #include <stdio.h> void main (void) { float matrix_a [4][5] = {{3, 15, 10, 30, 14}, {16, 12, 12, 24, 8}, {8, 5, 15, 20, 20}, {10, 8, 14, 10, 25}}, matrix_b [1][5] = {{3, 2, 1, 2, 3}}, ges_pkte [1][4] = {{0, 0, 0, 0}}; int a, k; /*************************************************************************/ /* Berechnen der Ergebnisse und Speichern im Array ges_pkte[][] */ /*************************************************************************/ for ( k=0; k<4; k=k+1) { for ( a=0; a<5; a=a+1) { ges_pkte[0][k] += matrix_a[k][a] * matrix_b[0][a]; } } /*************************************************************************/ /* Ausgabe der Werte der Arrays */ /*************************************************************************/ printf("\n\tDie Punkteverteilung fuer alle 4 Klassen:"); printf("\n"); printf("\n\t Nr der Aufg. 1 2 3 4 5 Gesamt Pkt. "); printf("\n"); printf("\n\t Klasse 8a: %2.0f | %2.0f | %2.0f | %2.0f | %2.0f | %2.0f", matrix_a[0][0],matrix_a[0][1],matrix_a[0][2],matrix_a[0][3],matrix_a[0][4],ges_pkte[0][0]); printf("\n"); printf("\n\t Klasse 8b: %2.0f | %2.0f | %2.0f | %2.0f | %2.0f | %2.0f ", matrix_a[1][0],matrix_a[1][1],matrix_a[1][2],matrix_a[1][3],matrix_a[1][4],ges_pkte[0][1]); printf("\n"); printf("\n\t Klasse 8c: %2.0f | %2.0f | %2.0f | %2.0f | %2.0f | %2.0f ", matrix_a[2][0],matrix_a[2][1],matrix_a[2][2],matrix_a[2][3],matrix_a[2][4],ges_pkte[0][2]); printf("\n"); printf("\n\t Klasse 8d: %2.0f | %2.0f | %2.0f | %2.0f | %2.0f | %2.0f ", matrix_a[3][0],matrix_a[3][1],matrix_a[3][2],matrix_a[3][3],matrix_a[3][4],ges_pkte[0][3]); printf("\n"); printf("\n\t Pkt/Aufg.: %2.0f | %2.0f | %2.0f | %2.0f | %2.0f ", matrix_b[0][0],matrix_b[0][1],matrix_b[0][2],matrix_b[0][3],matrix_b[0][4]); printf("\n\n"); } /*************************************************************************/
Ausführung des Programms:
Die Punkteverteilung fuer alle 4 Klassen:
Nr der Aufg. 1 2 3 4 5 Gesamt Pkt.
Klasse 8a: 3 | 15 | 10 | 30 | 14 | 151
Klasse 8b: 16 | 12 | 12 | 24 | 8 | 156
Klasse 8c: 8 | 5 | 15 | 20 | 20 | 149
Klasse 8d: 10 | 8 | 14 | 10 | 25 | 155
Pkt/Aufg.: 3 | 2 | 1 | 2 | 3
Im Array matrix_a stehen von links nach rechts die Gesamtpunkte pro Aufgabe für die Aufgaben 1 bis 5 einer Klassenarbeit und von oben nach unten vier verschiedene Schulklassen.
Im Array matrix_b stehen von links nach rechts die Punkte für die Aufgaben 1 bis 5 (Punktewertung/Aufgabe).Das Programm funktioniert. Nun möchte ich die Matrix aber über Zeiger ansprechen. Habe folgendes versucht:
float *z_matrix_a = &matrix_a[0][0], *z_matrix_b = &matrix_b[0][0], *z_ges_pkte = &ges_pkte[0][0]; printf("\n\tDie Punkteverteilung fuer alle 4 Klassen:"); printf("\n"); printf("\n\t Nr der Aufg. 1 2 3 4 5 Gesamt Pkt. "); printf("\n"); printf("\n\t Klasse 8a: %2.0f | %2.0f | %2.0f | %2.0f | %2.0f | %2.0f", z_matrix_a,z_matrix_a++,z_matrix_a++,z_matrix_a++,z_matrix_a++,z_ges_pkte++); printf("\n"); printf("\n\t Klasse 8b: %2.0f | %2.0f | %2.0f | %2.0f | %2.0f | %2.0f ", z_matrix_a,z_matrix_a++,z_matrix_a++,z_matrix_a++,z_matrix_a++,z_ges_pkte++); printf("\n"); printf("\n\t Klasse 8c: %2.0f | %2.0f | %2.0f | %2.0f | %2.0f | %2.0f ", z_matrix_a,z_matrix_a++,z_matrix_a++,z_matrix_a++,z_matrix_a++,z_ges_pkte++); printf("\n"); printf("\n\t Klasse 8d: %2.0f | %2.0f | %2.0f | %2.0f | %2.0f | %2.0f ", z_matrix_a,z_matrix_a++,z_matrix_a++,z_matrix_a++,z_matrix_a++,z_ges_pkte++); printf("\n"); printf("\n\t Pkt/Aufg.: %2.0f | %2.0f | %2.0f | %2.0f | %2.0f ", z_matrix_b,z_matrix_b++,z_matrix_b++,z_matrix_b++,z_matrix_b++); printf("\n\n");
Aber das ist wohl nicht ganz richtig ...
Meine Fragen:
Wie kann ich im Array matrix_a die einzelnen Punktezahlen in allen Zeilen und Spalten [4][5] ansprechen?
Wie komme ich auf das Ausgabeergebnis, wie es mein Programm oben liefert?
Wie schreibe ich die Anweisungen für die Zeiger richtig?
Muss ich mehr Schleifen einsetzen?Gruß, Patrick
-
Sieht nach einem... falschen Forum aus.
Edit: wie wär's mit der Ausgabe mithilfe einer Schleife? Das würde das ganze um 200% lesbarer/attraktiver fürs Auge machen.
-
Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x, bzw. C++11) in das Forum C (C89 und C99) verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Prinzipiell schon mal richtig, wenn auch falsch umgesetzt.
Die Auswertungsreihenfolge von Parametern einer Funktion ist undefiniert,
dein "++" kann also "richtige" Ergebnisse liefern oder falsche.
Auch musst du den Zeiger noch dereferenzieren mittels "*" oder [].void main (void) { float matrix_a [4][5] = {{3, 15, 10, 30, 14}, {16, 12, 12, 24, 8}, {8, 5, 15, 20, 20}, {10, 8, 14, 10, 25}}, matrix_b [1][5] = {{3, 2, 1, 2, 3}}, ges_pkte [1][4] = {{0, 0, 0, 0}}, *p=matrix_a, *g=ges_pkte; int a, k; /*************************************************************************/ /* Berechnen der Ergebnisse und Speichern im Array ges_pkte[][] */ /*************************************************************************/ for ( k=0; k<4; k=k+1) { for ( a=0; a<5; a=a+1) { ges_pkte[0][k] += matrix_a[k][a] * matrix_b[0][a]; } } /*************************************************************************/ /* Ausgabe der Werte der Arrays */ /*************************************************************************/ printf("\n\tDie Punkteverteilung fuer alle 4 Klassen:"); printf("\n"); printf("\n\t Nr der Aufg. 1 2 3 4 5 Gesamt Pkt. "); printf("\n"); printf("\n\t Klasse 8a: %2.0f | %2.0f | %2.0f | %2.0f | %2.0f | %2.0f", p[0],p[1],p[2],p[3],p[4],*g++); p+=5; printf("\n"); printf("\n\t Klasse 8b: %2.0f | %2.0f | %2.0f | %2.0f | %2.0f | %2.0f ", p[0],p[1],p[2],p[3],p[4],*g++); p+=5; printf("\n"); printf("\n\t Klasse 8c: %2.0f | %2.0f | %2.0f | %2.0f | %2.0f | %2.0f ", p[0],p[1],p[2],p[3],p[4],*g++); p+=5; printf("\n"); printf("\n\t Klasse 8d: %2.0f | %2.0f | %2.0f | %2.0f | %2.0f | %2.0f ", p[0],p[1],p[2],p[3],p[4],*g++); p+=5; printf("\n"); printf("\n\t Pkt/Aufg.: %2.0f | %2.0f | %2.0f | %2.0f | %2.0f ", matrix_b[0][0],matrix_b[0][1],matrix_b[0][2],matrix_b[0][3],matrix_b[0][4]); printf("\n\n"); }
-
Mein Hauptfehler war wohl hauptsächlich der Zeigerzusatz [*].
Vielen Dank.