Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Задача на матрицу

Автор: drug 26.11.2007 20:04

Вот надо упорядочить матрицу по убыванию ..
использовал метод пузырька
получается ток элементы по убыванию в каждой строке ...
а надо всю матрицу ...
кроч вот код: шо не так?

program asd;
uses crt;
const
n=5;
m=5;
var
a:array[1..n,1..m]of integer;
i,j,k,swap:integer;
begin
randomize;
for i:=1 to n do
for j:=1 to m do
a[i,j]:=random(15)-10;
for i:=1 to n do
begin
for j:=1 to m do
write(' ',a[i,j]);
writeln;
end;
for i:=1 to n do
begin
for j:=1 to m-1 do
for k:=1 to m-j do
if a[i,k] < a[i,k+1] then
begin
swap:=a[i,k];
a[i,k]:=a[i,k+1];
a[i,k+1]:=swap;
end;
end;
writeln;
for i:=1 to n do
begin
for j:=1 to m do
write(' ',a[i,j]);
writeln;
end;
readln;
end.


Автор: Ozzя 26.11.2007 20:06

Об отладке программы никогда не слышал?
О волшебных кнопках F4, F7, F8?
Попробуй отладить программу сам сначала.

Автор: drug 10.12.2007 14:15

да пробовал ..
ничё не понял
с индексами путаюсь походу ..


Автор: volvo 10.12.2007 14:52

Сортируешь "как бы одномерный массив", но на каждой итерации вычисляешь индексы двумерного:

  for p := 1 to n * m do begin
for q := m * n - 1 downto p do begin
i := (q div m) + 1;
j := (q mod m) + 1;
i_pred := ((q - 1) div m) + 1;
j_pred := ((q - 1) mod m) + 1;

if a[i, j] > a[i_pred, j_pred] then begin
swap := a[i, j];
a[i, j] := a[i_pred, j_pred];
a[i_pred, j_pred] := swap;
end;
end;

Либо создаешь еще один, фиктивный одномерный массив размером 1 .. m*n, располагающийся точно там же, где и твой двумерный, фактически накладывающийся на него (с помощью absolute), и сортируешь его... Двумерный будет также отсортирован (естественно, это ведь один и тот же массив...)