Другие языки программирования и технологии

Pascal помогите пожалуйста найти ошибку в задаче.

Условие задачи: Расставьте строки данной матрицы в порядке возрастания элементов первого столбца. program matrix; const RCount = 10; { Кол-во строк } CCount = 5; { Кол-во столбцов } type TMatrix = array [ 1..RCount, 1..CCount ] of Integer; { Тип "Матрица" } procedure EnterMatrix(var m : TMatrix); var i,j:integer; { Ввод матрицы } z:text; begin assign(z,'matr.txt'); reset(z); read(z); for i:=1 to 10 do for j:=1 to 5 do read(z,m[i,j]); close(z); end; procedure PrintMatrix(var m : TMatrix); var i,j:integer; { Вывод матрицы } begin for i:=1 to 10 do begin for j:=1 to 5 do write(m[i,j],' '); writeln; end; end; procedure SortMatrix(var m : TMatrix); { Сортировка матрицы} procedure SwapLines(i,j:Integer); { Обменивает строки матрицы местами } var tmp: Integer; k : Integer; begin for k:=1 to CCount do begin tmp:=m[i,k]; m[i,k]:=m[j,k]; m[j,k]:=tmp; end; end; var i,j:integer; begin for i:=1 to RCount-1 do begin for j:=i to RCount-1 do begin if m[j,1] > m[j+1,1] then SwapLines(j,j+1); end; end; end; var m:TMatrix; begin EnterMatrix(m); SortMatrix(m); PrintMatrix(m); readln; end. содержимое файла matr.txt 1 2 3 5 6 6 5 4 6 8 4 5 6 4 4 0 5 4 6 8 9 5 4 6 8 8 5 4 6 8 7 5 4 6 8 5 5 4 6 8 3 5 4 6 8 2 5 4 6 8
Ошибка в том, что за первый проход у тебя 0 не попадает в 1 строку, а потом ты её в расчёт не принимаешь.
Лучше было для начала организовать сортировку линейного массива, содержащего только элементы 1 столбца.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Вот две правильных реализации процедуры SortMatrix:
1 - метод пузырька - пока за проход массива появляется хоть 1 обмен
var
i : integer;
Obmen : Boolean;
begin
repeat
Obmen := False;
for i := 1 to RCount - 1 do
if m[i, 1] > m[i+1, 1] then
begin
SwapLines(i, i+1);
Obmen := True;
end;
until Not Obmen;
end;
2 - в первую строку помещается строка с минимальным элементом, затем во вторую и т. д.
var
i, j: integer;
Min : Integer;
begin
for i := 1 to RCount - 1 do
begin
Min := i;
for j := i + 1 to RCount do
if m[Min, 1] > m[j, 1] then
Min := j;
SwapLines(i, Min);
end;
end;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
apprico!
У него процедура SwapLines вложена в SortMatrix - это нормально!
ЭА
Эдуард Ахтямов
88 430
Лучший ответ
procedure SwapLines(i,j:Integer);
{ Обменивает строки матрицы местами }
var
tmp: Integer;
k : Integer;
begin
for k:=1 to CCount do begin
tmp:=m[i,k];
m[i,k]:=m[j,k];
m[j,k]:=tmp;
end;
end;
procedure SortMatrix(var m : TMatrix);
{ Сортировка матрицы}

var
i,j:integer;
begin
for i:=1 to RCount-1 do begin
for j:=i to RCount-1 do begin
if m[j,1] > m[j+1,1] then
SwapLines(j,j+1);
end;
end;
end;

потерял в реализации объявление процедуры.