Помощь - Поиск - Пользователи - Календарь
Полная версия: Упорядочивание матрицы
Форум «Всё о Паскале» > 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
ОГРОМНОЕ СПАСИБО ЗА ПОМОЩЬ И ТЕРПЕНИЕ!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.