
26.03.2014, 21:55
|
Прохожий
|
|
Регистрация: 03.03.2014
Сообщения: 8
Версия Delphi: Delphi 7
Репутация: 10
|
|
might not have been initialized
Прога в два потока умножает и транспонирует матрицы(транспонирование вроде получается) зависает на умножении в строке 41 : a2[i,j]:= Random(100);
Код:
TThread1 = class(TThread)
a,res : array of array of integer;
procedure Execute; override;
end;
TThread2 = class(TThread) //умножение
a2,b2,res2 : array of array of integer;
procedure Execute; override;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TThread1.Execute;
var
n,i,j:integer;
begin
n:=4;
Setlength(a,n,n);
Setlength(res,n,n);
for i:=0 to n-1 do
for j:=0 to n-1 do
a[i,j]:= Random(100);
//транспонирование
for i:=0 to n-1 do
for j:=0 to n-1 do
res[j,i]:=a[i,j];
end;
procedure TThread2.Execute;
var
i, j, k, s, n: integer;
begin
n:=3;
for i:=1 to n do
for j:=1 to n do
a2[i,j]:= Random(100);
for i:=1 to n do
for j:=1 to n do
b2[i,j]:= Random(100);
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,i]*b2[j,k];
res2[j,i]:=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 := 1 to n do
for j := 1 to n do
stringgrid1.cells[i,j]:=IntToStr(T2.a2[i,j]); //вывод случайной матрицы
for I := 1 to n do
for j := 1 to n do
stringgrid2.cells[i,j]:=IntToStr(T2.b2[i,j]); //вывод случайной матрицы
for I := 1 to n do
for j := 1 to n do
stringgrid3.cells[i,j]:=IntToStr(T2.res2[i,j]); //вывод произведения матриц
T1.Free;
T2.Free;
end;
|