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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 25.05.2009, 19:12
Gelo Gelo вне форума
Прохожий
 
Регистрация: 30.04.2009
Сообщения: 2
Репутация: 10
Сообщение Сортировка двумерного массива n*n (Диагональ матрицы)

Путем перестановки элементов квадратной вещественной матрицы добиться того, чтобы ее максимальный элемент находился в левом верхнем углу, следующий по величине – в позиции (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  
Старый 25.05.2009, 21:02
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

вариант - сделать в несколько ходов.
1. Переписать индексы эдементов в одномерный массив.
2. Отсортировать этот массив по убыавнию значений элементов.
3. Заменить элементы по диагонали на соотв. по отсортированному массиву.

Код сейчас писать некогда, если очень нужно, то может позже или завтра.
Ответить с цитированием
  #3  
Старый 25.05.2009, 21:45
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Согласен, за исключением одного.
3. После сортировки заполняется диагональ, а потом уже оставшиеся элементы.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #4  
Старый 26.05.2009, 00:13
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

А зачем? Ему достаточно ведь только диагональ. Соответсвенно, в массиве просто храним координаты элементов, а потом меняем местами только N первых, которые будут составлять нашу новую диагональ.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter