![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Путем перестановки элементов квадратной вещественной матрицы добиться того, чтобы ее максимальный элемент находился в левом верхнем углу, следующий по величине – в позиции (2,2) , следующий по величине – в позиции (3,3), …, заполнив таким образом всю главную диагональ.
Вот что у меня в процедуре сортировки: Код:
procedure diagonal;
var b,f,z,ib,jb:integer;
begin
setlength(di,n);
f:=0;
jb:=0;
ib:=0;
while f<n do
begin
b:=a[f,0];
for j:=0 to high(a) do
begin
for i:=0 to high(a) do begin
if a[i,j]>b then if i=j then break
else begin
b:=a[i,j];
ib:=i; jb:=j;
end;
end; end;
a[ib,jb]:=a[f,f];
a[f,f]:=b;
inc(f);
end;
end;![]() |
|
#2
|
|||
|
|||
|
вариант - сделать в несколько ходов.
1. Переписать индексы эдементов в одномерный массив. 2. Отсортировать этот массив по убыавнию значений элементов. 3. Заменить элементы по диагонали на соотв. по отсортированному массиву. Код сейчас писать некогда, если очень нужно, то может позже или завтра. |
|
#3
|
||||
|
||||
|
Согласен, за исключением одного.
3. После сортировки заполняется диагональ, а потом уже оставшиеся элементы. |
|
#4
|
|||
|
|||
|
А зачем? Ему достаточно ведь только диагональ. Соответсвенно, в массиве просто храним координаты элементов, а потом меняем местами только N первых, которые будут составлять нашу новую диагональ.
|