addition von 2 matrizen (mit Arrays)



  • Ich bin neu hier und noch etwas unbeholfen.
    Die Aufgabe lautete: Schreiben Sie ein Programm, in das Matrizen eingegeben und als zweidimensionale Arrays abgespeichert werden k¨onnen.
    Erweitern Sie das Programm um die Funktion matrizenaddition. Die
    Funktion soll zwei Matrizen gleichen Typs addieren. Falls die zu addierenden Matrizen nicht vom gleichen Typ sind, soll das Programm eine Fehlermeldung ausgeben. Ansonsten werden die Matrizen addiert und das Ergebnis ausgegeben.

    Bis zu dem Einlesen und dem Ausgeben der beiden Matrizen hat auch noch alles funktioniert. Die addition macht mir jedoch Probleme. Habe mal versucht eine Funktion zu Programmieren jedoch ist mir dass nicht so wirklich gelungen.

    Hier mein Programm:
    ---------------------------------------------------------------------------

    #include <iostream>
    #include <cstdlib>
    #include <cmath>
    using namespace std;
    
    void werteEingabe(int meinMat['z']['c'], int a, int b);
    void wertAusgabe(int meinMat['z']['c'], int a, int b);
    
    void werteEingabe2(int meinMat2['x']['y'], int a, int b);
    void wertAusgabe2(int meinMat2['x']['y'], int a, int b);
    
    void addition(int meinMat['z']['c'], int meinMat2['x']['y'],int a,int b,int c,int d);
    
    void main()
    {
    	int c, z;
    	cout<<"Wie viele Zeilen Matrix1:\t";
    	cin>>z;
    	cout<<"Wie viele Spalten Matrix1:\t";
    	cin>>c;
    	int meinMat['z']['c'];
    	werteEingabe(meinMat,z,c);
    	wertAusgabe(meinMat,z,c);
    
    	int x, y;
    	cout<<"Wie viele Zeilen Matix 2:\t";
    	cin>>x;
    	cout<<"Wie viele Spalten Matrix 2:\t";
    	cin>>y;
    	int meinMat2['x']['y'];
    	werteEingabe2(meinMat2,x,y);
    	wertAusgabe2(meinMat2,x,y);
    
    	addition(meinMat,meinMat2,z,c,x,y);
    
    	system("PAUSE");
    }
    
    void werteEingabe(int meinMat['z']['c'], int a, int b)
    {
    	for(int i=0; i<a; i++)		//for-Schleife für die Zeilen
    	{
    		cout<<"Werte der "<<i+1<<". Zeile"<<endl;
    		for(int j=0; j<b; j++)	//for-Schleife für Spalten
    		{
    			cin>>meinMat[i][j];
    
    		};						//ende j-Schleife
    		cout<<endl;				//Zeilensprung
    	};
    };
    
    void wertAusgabe(int meinMat['z']['c'], int a, int b)
    {
    	cout<<"Matrix 1 :"<<endl;
    	for(int i=0; i<a; i++)		//for-Schleife für die Zeilen
    	{
    		for(int j=0; j<b; j++)	//for-Schleife für Spalten
    		{
    			cout<<meinMat[i][j]<<"\t";
    		};						//ende j-Schleife
    		cout<<endl;				//Zeilensprung
    	};
    };
    
    void werteEingabe2(int meinMat2['x']['y'], int a, int b)
    {
    	for(int i=0; i<a; i++)		//for-Schleife für die Zeilen
    	{
    		cout<<"Werte der "<<i+1<<". Zeile"<<endl;
    		for(int j=0; j<b; j++)	//for-Schleife für Spalten
    		{
    			cin>>meinMat2[i][j];
    
    		};						//ende j-Schleife
    		cout<<endl;				//Zeilensprung
    	};
    };
    
    void wertAusgabe2(int meinMat2['x']['y'], int a, int b)
    {
    	cout<<"Matrix 2 : "<<endl;
    	for(int i=0; i<a; i++)		//for-Schleife für die Zeilen
    	{
    		for(int j=0; j<b; j++)	//for-Schleife für Spalten
    		{
    			cout<<meinMat2[i][j]<<"\t";
    		};						//ende j-Schleife
    		cout<<endl;				//Zeilensprung
    	};
    };
    
    void addition(int meinMat['z']['c'], int meinMat2['x']['y'],int a,int b,int c,int d,int e,int f)
    {
    	if(a!=c || b!=d)
    	 cout<<"Nicht möglich die Matrizen zu addieren"<<endl;
    	else
    		e==a==c;
    	f==b==d;
    	int meinMat3['e']['f']={0};
    
    	for(int i=0;i<e;i++)
    	{
    		for(int j=0;j<f;j++)
    		{
    			meinMat3['e']['f']=meinMat['z']['c']+meinMat2['x']['y'];
    		}
    	}
    	cout<<meinMat3['e']['f']<<endl;
    };
    

    ---------------------------------------------------------------------------

    Hoffe mir kann jemand einen Tipp geben bzw die lösung verraten wie ich die Funktion Matrizenaddition angehe.

    Vielen Dank im vorraus an alle die, die sich durch mein Programm kämpfen 🙂

    ~edit durch SeppJ: Codetags eingefügt.~



  • meinMat['z']['c']

    Zeichenkonstanten als Indizes? 😮 Sowas hab ich ja noch nie gesehen, wo hast du das denn her? Da brauch ich auch nicht weiterzulesen um zu sehen, dass es daran scheitert.


  • Mod

    Bashar schrieb:

    Da brauch ich auch nicht weiterzulesen um zu sehen,

    A propos Lesen: Wie du siehst, phil123, ist dein Beitrag absolut unlesbar, da du viel Code ohne Formatierung postest. Beziehungsweise, du siehst es nicht mehr, da ich es dieses eine Mal für die korrigiert habe. Benutze in Zukunft bitte die Code-Tags für Programmtexte. Zu finden unter dem Editorfenster, unter den Smileys. Sonst lesen viele Leute deine Beiträge einfach gar nicht.



  • hmm... also besser mit konstanten Werten Arbeiten oder was ? Wenn ich die Funktion addition weg lasse funktioniert aber alles so wie es ist, also das einlesen und ausgeben der Matrizen.
    wie würde man denn an so eine Funktion zu addition herangehen ?
    Danke für die schnelle Antwort:)



  • phil123 schrieb:

    Die Aufgabe lautete: Schreiben Sie ein Programm, in das Matrizen eingegeben und als zweidimensionale Arrays abgespeichert werden k¨onnen.
    Erweitern Sie das Programm um die Funktion matrizenaddition. Die
    Funktion soll zwei Matrizen gleichen Typs addieren. Falls die zu addierenden Matrizen nicht vom gleichen Typ sind, soll das Programm eine Fehlermeldung ausgeben. Ansonsten werden die Matrizen addiert und das Ergebnis ausgegeben.

    Auweia. Die Wortwahl der Aufgabenstellung ist schon komisch. Ich hoffe für dich, dass die, die dir C++ beinringen wollen, auch C++ können und nicht nur so tun als ob.

    phil123 schrieb:

    void main()
    {
    	int c, z;
    	cout<<"Wie viele Zeilen Matrix1:\t";
    	cin>>z;
    	cout<<"Wie viele Spalten Matrix1:\t";
    	cin>>c;
    	int meinMat['z']['c'];
    }
    

    Sorry, das sieht nicht nach Programmieren durch Nachdenken sondern nach Programmieren durch Rumprobieren aus. Das ist mit die schlechteste Strategie für das Lernen von C++. 'z' und 'c' sind Zeichenkonstanten, die in Abhängigkeit des "Execution Character Sets" bestimmte Werte haben. Bei Dir wahrscheinlich (wie so oft ASCII): 122 und 99. Du würdest hier also ein Array von 122 Arrays von 99 ints erzeugen. Also nicht wirklich das, was du willst.

    phil123 schrieb:

    meinMat3['e']['f']
    

    Das ist -- ASCII angenommen -- immer äquivalent zu meinMat3[101][102], ganz egal was irgendwo in den Variablen e und f steht, falls die überhaupt gibt; denn e ist nicht dasselbe wie 'e'. Letzteres ist eine Zeichenkonstante!

    Was du über rohe C-Arrays wissen musst: Die Dinger sind dumm und müssten eine zur Compilierzeit festgelegte größe haben. Bevor du mit new[] und delete[] spielst, solltest Du dich echt mit std::vector mal auseinandersetzen. Und wenn ihr das noch nicht im Unterricht gehabt habt, dann kann man wirklich behaupten, dass Dein Kurs nicht viel taugt. Sorry.



  • Mit std::vector kann ich jetzt spontan nichts mit Anfangen. Mir ist klar, es wird bestimmt bessere,schnellere methoden geben die wir evtl. zu nem späteren Zeitpunkt behandeln werden. Im Moment sind aber beim Thema Array und sollen es (davon geh ich mal aus) in der weise lösen wie ich das ding Programmiert hab. Dass ich zur definierung des Arrays keine "Zeichenkonstanten" benutzen soll hab ich verstanden.
    Also muss ich die Arrays vorher mit constanten Zahlenwerten definieren, die möglichst groß sind um dann später vom benutzer die tatsächliche größe des Arrays einlesen zu lassen oder ?



  • schehlphilipp@web.de schrieb:

    Mit std::vector kann ich jetzt spontan nichts mit Anfangen. Mir ist klar, es wird bestimmt bessere,schnellere methoden geben die wir evtl. zu nem späteren Zeitpunkt behandeln werden. Im Moment sind aber beim Thema Array und sollen es (davon geh ich mal aus) in der weise lösen wie ich das ding Programmiert hab. Dass ich zur definierung des Arrays keine "Zeichenkonstanten" benutzen soll hab ich verstanden.
    Also muss ich die Arrays vorher mit constanten Zahlenwerten definieren, die möglichst groß sind um dann später vom benutzer die tatsächliche größe des Arrays einlesen zu lassen oder ?

    Besser ein eindimensionales Array benutzen und die Zweidimensionalität selber hineinrechnen.



  • hm schön und gut, jedoch hilft mir das nicht wirklich weiter da die aufgabe heißt: Schreiben Sie ein Programm, in das Matrizen eingegeben und als zweidimensionale Arrays abgespeichert werden k¨onnen.



  • phil123 schrieb:

    hm schön und gut, jedoch hilft mir das nicht wirklich weiter da die aufgabe heißt: Schreiben Sie ein Programm, in das Matrizen eingegeben und als zweidimensionale Arrays abgespeichert werden k¨onnen.

    Dann wäre die Lösung, Du baust Dir erst eine Klasse, die nur zweidimensinale dynamische Arrays darstellt. Und dann die Klasse für Matrizen, die erstere Klasse benutzt.
    Das wäre sogar professionelles Design.

    Eigentlich muss herausgefunden werden, was der Aufgabensteller sich vorgestellt hat, und das kannst nur Du, wir kennen seinen Unterricht nicht. So wie sie dasteht, ist die Aufgabe Unfug.



  • phil123 schrieb:

    hm schön und gut, jedoch hilft mir das nicht wirklich weiter da die aufgabe heißt: Schreiben Sie ein Programm, in das Matrizen eingegeben und als zweidimensionale Arrays abgespeichert werden k¨onnen.

    Das Problem hierbei ist ja das du keine genau Größe hast. Also musst du dir überlegen wie du das dynamisch hin bekommst.
    Dazu sollen da ja werte rein kommen und nicht einfach nur die Größe deiner Matrix festgelegt werden.
    Also wenn du nun schreibst matrix[8][8] können da ja nun 64 Zeichen/ Zahlen eingelesen werden. Das fehlt bei dir ja auch noch komplett.
    Keine leichte Aufgabe meiner Meinung nach. Vielleicht solltest du erstmal mit festen Größen arbeiten und in die erstmal Werte einlesen und addieren. Dann kannst du ja immer noch die dynamische Größe einbauen.


Anmelden zum Antworten