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