Matrixmultiplikation



  • So, vorneweg habe ich schon einiges Durchsucht und bisher nichts auf mein Problem gefunden. Allerdings konnte ich einige kleine Fehler im Programm durch einige Suchergebnisse tilgen. Allerdings stecke ich jetzt bei folgendem Problem:

    Ich will zwei Matrizen einlesen und Multiplizieren. Das Programm funktioniert bisher auch recht gut, allerdings nur wenn ich meine Matrizen auf 1x1 festlege, sobald es 2x2 oder höher wird, stürzt das Programm plötzlich bei der Eingabe ab! Wieso ist mir ein Rätsel, da es bis vor kurzem noch funktionierte, jedoch dann immer falsche Ergebnisse lieferte.
    Das ganze ist im Visual Studio geschrieben, falls das was hilft:

    # include <stdio.h>
    # include <conio.h>
    # include <stdlib.h>
    
    void eingeben(unsigned **a, unsigned n, unsigned mat_id);
    void mult(unsigned **a, unsigned **b, unsigned **c, unsigned n);
    void ausgabe(unsigned **a, unsigned n);
    
    main()
    {
    	unsigned **mat_a = NULL, **mat_b = NULL, **mat_c = NULL;
    	unsigned i;
    	unsigned len;
    
    	printf("Programm zur Multiplikation zweier quadratischer Matrizen.\n");
    
    	printf("\nGeben Sie die Dimension der Matrix ein: "); // Einlesen der Dimension
    	scanf("%d", &len);
    
    	mat_a = (unsigned**) malloc(len * sizeof(unsigned)); // Erstellen der dynamischen Matrix[x][x]
    	for(i = 0; i < len; i++)
    		mat_a[i] = (unsigned*) malloc(len * sizeof(unsigned));
    
    	mat_b = (unsigned**) malloc(len * sizeof(unsigned));
    	for(i = 0; i < len; i++)
    		mat_b[i] = (unsigned**) malloc(len * sizeof(unsigned));
    
    	mat_c = (unsigned**) malloc(len * sizeof(unsigned));
    	for(i = 0; i < len; i++)
    		mat_c[i] = (unsigned*) malloc(len * sizeof(unsigned));
    
    	/* Einlesen der beiden Matrizen */
    	eingeben(&mat_a, len, 1); 
    	eingeben(&mat_b, len, 2);
    
    	/* Multiplikation */
    	mult(&mat_a, &mat_b, &mat_c, len); 
    
    	/* Ausgabe des Ergebnisses */
    	ausgabe(&mat_c, len);
    
    	_getch();
    }
    
    void eingeben(unsigned **a, unsigned n, unsigned mat_id)
    {
    	unsigned i, j;
    
    	printf("\nGeben Sie die Werte der %d. Matrix ein: \n", mat_id);
    	for(i = 0; i < n; i++)
    	{
    		printf(" %2d. Zeile: ", (i + 1)); // Zeilenweise Eingabe der Matrixwerte
    		for(j = 0; j < n; j++)
    			scanf("%d", & a[i][j]);
    	}
    }
    
    void mult(unsigned **a, unsigned **b, unsigned **c, unsigned n)
    {
    	unsigned i, j;
    
    	for(i = 0; i < n; i++)
    		for(j = 0; j < n; j++)
    			c[i][j] = a[i][j] * b[i][j];
    }
    
    void ausgabe(unsigned **a, unsigned n)
    {
    	unsigned i, j;
    
    	printf("\n\n --- Matrix ---\n");   // Ausgabe der Matrix
    	for(i = 0; i < n; i++)
    	{
    		printf("\n |");
    		for(j = 0; j < n; j++)
    			printf(" %6d", a[i][j]);
    		printf(" |");
    	}
    }
    

    Habe mit dem Debugger den Fehler auf die Eingabe der Matrixwerte in der Funktion eingeben() innerhalb der Schleife (Zeile 50 - 55) begrenzen können, komme aber nicht weiter. Vielleicht weiß jemand was ich ändern sollte.



  • Hat sich erledigt, habe das Problem gefunden 😃

    Vektoren ohne & übergeben...


Log in to reply