Einzelnen Beitrag anzeigen

Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

AW: Matrix multiplikation, help

  Alt 5. Jun 2012, 19:47
Ich würde das ganze in eine Funktion auslagern.
Dann für alles drei for Schleifen benutzen.
Zudem sind die Bezeichner i, i2, i3 ... unkonventionell. Normalerweise nimmt man i, j, k, ...
aber hier kann man auch row und col verwenden, dann ist das auch besser lesbar

Also mit den Änderungen:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender : TObject);
var
   I : Integer;
   I2: Integer;

   Ergebnis : Double;
   I3 : Integer;
begin
                        
   GridToArray(StringGrid1, MatrixData.ValueArray1);
   GridToArray(StringGrid2, MatrixData.ValueArray2);

   // TODO: Prüfen ob Multiplikation möglich
   
   // Größe berechnen
   Rows := Length(MatrixData.ValueArray1);
   Cols := Length(MatrixData.ValueArray2[0]);
   
   // einfach erstmal groß genug machen...
   // Nö, lieber direkt "richtig machen"
   SetLength(MatrixData.ResultArray, Rows, Cols);

   for row := 0 to Rows-1 do
   begin
    for col := 0 to Cols-1 do
     begin
       Ergebnis := 0;
       for i := 0 to High(MatrixData.ValueArray2) do // Grenze verändert
       begin
         Ergebnis := Ergebnis + (MatrixData.ValueArray1[col, i] * MatrixData.ValueArray2[i, col]); // Siehst du den Fehler?
       end;
       MatrixData.ResultArray[row, col] := Ergebnis;
     end;
   end;
end;
Der fehler sollte jetzt einfacher zu erkennen sein
  Mit Zitat antworten Zitat