Форум по программированию Delphi Sources

 



Вернуться   Форум по программированию Delphi Sources > Все о Delphi > Компоненты и классы
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #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;
Ответить с цитированием
  #2  
Старый 19.04.2019, 18:10
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

Транспонирование надо делать так
Код:
For i:=1 to n do
  For j:=1 to i do begin
    b:=a[i,j];
    a[i,j]:=a[j,i];
    a[j,i]:=b;
  end;
а то ты дважды переставляешь элементы массива
Ответить с цитированием
Ответ



Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:25.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources", 2004-2019

ВКонтакте   Facebook   Twitter