Rechnen mit Matrizen



  • Hallo zusammen,

    ich habe folgende Aufgabenstellung erhalten:

    http://www.bilder-upload.eu/thumb/57ee18-1420469972.png

    Und zwar habe ich folgende Probleme dabei:

    1. beim Versuch des Kompilierens erhalte ich folgenden Fehler:

    error: request for member ‘add’ in ‘mat’, which is of non-class type ‘Matriz()’
    case 'a': mat.add();

    Obwohl add(); ja eine Memberfunktion der Klasse Matriz ist, was sich dann meinen Kenntnissen entzieht... 😕

    Nun die letzten beiden Probleme:

    ich gehe mal davon aus, dass smult und add problemlos funktionieren sollten so wie ich das sehe,

    nun bleibt mir nur noch die Frage, in wiefern übergebe ich meine Ergebnis-Matrix an die Funktion ausgabe();

    UND ich brauche einen hilfreichen Tipp bei der Multiplikation der zwei Matrizen, da ich dort mit einer einfachen Zuweisung an stelle [i][j] nicht weiterkomme, denn die Matrix kann ja beliebig groß sein...

    Anbei mal meine main.cpp & Matriz.cpp ( sorry falls etwas überlang, achja und das extra mit den eigenen Klassen etc MÜSSEN wir so machen )

    main.cpp:

    #include <iostream>
    #include "Matriz.h"
    using namespace std;
    
    int main()
    {
    
    	char c;
    	Matriz mat();
    	cout << "Welche Rechenoperation möchten Sie ausführen?"<< endl;
    	cout << " a) Addition s) SMultiplikation m) Multiplikation" << endl;
    	cin >> c;
    	switch(c)
    	{
    		case 'a': mat.add();
    			  break;
    		case 's': mat.einlesens();
    			  mat.smult();
    			  break;
    		case 'm': mat.mult();
    			  break;
    		default: break;
    	}
    }
    

    Matriz.cpp

    #include "Matriz.h"
    #include <iostream>
    using namespace std;
    
    int Matriz::einlesens()
    {
    
    }
    
    int Matriz::mult()
    {
    	cout << " Größe der Matrix m x n angeben : " << endl;
    	cin >> m;
    	cout << " x " << endl;
    	cin >> n;
    	int matrix [m][n];
    	cout << " Werte eingeben für Matrix 1 : " << endl;
    	for(int j=0;j<n;j++)
    	{
    		for(int i=0;i<m;i++)
    		{
    			cin >> eingabe;
    			matrix[i][j]=eingabe;
    		}
    	}
    	cout << " Zeilen der Matrix2 eingeben : " << endl;
    	cin >> l;
    	int matrix2 [n][l];
    	cout << " Werte eingeben für Matrix 1 : " << endl;
    	for(int j=0;j<l;j++)
    	{
    		for(int i=0;i<n;i++)
    		{
    			cin >> eingabe;
    			matrix2[i][j]=eingabe;
    		}
    	}
    	int matrix3[m][l];
    	for(int j=0;j<l;j++)
    	{
    		for(int i=0;i<m;i++)
    		{
    			matrix3[i][j]=
    		}
    	}
    
    }
    
    int Matriz::smult()
    {
    	cout << " Skalar eingeben : " << endl;
    	cin >> skalar;
    	cout << " Größe der Matrix m x n angeben : " << endl;
    	cin >> m;
    	cout << " x " << endl;
    	cin >> n;
    	int matrix [m][n];
    	cout << " Werte eingeben : " << endl;
    	for(int j=0;j<n;j++)
    	{
    		for(int i=0;i<m;i++)
    		{
    			cin >> eingabe;
    			matrix[i][j]=eingabe;
    		}
    	}
    	for(int j=0;j<n;j++)
    	{
    		for(int i=0;i<m;i++)
    		{
    			matrix[i][j]=skalar * matrix[i][j];
    		}
    	}
    }
    
    int Matriz::add()
    {
    	cout << " Größe der Matrix m x n angeben : " << endl;
    	cin >> m;
    	cout << " x " << endl;
    	cin >> n;
    	int matrix [m][n];
    	cout << " Werte eingeben für Matrix 1 : " << endl;
    	for(int j=0;j<n;j++)
    	{
    		for(int i=0;i<m;i++)
    		{
    			cin >> eingabe;
    			matrix[i][j]=eingabe;
    		}
    	}
    	int matrix2 [m][n];
    	cout << " Werte eingeben für Matrix 2 : " << endl;
    	for(int j=0;j<n;j++)
    	{
    		for(int i=0;i<m;i++)
    		{
    			cin >> eingabe;
    			matrix2[i][j]=eingabe;
    		}
    	}
    	for(int j=0;j<n;j++)
    	{
    		for(int i=0;i<m;i++)
    		{
    			matrix[i][j]=matrix[i][j]+matrix2[i][j]
    		}
    	}
    }
    
    int Matriz::ausgabe()
    {
    	for(int j=0;j<n;j++)
    	{
    		for(int i=0;i<m;i++)
    		{
    			cout << matrix[i][j];
    		}
    		cout << endl;
    	}
    }
    


  • Die Klammern müssen weg:

    Matriz mat;
    

    Mit Klammern ist das sonst eine Funktionsdeklaration.



  • Okay danke, das funktioniert schonmal soweit, bleiben nur noch die anderen beiden Probleme, bei der Multiplikation habe ich echt keinen Plan,

    und bei der Ausgabe muss ich irgendwie den Array int matrix nach der Berechnung zu int Matriz::ausgabe(); bekommen....



  • Sagt dir der Begriff Membervariable etwas? Dann macht die Klasse auch viel mehr Sinn.



  • Zur Matrixmultiplikation s. Matrizenmultiplikation, d.h. Aufsummierung der übereinandergelegten Spalten- und Zeilenvektoren.

    Und zur Ausgabe entweder Membervariablen oder Funktions-Rückgabewert/-Parameter benutzen (überleg dir mal was das 'int' bei deinen Matrixfunktionen sein soll).



  • Habe das jetzzt auch mit einem MemberArray gemacht, blöd ist halt nur dass ich in der Klasse dieses MemberArray nicht beliebig groß machen kann...

    Wie genau die Matrizenmultiplikation funktioniert ist mir auch klar, nur wie ich es rechnerisch ins Programm bringe, war da eher das Problem.



  • Nunja also dass mit der Matrizenmultiplikation ist mir immernoch ein Rätsel, ich weiß zwar wie es an sich funktioniert aber nicht wie ich stück für stück der zeile mit der spalte multipliziere und dann addiere...



  • Schau dir den Pseudocode auf der Wiki-Seite an (man kann den Code auch noch etwas vereinfachen, so daß man nicht die ganze Matrix vorher nullen muss, in dem man eine lokale Variable benutzt).


Anmelden zum Antworten