Matritzenmultiplikation

Eiskaltes Händchen

Grünschnabel
Hallo erstmal.

Ich habe ein Problem und zwar soll ich ein Programm zur Multiplikation von Matritzen schreiben. Allerdings ist meine Begabung in dieser Hinsicht, sagen wir mal, nicht so ausgeprägt.

Angefangen habe ich auch schon, jedoch will das Programm nur symetrische Matritzen miteinander multiplizieren.

Die Aufgabenstellung lautete, alle Matritzen, bis zur große 10 x 10 miteinander multiplizieren zu können, unter der Regel

A (m,n) * B (n,p) = C

Ich bin für jede Antwort dankbar!

Danke schon mal im Vorraus
Code:
#include <iostream.h>

void main()

{
	int i=0,k,j=0,m=0,n=0,a=0;
	int breite1,hoehe1,breite2,hoehe2;
	long int matrix1[9][9];
	long int matrix2[9][9];
	long int matrix3[9][9];

		for (i=0; i<9; i++)
		{
			for (k=0; k<9; k++)
			{
				matrix1[i][k]=1;			
			}
		}

			cout<<"\n\n\nIhre erste Matrix :"<<endl<<endl;

		for (i=0; i<9; i++)
		{
			for (k=0; k<9; k++)
			{
				cout<<matrix1[i][k]<<"  ";			
			}
			cout<<endl;		
		}
		for (i=0; i<9; i++)
		{
			for (k=0; k<9; k++)
			{
				matrix2[i][k]=1;			
			}
		}

			cout<<"\n\n\nIhre zweite Matrix :"<<endl<<endl;

		for (i=0; i<9; i++)
		{
			for (k=0; k<9; k++)
			{
				cout<<matrix2[i][k]<<"  ";			
			}
			cout<<endl;		
		}
		for (i=0; i<9; i++)
		{
			for (k=0; k<9; k++)
			{
				matrix3[i][k]=1;			
			}
		}

			cout<<"\n\n\nIhre dritte Matrix :"<<endl<<endl;

		for (i=0; i<9; i++)
		{
			for (k=0; k<9; k++)
			{
				cout<<matrix3[i][k]<<"  ";			
			}
			cout<<endl;		
		}




		do 
		{
			cout<<"Bitte geben Sie die Breite der ersten Matrix ein:";
			cin>>breite1;
			cout<<"Bitte geben Sie die H"<<char(148)<<"he der ersten Matrix ein:";
			cin>>hoehe1;
			cout<<endl<<"Bitte geben Sie die Breite der zweiten Matrix ein:";
			cin>>breite2;
			cout<<"Bitte geben Sie die H"<<char(148)<<"he der zweiten Matrix ein:";
			cin>>hoehe2;
			
			if ((hoehe1==breite2)||(hoehe2==breite1))
			{
				i=1;
			}
			else
			{
				i=0;
				cout<<"Fehler!"<<endl;
			}
		} while (i==0);					//Schleife, um eine multiplizierbare Matrix einzulesen

		
		cout<<"Bitte geben Sie die Werte f"<<char(129)<<"r die erste Matrix ein :"<<endl;
		for (i=0; i<breite1; i++)			//Erste Matrix wird eingelesen
		{
			for (k=0; k<hoehe1; k++)
			{
				cin>>matrix1[i][k];
			}
		}
		cout<<"Bitte geben Sie die Werte f"<<char(129)<<"r die zweite Matrix ein :"<<endl;
		for (i=0; i<breite2; i++)
		{
			for (k=0; k<hoehe2; k++)
			{
				cin>>matrix2[i][k];			
			}
		}

			cout<<"\n\n\nIhre erste Matrix :"<<endl<<endl;

		for (i=0; i<breite1; i++)
		{
			for (k=0; k<hoehe1; k++)
			{
				cout<<matrix1[i][k]<<"  ";			
			}
			cout<<endl;		
		}

			cout<<"\n\n\nIhre zweite Matrix :"<<endl<<endl;

		for (i=0; i<breite2; i++)
		{
			for (k=0; k<hoehe2; k++)
			{
				cout<<matrix2[i][k]<<"  ";			
			}
			cout<<endl;
		}
		for(i=0;i<breite1;i++)
		{
			for(n=0;n<breite2;n++)
			{
				for(m=0,j=0;m<hoehe2,j<hoehe1;m++,j++)
				{
					a=matrix1[j][i]*matrix2[m][n];	
					a=a+a;
				}
				matrix3[m][j]=a;
				cout<<matrix3[m][j]<<"	";
			}
			cout<<endl<<endl;
		}
}
 
Hi und willkommen im Forum

So ein Progrämmchen durft ich auch schon mal schreiben.
Wo genau liegt jetzt dein Problem?

Prinzipiell kann ich aber sagen, dass die Matrizen nicht symetrisch sein müssen. Die Anzahl der Zeilen von Matrix A muss lediglich der Anzahl der Zeilen von Matrix B entsprechen.


PS: Bitte bearbeite deinen Post und setz den Quelltext in CODE-Tags, um die Lesbarkeit zu verbessern.
 
Mein Problem besteht darin, dass das Programm zwei quadratische Matrizen ohne Probleme berechnet, bei einer 2 x 3 und 3 x 2 matrix jedoch, bekomm ich falsche werte heraus.
 
Code:
		for(i=0;i<breite1;i++)
		{
			for(n=0;n<breite2;n++)
			{
				for(m=0,j=0;m<hoehe2,j<hoehe1;m++,j++)
				{
					a=matrix1[j][i]*matrix2[m][n];	
					a=a+a;
				}
				matrix3[m][j]=a;
				cout<<matrix3[m][j]<<"	";
			}
			cout<<endl<<endl;
		}

Wie bereits erwähnt, müssen die Zeilen von Matrix A den Spalten von Matrix B entsprechen. Es kommt immer eine Quadratische Matrix heraus.
Beim füllen läufst du aber über die Zeilen von A und B. Da die aber nicht identisch sein müssen, macht es boom.
 
Zurück