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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.05.2010, 19:19   #1
hidalgo
Пользователь
 
Регистрация: 08.12.2008
Сообщений: 12
По умолчанию Двумерный массив

Подскажите где ошибка?
создаю матрицу, и нужно с помощу QuickSort, ее отсортировать по строкам, то есть всю матрицу от верхнего угла A[1,1] к нижнему углу A[n,m].
ошибка в том что матрица создается и на этом все заканчивается. зависает программа
Код:
const
  n = 3;
  m = 3;
 
var
  a: array [1..n, 1..m] of integer;
 
procedure QSort(U, L, D, R : integer) ;
var
  i, j: integer;
  i1, j1, i2, j2: integer;
  x, B: integer;
begin
  {procedure}
  x := A[(U + D) div 2, (L + R) div 2];
  i1 := U;
  j1 := L;
  i2 := D;
  j2 := R;
  
  repeat   
    while A[i1, j1] < x do
    begin 
    inc(i1);
    if (i1 mod m = 0) then begin
      i1 := 1;
      inc(j1);
    end;
    end;
    
    while A[i2, j2] > x do
    begin
    dec(j2);
    if (j2 mod n = 0) then begin
      j2 := 1;
      dec(i2);
    end;
    end;
    
    
    if (i1 * m + j1 <= i2 * m + j2) then begin
      B := A[i1, j1];
      A[i1, j1] := A[i2, j2];
      A[i2, j2] := B;
      if (j1 mod m = 0) then begin
        j1 := 1;
        inc(i);
      end
      else j1 := j1 + 1;
      if (j2 = 1) then begin
        j2 := m;
        i2 := i2 - 1;
      end
      else j2 := j2 - 1;
    end;
  until (i1 * m + j1) <= (i2 * m + j2);
  
  if (U * m + L) < (i2 * m + j2) then QSort(U, L, i2, j2);
  if (i1 * m + j1) < (D * m + R) then QSort(i1, j1, D, R);    
  {end}
end;
 
var
  i, j: integer;
 
begin
  {main beg}
  randomize; 
  writeln('Исходная матрица');
  for i := 1 to n do
  begin
    for j := 1 to m do
    begin
      A[i, j] := random(80) - 25;
      write(a[i, j]:7);
    end;
    writeln;
  end;
  
  QSort(1, 1, n, m);
  
  writeln('Преобразованная матрица');
  for i := 1 to n do
  begin
    for j := 1 to m do write(a[i, j]:7);
    writeln;
  end;
  {main end}
end.
hidalgo вне форума Ответить с цитированием
Старый 18.05.2010, 15:14   #2
Don Karleone
Форумчанин
 
Регистрация: 05.04.2010
Сообщений: 410
По умолчанию

Не могу понять, что значит отсортировать по строкам?
ICQ: 593-013-807
Don Karleone вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++ двумерный массив Aniritake Помощь студентам 1 14.04.2010 22:06
Двумерный массив, одномерный массив. Branbal Помощь студентам 14 18.11.2009 12:40
массив двумерный 2 Babur4iK Помощь студентам 3 10.11.2009 19:38
Двумерный массив. Mirel Паскаль, Turbo Pascal, PascalABC.NET 5 18.05.2009 22:59
Двумерный массив apetr Паскаль, Turbo Pascal, PascalABC.NET 2 30.11.2008 12:32