Помощь - Поиск - Пользователи - Календарь
Полная версия: Упорядочивание матрицы
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Crash_Devil
Задание: Дана матрица. Упорядочить элементы строк матрицы по неубыванию,
а сами строки по убыванию максимальных элементов строк.
Использовать сортировку простым выбором, реализовав метод в виде подпрограммы.
не пашет рандом(выдает нули), и сортировка...
Вот исходник:
Program z3;
const
n=4;{strok}
m=5{stolbcov};
type
tvector=array[1..m] of real;
tmatrix=array[1..n] of tvector;

procedure smena_strok(var matrica:tmatrix; const i,j:integer);
var T:tvector;
begin
T:=matrica[i];
matrica[i]:=matrica[j];
matrica[j]:=T;
end;
procedure vvod(matrica:tmatrix);
var i,j:integer;
begin
randomize;
for i:=1 to n do
for j:=1 to m do
matrica[i][j]:=random(100)-50;
end;

procedure vivod(matrica:tmatrix);
var i,j:integer;
begin
for i:=1 to n do
begin
for j:=1 to m do
write(' ',matrica[i][j]);
writeln;
end;
end;
procedure sort1(matrica:tmatrix);
var k,i,j,maxE:integer;
max:real;
begin
for i:=1 to n do begin
for j:=m downto 2 do
begin
max:=matrica[1][n];maxE:=1;
for k:=1 to j do
if matrica[k][n]<=max then begin max:=matrica[k][n]; maxE:=k;end;
matrica[maxE][n]:=matrica[j][n];matrica[j][n]:=max;
end;
end;

end;

var
matrica:tmatrix;
i,j:integer;
begin
vvod(matrica);
writeln('Ishodnaya');
vivod(matrica);
sort1(matrica);
writeln('Poluchennaya');
vivod(matrica);
end.
volvo
Цитата
не пашет рандом(выдает нули)
Еще бы... Передай матрицу как Var-параметр - заработает...
Crash_Devil
Цитата(volvo @ 12.12.2007 12:49) *

Еще бы... Передай матрицу как Var-параметр - заработает...

У меня ступор...
Где это?
Что туда надо поставить?
volvo
procedure vvod(VAR matrica:tmatrix);
Crash_Devil
А на счет сортировки, Пишет "выход за границы диапазона изменения индекса 1..4"
Помогите пожалуйсто!
volvo
procedure sort1(var matrica:tmatrix);
var
k,i,j: integer;
T: real;
begin
for i:=1 to n do begin

for j := 1 to m do
for k := m downto j + 1 do
if matrica[i][k - 1] > matrica[i][k] then begin
T := matrica[i][k - 1];
matrica[i][k - 1] := matrica[i][k];
matrica[i][k] := T;
end
end;
end;

Хинт: сортировка простым выбором - это не метод последовательного поиска минимумов...
Crash_Devil
Вот процедура перестановки строк местами к условию
"... а сами строки по убыванию максимальных элементов строк":
procedure sort2(var matrica:tmatrix);
var
k,i,j: integer;
T: real;
begin
for i:=1 to n do
for j:=1 to m do
if matrica[i][1]<matrica[i+1][1]then smena_strok(matrica,1,i+1);
end;
Опять пишет "выход за границы диапазона изменения индекса"!
Что не так?
volvo
Потому что у тебя опять не метод "пузырька"... Почитай уже наконец, как он правильно реализуется:
Методы сортировок

Вот так sort2 работает:
procedure sort2(var matrica:tmatrix);
var
i,j: integer;
begin
for i:=1 to n do
for j:=n downto i+1 do
if matrica[j][1]<matrica[j-1][1]
then smena_strok(matrica,j,j-1);
end;

Crash_Devil
ОГРОМНОЕ СПАСИБО ЗА ПОМОЩЬ И ТЕРПЕНИЕ!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.