Другие языки программирования и технологии
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 - это нормально!
Лучше было для начала организовать сортировку линейного массива, содержащего только элементы 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 - это нормально!
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;
потерял в реализации объявление процедуры.
{ Обменивает строки матрицы местами }
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;
потерял в реализации объявление процедуры.
Похожие вопросы
- Помогите пожалуйста найти ошибку в задаче (Язык программирования Си)
- Помогите пожалуйста найти ошибку в решении задачи по информатике(паскаль) !!!Прошу очень нужно!!!задача простая!!!
- Помогите пожалуйста найти ошибку, с++
- Срочно нужна помощь. помогите пожалуйста найти ошибку
- Помогите плз найти ошибку в задаче в паскале, есть код,что сделал
- Помогите пожалуйста найти ошибку. Паскаль. Оператор Case of
- Здравствуйте всем! Помогите пожалуйста найти ошибку в моем коде
- Помогите, пожалуйста, найти ошибки в коде. Нужно выбрать из массива минимальное значение и вывести индексы его позиции.
- Помогите, пожалуйста, найти ошибку в программе сортировки стека (по убыванию ) на Си.
- Pascal. Помогите пожалуйста решить задачу в паскале !