Matrix Multiplikation



  • Hallo,
    ich schreibe ein Programm mit dem man zwei Matritzen welche jeweils in einer Textbox eingelesen werden multiplizieren kann. Das Ergebnis erscheint dann in einer 3. Textbox.

    Nun soll das Programm bzw. die verwendeten Funktionen so allgemein wie möglich sein damit man einach weitere Textboxen ohne großen Aufwand hinzufügen kann.

    Die Frage ist: Wie kann ich beim ersten Durchlauf in doMatrixMultiplication das Array A speichern und im zweiten das Array B ?

    Könnt ihr mir da einen Tipp geben 🙂

    Danke schonmal im Vorraus.

    private: System::Void btnMatrixMul_Click(System::Object^  sender, System::EventArgs^  e) 
    			 {
    				 readoutMatrix(txtBoxMatrixA->Text);
    				 readoutMatrix(txtBoxMatrixB->Text);
    				 doMatrixMultiplication(aMatrix, aMatrix);
    			 }
    
    	private: void readoutMatrix(String^ tb)
    			 {				
    				 String^ sTemp = tb;
    				 String^ sTemp1 = "";
    				 String^ sTemp2 = "";
    				 int iStart = 0, iRowStart, iConvert, iTemp, iIndex = 0;
    				 int iEnd, iRow; 
    				 int iIndexMatrix = 0;
    				 int iSpalten, iZeilen;
    				 iEnd = sTemp->IndexOf(" ",iStart);
    
    				 while(iEnd != -1)
    				 {
    					 sTemp1 = sTemp->Substring(iStart, iEnd-iStart);
    					 iStart = iEnd + 1;
    					 iEnd = sTemp->IndexOf(" ",iStart);
    
    					 bool b = false;
    					 b = sTemp1->Contains("\r\n");
    					 iRowStart = 0;
    
    					 if(b == true)
    					 {
    						 iRow = sTemp1->IndexOf("\r\n", iRowStart);
    						 sTemp2 = sTemp1->Substring(iRowStart, iRow-iRowStart);
    						 iConvert = int::Parse(sTemp2);
    						 FillMatrix(iConvert, iIndexMatrix, iIndex);
    
    						 iIndexMatrix++;
    						 iSpalten = iIndex+1;
    						 iZeilen = iIndexMatrix+1;
    						 iIndex = 0;
    
    						 iRowStart = iRow+2;
    						 sTemp2 = sTemp1->Substring(iRowStart);
    						 iConvert = int::Parse(sTemp2);
    						 FillMatrix(iConvert, iIndexMatrix, iIndex);
    					 }
    
    					 else
    					 {
    						 iConvert = int::Parse(sTemp1);
    						 FillMatrix(iConvert, iIndexMatrix, iIndex);
    					 }
    
    					 iIndex++;
    
    				 }
    
    				 sTemp1 = sTemp->Substring(iStart);
    				 iConvert = int::Parse(sTemp1);
    				 FillMatrix(iConvert, iIndexMatrix, iIndex);
    
    				 aMatrix = gcnew array<float, 2>(iZeilen, iSpalten);
    				 for(int i=0; i<iZeilen; i++)
    				 {
    					 for(int j=0; j<iSpalten; j++)
    					 {
    						 aMatrix[i,j] = aMatrixTemp[i,j];
    					 }
    				 }
    
    			 }
    
    	private: void FillMatrix(int iTemp, int iIndexMatrix, int iIndex)
    			 {
    				 ...
    			 }
    
    	private: void doMatrixMultiplication(array<float, 2>^ A,array<float, 2>^ B)
    			 {
    				 ...
    			 }
    


  • FloKn schrieb:

    Die Frage ist: Wie kann ich beim ersten Durchlauf in doMatrixMultiplication das Array A speichern und im zweiten das Array B ?

    Könnt ihr mir da einen Tipp geben 🙂

    Tip 1: Im richtigen Forum fragen (was du da fabrizierst ist kein C++, sondern C++/CLI)

    Tip 2: Statische Variable in der Funktion, oder der Textbox-Funktion auf geeignete Weise einen bool mitgeben, der festlegt, welches Array gespeichert wird.



  • Ok danke. Wusste das mit dem richtigen Forum nicht so genau. Könntest du den Beitrag verschieben?



  • Dieser Thread wurde von Moderator/in pumuckl aus dem Forum C++ (auch C++0x und C++11) in das Forum C++/CLI mit .NET verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Hmmm ich komm nicht drauf.
    Gibts da vielleicht noch einen Hinweis 🙂



  • Hallo,
    habs jetzt mit einem globalen static zaehler gelöst der bei jedem aufrufen der funktion hochzaehlt. Und dann wird mit if else jeweils eine matrix beschrieben.
    Würde man das so machen oder ist das nicht der elegante weg?

    if(iZaehler == 1)
    				 {
    					 aMatrixA = gcnew array<float, 2>(iZeilen, iSpalten);
    					 for(int i=0; i<iZeilen; i++)
    					 {
    						 for(int j=0; j<iSpalten; j++)
    						 {
    							 aMatrixA[i,j] = aMatrixTemp[i,j];
    						 }
    					 }
    				 }
    				 else if(iZaehler == 2)
    				 {
    					 aMatrixB = gcnew array<float, 2>(iZeilen, iSpalten);
    					 for(int i=0; i<iZeilen; i++)
    					 {
    						 for(int j=0; j<iSpalten; j++)
    						 {
    							 aMatrixB[i,j] = aMatrixTemp[i,j];
    						 }
    					 }
    				 }
    				 else;
    

Anmelden zum Antworten