Показать сообщение отдельно
  #1  
Старый 19.04.2019, 11:10
Anthony_1998 Anthony_1998 вне форума
Прохожий
 
Регистрация: 11.04.2019
Сообщения: 4
Версия Delphi: Delphi7
Репутация: 10
По умолчанию Работа с матрицами в delphi7

Здравствуйте. Нужна помощь с задачей: Дана действительная матрица размерности (n*n) .Если среднее арифметическое элементов стоящих над главной диагональю больше суммы элементов стоящих на побочной диагонали, то поменять местами строки и столбцы (транспонировать матрицу). В противном случае матрицу оставить без изменения.
У меня, если арифметическое элементов стоящих над главной диагональю меньше суммы элементов стоящих на побочной диагонали, то матрица остаётся без изменений, т.е. как надо.
Но, если арифметическое элементов стоящих над главной диагональю меньше суммы элементов стоящих на побочной диагонали, то матрица как-то неправильно транспонируется.
Помогите, пожалуйста, исправить.
Вот мой исходный код:
Код:
procedure TForm1.PageControl1Change(Sender: TObject);
begin
n:=StringGrid1.ColCount;
k:=0;
sr:=0;
For i:=0 to n-1 do
For j:=0 to n-1 do
a[i+1,j+1]:=StrToInt(StringGrid1.Cells[j,i]);
For i:=1 to n-1 do
For j:=i+1 to n do
begin
k:=k+1;
sr:=sr+a[i,j];
end;
sr:=sr/k;
Edit2.Text:=('Среднее арифметическое элементов над главной диагональю=' + FloatToStr(sr));
j:=n+1;
For i:=1 to n do
begin
j:=j-1;
s:=s+a[i,j];
end;
Edit3.Text:=('Сумма элементов побочной диагонали=' + IntToStr(s));
if sr>s then begin
For i:=1 to n do
For j:=1 to n do begin
b:=a[i,j];
a[i,j]:=a[j,i];
a[j,i]:=b;
end;
For i:=0 to n-1 do
For j:=0 to n-1 do
StringGrid1.Cells[j,i]:=IntToStr(a[j+1,i+1]);
end;
end;
Ответить с цитированием