Problem mit "Callog"-Befehl
-
Hallo zusammen,
ich habe vor ein C Programm zur Durchführung einer Matrizenmultiplikation zu schreiben. Bin eigentlich auch schon sehr weit gekommen. Aber leider läuft das Programm noch nicht rund. Es scheint ein Problem mit den "Callog"-Anweisungen zu geben.
Vielleicht findet ihr ja einen Fehler.
Vielen Dank schonmal für eure Hilfe.
#include <stdio.h> #include <stdlib.h> int MatMulti(double* pmatA, double* pmatB, double* pmatC, int m, int n,int l) { int i,j,s; double x=0; for (i=0;i<m;i++) { for (j=0;j<l;j++) { for (s=0;s<n;s++) { x=x+*(pmatA+n*i+s) * * (pmatB+l*s+j); } *(pmatC+i*l+j)=x; x=0; } } return 0; } int main () { int m,n,i,j; int l; //int MatMulti(double*, double*, double*, int, int, int); double *pmatA, *pmatB, *pmatC; printf("Dieses Programm multipliziert zwei Matrizen A und B.\n\n"); //Dimensionseingabe printf("Bitte geben sie die Dimension m x n der Matrix A ein.\n m:\n"); scanf("%i", &m); printf("n:\n"); scanf("%i", &n); printf("Bitte geben sie die Dimension n x l der Matrix B ein. \n n:\n"); int dummy; scanf("%i", &dummy); printf("l:\n"); scanf("%i", &l); if (dummy!=n) { printf("\nSpalten von A muessen selbe Anzahl wie Zeilen von B sein!\n\n"); printf("n:\n"); scanf("%i", &dummy); /*return 0;*/ } //Einlesen von Matrix A pmatA = (double *) calloc(m*n,sizeof(double)); for (i=0;i<m;i++) for(j=0;j<n;j++) { printf("\nEingabe von a%i,%i:", i+1 , j+1 ); scanf("%i", *(pmatA+i*n+j) ); } //Einlesen von Matrix B pmatB = (double *) calloc(n*l,sizeof(double)); for (i=0;i<n;i++) for (j=0;j<l;j++) { printf("\nEingabe von b%i,%i:", i+1, j+1 ); scanf("%i", *(pmatB+i*l+j) ); } //Aufruf des Unterprogramm pmatC = (double *) calloc(m*l,sizeof(double)); MatMulti(pmatA, pmatB, pmatC, m, n, l); //Ausgabe Matrix C printf("\nDas Ergebnis der Matrizenmultiplikation ist folgende Matrix C:\n"); for (i=0;i<m;i++) { for(j=0;j<l;j++) { printf("%i\t\t", *(pmatC+i*l+j) ); } printf("\n\n"); } free(pmatA); free(pmatB); free(pmatC); getchar(); getchar(); }
-
Es ist nicht unbedingt klug, hundert Zeilen Code vorzulegen und nicht zu sagen, was damit nicht stimmt. Wir können dann meistens auch nur raten, ausser wir tun es uns an, das alles zu lesen, zu verstehen, und alle möglichen Fehler auszuschliessen. Das ist meistens sehr zeitraubend. Ich tu mir das jetzt jedenfalls nicht an.
Was mir auffällt, bezogen auf folgende Zeilennummern:
http://cpp.codepad.org/cBfm44cS$ gcc -std=c99 main.c main.c: In function 'main': main.c:68: warning: format '%i' expects type 'int *', but argument 2 has type 'double' main.c:80: warning: format '%i' expects type 'int *', but argument 2 has type 'double' main.c:98: warning: format '%i' expects type 'int', but argument 2 has type 'double'
Da hat er recht. Ob der Segfault damit zusammenhängt? Vielleicht hast du auch irgendwo die Array-Grenzen überschritten, keine Ahnung. Versuch mal, das Problem einzugrenzen.
-
Das Programm soll ja deine Matrix-Multiplikation durchführen.
Die Werte werden auch richtig eingelesen werden.Aber im Ergebnis wird nur Nullen angezeigt.
Die Dimensionseingaben der beiden Matrizen funktioniert ohne Probleme.
-
Die Dimensionseingaben der beiden Matrizen funktioniert ohne Probleme.
Und jetzt rat mal, ob das damit zusammenhängt, dass sich mein Compiler über die Formatstrings und die Typen beschwert hat. Die übliche double-Darstellung entspricht
%f
und nicht%i
.
-
Und m, n, und j sollten in der main() auch was zugewiesen kriegen.
-
+gjm+ schrieb:
Und m, n, und j sollten in der main() auch was zugewiesen kriegen.
Darüber hätte sich mein Compiler schon beschwert.