|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Работа с матрицами в 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
|
|||
|
|||
Транспонирование надо делать так
Код:
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; |