Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.03.2009, 10:37   #1
ponchikpk
Пользователь
 
Аватар для ponchikpk
 
Регистрация: 09.03.2009
Сообщений: 63
Печаль Сортировка вставками двухмерного массива

Помогите пожалуйста!
Сортировкой вставками отсортировать все диагонали (вдоль главной) квадратной матрицы по возрастанию...
Как последовательность отсортировать я написал прогу, а как диагонали матрицы не понимаю Помогите... Заранее благодарю
ponchikpk вне форума Ответить с цитированием
Старый 09.03.2009, 11:09   #2
KingOfNothing
Пользователь
 
Регистрация: 06.02.2009
Сообщений: 89
По умолчанию

Копируешь диагональ матрицы в одномерный массив, сортируешь тем что ты написал, и копируешь назад в диагональ, и так для всех диагоналей
Если вдруг захотите сказать мне спасибо - воспользуйтесь кнопкой "Добавить отзыв"
KingOfNothing вне форума Ответить с цитированием
Старый 09.03.2009, 11:23   #3
ponchikpk
Пользователь
 
Аватар для ponchikpk
 
Регистрация: 09.03.2009
Сообщений: 63
По умолчанию

я что то не очень понял как это осуществить... длина же всех диагоналей различна
ponchikpk вне форума Ответить с цитированием
Старый 09.03.2009, 11:26   #4
KingOfNothing
Пользователь
 
Регистрация: 06.02.2009
Сообщений: 89
По умолчанию

ваша сортировка сортирует только определенной длины массивы? передавайте актуальное количество элементов массива для сортировки в процедуру сортировки, то есть если два элемента, то сортируйте два, если 100, то 100.
Если вдруг захотите сказать мне спасибо - воспользуйтесь кнопкой "Добавить отзыв"
KingOfNothing вне форума Ответить с цитированием
Старый 09.03.2009, 12:17   #5
capta1n
Форумчанин
 
Аватар для capta1n
 
Регистрация: 06.12.2008
Сообщений: 613
По умолчанию

не обязательно вышеприведенными алгоритмами, хотя идея очевидная и очень хорошая - сейчас я реализую собственным, подождите пару минут
capta1n вне форума Ответить с цитированием
Старый 09.03.2009, 12:48   #6
ponchikpk
Пользователь
 
Аватар для ponchikpk
 
Регистрация: 09.03.2009
Сообщений: 63
По умолчанию

capta1n! спасибо большое... но до меня до самого как то дошло неожиданно и получилось все ЮХУ!!!
Вот код моего варианта

Код:
uses crt;
const n=5;
var a,i,j,k,l:integer;
mas:array[1..n,1..n] of integer;
BEGIN

clrscr;
for i:=1 to n do
  for j:=1 to n do
    readln(mas[i,j]);
for i:=1 to n do
  begin
  for j:=1 to n do
    write(mas[i,j]:3);
    writeln;
  end;
writeln;

for i:=1 to n do
  for j:=1 to n do
    begin
    if i<=j then
      begin
      l:=j;
      for k:=i downto 2 do
        begin
        if mas[k,l]<mas[k-1,l-1] then
          begin
            a:=mas[k,l];
            mas[k,l]:=mas[k-1,l-1];
            mas[k-1,l-1]:=a;
          end;
        l:=l-1;
        end;
      end;
    if i>j then
      begin
      l:=i;
      for k:=j downto 2 do
        begin
        if mas[l,k]<mas[l-1,k-1] then
          begin
            a:=mas[l,k];
            mas[l,k]:=mas[l-1,k-1];
            mas[l-1,k-1]:=a;
          end;
        l:=l-1;
        end;
      end;
    end;


for i:=1 to n do
  begin
  for j:=1 to n do
    write(mas[i,j]:3);
  writeln;
  end;
readln;
END.

Последний раз редактировалось ponchikpk; 09.03.2009 в 19:33.
ponchikpk вне форума Ответить с цитированием
Старый 09.03.2009, 13:34   #7
capta1n
Форумчанин
 
Аватар для capta1n
 
Регистрация: 06.12.2008
Сообщений: 613
По умолчанию

вот:

Код:
program massiv;
const
 n = 6;
type
 item = array [1..n,1..n] of integer;
var
 a : item;
 i,k : byte;
procedure sort ( var b : item; n1 : byte);
var
 i,j,m,l : byte;
 buf : integer;
begin
  for i:=n1 downto 2 do
  begin
    l:=i;
    for k:=2 to n1-i+2 do
    begin
      buf:=b[i,k];
      j:=k-1;
      m:=l-1;
      while (j>=1) and (b[m,j]>buf) do
      begin
        b[m+1,j+1]:=b[m,j];
        dec(m);
        dec(j)
      end;
      b[m+1,j+1]:=buf;
      inc(l)
    end
  end;

  for k:=n1 downto 2 do
  begin
    l:=k;
    for i:=2 to n1-k+2 do
    begin
      buf:=b[i,k];
      j:=l-1;
      m:=i-1;
      while (m>=1) and (b[m,j]>buf) do
      begin
        b[m+1,j+1]:=b[m,j];
        dec(m);
        dec(j)
      end;
      b[m+1,j+1]:=buf;
      inc(l)
    end
  end

end;

begin
  randomize;
  for i:=1 to n do
   for k:=1 to n do
    a[i,k]:=random(100);

  for i:=1 to n do
  begin
    for k:=1 to n do write (a[i,k],'|');
    writeln
  end;

  writeln;
  writeln;
  sort (a,n);

  for i:=1 to n do
  begin
    for k:=1 to n do write (a[i,k],'|');
    writeln
  end;
  readln
end.
capta1n вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка строк двухмерного массива EfiopianDIMON Общие вопросы C/C++ 9 26.05.2009 22:52
Какой самый быстрый метод заполнения массива, например двухмерного? SkAndrew Общие вопросы Delphi 11 29.05.2008 13:23
Передача двухмерного массива в функцию IgorKr Общие вопросы C/C++ 2 28.03.2008 01:11
Ввод двухмерного массива в Делфи через StringGrid KIRILL_FR Помощь студентам 2 24.02.2008 18:03
Сортировка вставками глючит... Arkuz Общие вопросы Delphi 1 01.10.2007 21:44