Здравствуйте всем. В матрице надо отсортировать по выделенной траектории
Код:
Program Etape1;
uses crt;
const n = 7; m = 8; {размеры матрицы}
var i,j,y,x,kt,xp,yp,b,xm,ym,max: integer; {рабочие переменные}
A: array[0..n-1,0..m-1] of Integer; {матрица*}
{***********************************************************}
Begin
ClrScr;
Randomize;
TextColor(7);
{---------ввод и печать исходной матрицы---------}
For y:= 0 to n-1 do
begin
For x:= 0 to m-1 do
begin
A[y,x]:= random(100);
write(A[y,x]:3);
end;
Writeln;
end;
{------------------ поиск max--------------- }
ym:= 0;
xm:= 0;
max:= A[ym,xm];
for y:= 0 to n-1 do
for x:= 0 to m-1 do
if max < A[y,x] then
begin
max:= A[y,x];
ym:= y;
xm:= x;
end;
{--определение числа элементов kt, принадлежащих траектории---}
if (n-1-ym) < xm then kt:= (n-1-ym)+(m-xm)
else kt:= n;
{------ сортировка пузырьком --------- }
for i:= 0 to kt-1 do { внешний цикл сортировки}
begin
yp:= n-1; {xp,yp - координаты предыдущего элемента траектории }
xp:= xm;
for j:= 0 to kt-2 do { внутренний цикл сортировки}
begin
{получение координат х,у следующего эл-та траектории}
If j < xm then
begin {движение по вертикали}
x:= xp;
y:= yp-1;
end
else begin {движение по горизонтали}
x:= xp+1;
y:= yp-1;
end;
If A[y,x] < A[yp,xp] then {если следующий элемент меньше предыдущего, то обмен}
begin
b:= A[y,x];
A[y,x]:= A[yp,xp];
A[yp,xp]:= b;
end;
xp:= x; {тек. координаты эл-та становятся предыдущими }
yp:= y;
end;
end;
{------------вывод результатов-------------- }
writeln;
writeln(' max = ',max,' xm = ',xm,' ym = ',ym);
writeln;
For i:= 0 to n-1 do
begin
For j:= 0 to m-1 do write(A[i,j]:3);
Writeln;
end;
{-------------раскраска траектории---------- }
yp:= n-1;
xp:= xm;
TextColor(10);
for j:= 0 to kt-1 do
begin
GotoXY (3*(xp)+1, n+yp+4);
Write(A[yp,xp]:3);
If j < xm then {получение координат х,у следующего эл-та траектории}
begin {движение по вертикали}
x:= xp;
y:= yp-1;
end
else begin {движение по диагонали}
x:= xp+1;
y:= yp-1;
end;
xp:=x;
yp:=y;
end;
TextColor(7);
Readkey;
End.
Почему если максимальный элемент выше диагонали, то сворачивает чуть выше диагонали, не доходит до максимального элемента, а если ниже диагонали то переезжает максимальный элемент