Dodawanie macierzy

0

Witam, napisałem program sumujący macierze, jednak radzi on sobie TYLKO z macierzami kwadratowymi...
Chciałbym, aby sumował również macierze o różnej liczbie wierszy i kolumn.

Oto kod

procedure TForm1.Button1Click(Sender: TObject);
var
  Matrix : array of array of Real;
  x,y : Integer;
  w1,k1 : Integer;
begin
w1 := form1.SpinEdit1.Value;
k1 := form1.SpinEdit2.Value;

setlength(Matrix,w1);
for x:= Low(Matrix) to High(Matrix) do setlength(Matrix[x],k1);

for x := Low(Matrix) to High(Matrix) do
   for y := Low(Matrix[0]) to High(Matrix[0]) do
StringGrid3.cells[x,y]:=IntTostr(strToInt(StringGrid1.cells[x,y]) + strToInt(StringGrid2.Cells[x,y]));


end;

Prosiłbym o jakieś wskazówki, lub zedytowanie kodu.
Pozdrawiam

0

imho wszystko jest ok, jedziesz po kolumnach dodając kolejne elementy wierszy, pętle po właściwych wymiarach. powinno działać dla dowolnych macierzy, jeśli tylko wymiary obu się zgadzają.

rozmiar StringGrid3.cells może za mały?

0

Stringgrid3 ma takie same wymiary jak stringgrid 1 i 2, więc to nie to.

Gdy liczba kolumn nie równa się liczbie wierszy, program się wysypuje i wyskakuje error:
"Project dodawanie.exe raised exception class EConvertError with message ""is not valid integer value"...

0

1 - po co Ci Matrix, skoro z niego nie korzystasz?
2 - dla pewności proponowałbym od razu ustawiać wymiary w takiej kolejności jak będziesz używał

SetLength(Matrix,w1,k1); // tak też można ;)

3 - ten kod nie generuje błędów:

procedure TForm1.Button1Click(Sender: TObject);
var
  //Matrix : array of array of Real;
  x,y : Integer;
  w1,k1 : Integer;
begin
  w1 := StringGrid1.ColCount;
  k1 := StringGrid1.RowCount;
  //SetLength(Matrix,w1,k1);
  for x := 0 to w1-1 do
    for y := 0 to k1-1 do
      StringGrid3.cells[x,y]:=IntTostr(strToInt(StringGrid1.cells[x,y]) + strToInt(StringGrid2.Cells[x,y]));
end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1