3*3 Matrix multiplizieren
-
krepWe schrieb:
Mein Code müsste doch so dann funktionieren oder?
Woher sollen wir wissen, wie du den Code jetzt kaputt repariert hast? Zeig her! Wenn er nicht funktioniert, dann müsste er offensichtlich nicht funktionieren.
-
Nach der Vorlesung hab ich den Prof. gefragt, wo mein Fehler liegt und er meinte es sieht eigentlich gut aus und so auf die Schnelle findet er den Fehler nicht.
Aua! Jedem Menschen mit C-Erfahrung sollte sowas (falsche Indexes) eigentlich sofort ins Auge fallen.
-
kritiker2 schrieb:
Nach der Vorlesung hab ich den Prof. gefragt, wo mein Fehler liegt und er meinte es sieht eigentlich gut aus und so auf die Schnelle findet er den Fehler nicht.
Aua! Jedem Menschen mit C-Erfahrung sollte sowas (falsche Indexes) eigentlich sofort ins Auge fallen.
Ich kann mir vorstellen, dass man bei Anblick der Zeilen 7-39 geistig einfach abschaltet und den Fragesteller abwimmelt.
-
so sieht er jetzt aus:
void matrizen(int a[2][2], int b[2][2]){ int erg1=0; int erg2=0; int erg3=0; int erg4=0; int erg5=0; int erg6=0; int erg7=0; int erg8=0; int erg9=0; erg1 = a[0][0]*b[0][0]+a[0][1]*b[1][0]+a[0][2]*b[2][0]; erg2 = a[0][0]*b[0][1]+a[0][1]*b[1][1]+a[0][2]*b[2][1]; erg3 = a[0][0]*b[0][2]+a[0][1]*b[1][2]+a[0][2]*b[2][2]; erg4 = a[1][0]*b[0][0]+a[1][1]*b[1][0]+a[1][2]*b[2][0]; erg5 = a[1][0]*b[0][1]+a[1][1]*b[1][1]+a[1][2]*b[2][1]; erg6 = a[1][0]*b[0][2]+a[1][1]*b[1][2]+a[1][2]*b[2][2]; erg7 = a[2][0]*b[0][0]+a[2][1]*b[1][0]+a[2][2]*b[2][0]; erg8 = a[2][0]*b[0][1]+a[2][1]*b[1][1]+a[2][2]*b[2][1]; erg9 = a[2][0]*b[0][2]+a[2][1]*b[1][2]+a[2][2]*b[2][2]; int arr[2][2]; arr[0][0]=erg1; arr[0][1]=erg2; arr[0][2]=erg3; arr[1][0]=erg4; arr[1][1]=erg5; arr[1][2]=erg6; arr[2][0]=erg7; arr[2][1]=erg8; arr[2][2]=erg9; int i,j; for(i=0; i<3; i++){ for(j=0; j<3; j++){ printf("\t%d\t", arr[i][j]); } printf("\n"); } } int main() { int ma1 [2][2] ={ {1,2,3}, {1,2,3}, {1,2,3}}; int ma2 [2][2] ={ {1,2,3}, {1,2,3}, {1,2,3}}; matrizen(ma1,ma2); }
da wir erst seit 2 Monaten C lernen - also noch totale Anfänger sind, sollen wir es so programmieren. Haben z.B. erst diese Woche in der Vorlesung (vorher nur als Crashkurs) die ganzen verschiedenen/verschachtelten Schleifen besprochen.
Ich würde es halt erstmal gerne so zum laufen bringen und dann kann ich mich immer noch mit irgendwelchen Schleifen etc. rumschalgen.
-
Wie, erst seit 2 Monaten? Nach 2 Monaten sollte man schon viel weiter sein.
Die Indizes fangen bei 0 an, aber die Größe muss schon richtig sein. Also, immer noch a[3][3] und nicht a[2][2].
-
Jetzt passts - danke
naja wenn man pro Woche nur eine Vorlesung hat, die dann auch noch 3 mal ausgefallen ist(Ostermontag, Krankheit, Dienstreise) und man am Anfang nur so sinnloses Zeug wie interne Zahlendarstellung im Rechner etc. bzw. einen "Crashkurs" indem alle Themen nur in ein paar Sätzen anschnitten werden, ist man jetzt halt noch nicht weiter
-
Funktioniert es nun? Heißer Tipp: Versuch unbedingt, das Programm noch einmal mit Schleifen zu schreiben, damit du auch was lernst. So wie es derzeit ist, ist die Aufgabenstellung zwar technisch gesehen erfüllt, aber das Lernziel wurde nicht erreicht.
-
Ja jetzt Funktioniert es.
Werde es auch mit Schleifen probieren
-
Also ich habe es jetzt mal probiert aber absolut keine Ahnung wie das hätte funktionieren sollen, deswegen hab ich mal gegoogelt und folgendes gefunden:
for(x=0;x<zeilen;x++){ for(j=0;j<spalte;j++){ for(y=0;y<spalten;y++){ result += matrixA[x][y] * matrixB[y][j]; } matrixC[x][j] = result; } }
bei den 3 verschachtelten for-Schleifen blicke ich aber einfach nicht mehr durch.
Ich werde das jetzt sein lassen und es ggf. in ein paar Monaten, wenn ich mehr Übung habe erneut versuchen.
-
Man sollte schon verstanden haben wie eine Matrizenmultiplikation funktioniert.
Ein paar
printf
eingestreut.for(x=0;x<zeilen;x++){ for(j=0;j<spalte;j++){ result = 0; printf("arr[%d][%d] =",x,j); for(y=0;y<spalten;y++){ result += A[x][y] * B[y][j]; printf(" A[%d][%d]*B[%d][%d] +",x,y,y,j); } arr[x][j] = result; printf(";\n"); } }
Vergleich mal die Ausgabe mit deiner Berechnung
ungetestet