Rechnen mit Zeigern
-
Hallo vielleicht kann mir jemand weiter helfen ich habe das problem das bei dem Programm zwar die erste Zeile richtig berechnet wird aber die letzten 3 Zeilen stimmen überhaupt nicht und ich bekomme es einfach nicht hin wäre für jeden tip dankbar.
Ach ja die Ergebnisse in zeile 2 müssten 156 sein ist aber 171, zeile 3 149 ist aber 172 und in zeile 4 ist es 155 aber leider hab ich dort 194.
thx schon mal im voraus
#include <stdio.h> #include <conio.h> void main(void) { int matrix_a [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[0]; z_matrix_b = &matrix_b[0][0]; z_ges_pkte = &ges_pkte[0]; int k, a; /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ for(k=0; k<5; k++) for(a=0; a<4; a++) *(z_ges_pkte+a) += *(z_matrix_a+k) * *(z_matrix_b +k+a); /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ z_matrix_a = &matrix_a[0]; z_matrix_b = &matrix_b[0][0]; printf("\t\t\t\t\t\t\ 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"); getch(); } /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
Thx DrSnow
-
DrSnow schrieb:
void main(void)
Das heißt int main(), nicht void main().
DrSnow schrieb:
for(k=0; k<5; k++) for(a=0; a<4; a++) *(z_ges_pkte+a) += *(z_matrix_a+k) * *(z_matrix_b +k+a);
Der letzte Term (z_matrix_b + k + a) arbeitet nicht so wie du willst.
Du willst wahrscheinlich dasselbe wie "matrix_b[a][k]" über Zeiger hinbekommen. Du hast aber nicht bedacht, dass 2-Dimensionale Arrays nur funktionieren, wenn der Compiler die Größe im voraus kennt.
Wenn man also "matrix_b[a][k]" einfach in "z_matrix_b + k + a" umschreiben könnte, warum funktionieren 2-dimensionale Arrays dann nicht dynamisch?
Die Antwort: Du musst +a*5 anstelle +a rechnen. Der Compiler braucht die Arraygröße im voraus, um Zugriffe dieser Art berechnen zu können. Du brauchst die Array-Größe auch.btw:
Über Benennung der Variablen lässt sich streiten, aber die derzeitigen Namen fördern nicht gerade die Übersichtlichkeit und Lesbarkeit.
-
Danke für den Tip.
-
Hallo Dr. Snow ich bin gerade bei der gleichen Aufgabe, bei mir sieht es so aus und funktioniert einwandfrei.
#include <stdio.h> #include <conio.h> void main() { int matrix_a[4][5] = {{ 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 k, a; 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]; for(k=0;k<4;k++) { for(a=0;a<5;a++) { *z_ges_pkt=*z_ges_pkt + *z_matrix_a * *z_matrix_b; z_matrix_a++; z_matrix_b++; } z_matrix_b = &matrix_b[0]; z_ges_pkt++; } z_matrix_a = &matrix_a[0][0]; z_ges_pkt = &ges_pkt[0]; printf("\n\tDie Punkteverteilung fuer alle 4 Klassen:"); printf("\n\n Nr der Aufg. 1 2 3 4 5 Gesamt Pkt.\n\n"); for(k=0;k<4;k++) { printf(" Klasse 8%c ",k+97); for(a=0;a<5;a++) { printf("%4d I ",*z_matrix_a); z_matrix_a++; } printf(" %4d \n\n",*z_ges_pkt); z_ges_pkt++; } printf(" Pkt/Aufg. "); for(a=0;a<=4;a++) { printf(" %4d I",*z_matrix_b); z_matrix_b++; } printf("\n\n\t Bitte druecken Sie eine beliebige Taste"); printf("\n\t"); getch(); }
Ach ja übrigens: Bei mir funktioniert diese behinderte Funktion _settextposition() aus CWI04 Aufgabe E2_4 überhaupt nicht!!
[edit Shade]Bitte CodeTags verwenden[/edit]
-
Thx Keule hatte es schon gelöst wegen der _settextposition kannst mich ja mal an mailen