
27.03.2014, 17:05
|
 |
Новичок
|
|
Регистрация: 03.02.2011
Сообщения: 79
Репутация: -2306
|
|
Попробуй так.
Код:
procedure TThread2.Execute;
var
i, j, k, s, n: integer;
begin
n:=3;
SetLenGth(a2,n,n);
for i:=0 to n-1 do
for j:=0 to n-1 do
a2[i,j]:= Random(100);
SetLenGth(b2,n,n);
for i:=0 to n-1 do
for j:=0 to n-1 do
b2[i,j]:= Random(100);
SetLenGth(res2,n,n);
for I := 0 to n-1 do //умножение
for j := 0 to n-1 do
begin
s:=0;
for k := 0 to n-1 do
s:=s+a2[k,i]*b2[j,k];
res2[j,i]:=s;
end;
end;
Или же тот же Х, только вид с боку.
Код:
procedure TThread2.Execute;
var
i, j, k, s, n: integer;
begin
n:=3;
SetLenGth(a2,n,n);
for i:=1 to n do
for j:=1 to n do
a2[i-1,j-1]:= Random(100);
SetLenGth(b2,n,n);
for i:=1 to n do
for j:=1 to n do
b2[i-1,j-1]:= Random(100);
SetLenGth(res2,n,n);
for I := 1 to n do //умножение
for j := 1 to n do
begin
s:=0;
for k := 1 to n do
s:=s+a2[k-1,i-1]*b2[j-1,k-1];
res2[j-1,i-1]:=s;
end;
end;
И здесь огрехи имеются.
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
T1 : TThread1;
T2 : TThread2;
i,j,n,n2:integer;
begin
T1 := TThread1.Create(True);
T2 := TThread2.Create(True);
T1.Resume;
T2.Resume;
T1.WaitFor;
T2.WaitFor;
n:=3;
n2:=4;
for i:=0 to n2-1 do
for j:=0 to n2-1 do
StringGrid4.Cells[j,i]:=IntToStr(T1.a[i,j]); //вывод случайной матрицы
for i:=0 to n2-1 do
for j:=0 to n2-1 do
StringGrid5.Cells[j,i]:=IntToStr(T1.res[i,j]); //вывод транспонированной
for I := 0 to n-1 do
for j := 0 to n-1 do
stringgrid1.cells[i,j]:=IntToStr(T2.a2[i,j]); //вывод случайной матрицы
for I := 0 to n-1 do
for j := 0 to n-1 do
stringgrid2.cells[i,j]:=IntToStr(T2.b2[i,j]); //вывод случайной матрицы
for I := 0 to n-1 do
for j := 0 to n-1 do
stringgrid3.cells[i,j]:=IntToStr(T2.res2[i,j]); //вывод произведения матриц
T1.Free;
T2.Free;
end;
У динамических массивов индексация начинается с нуля.
Вот тока не уточнял на счёт StringGrid.
В StringGrid индексация начинается с 0 или с 1 ?
|