Упорядочить матрицу по убыванию элементов первой строки - Free Pascal

Узнай цену своей работы

Формулировка задачи:

Дан двумерный массив, содержащий 3 строки и 5 столбцов. Элементы массива являются произвольные числа Нужно упорядочить массив по убыванию элементов первой строки. Вот не могу понять что в моей программе не так? Преподаватель попросила найти ещё максимум я нашёл, но программа не хочет упорядочивать первую строку массива. помогите пожалуйста.
Program Maxim68; //Ященко М.Ю.
        uses crt,interface1;
        const n=3;m=5;
        type mas=array[1..n,1..m] of integer;
        var u:real;
           i,j:word;
           a,f:mas;
           p:boolean;
         procedure vvod(var x:mas);
          begin
           for i:=1 to n do begin
            for j:= 1 to m do x[i,j]:=20-random(40);
              end;
          end;
         procedure vevod(x:mas);
          begin
           for i:=1 to n do begin
             for j:= 1 to m do  write(x[i,j]:9);
             writeln;
            end;
          end;
         procedure obrabotka(x:mas; var y:mas);
            var  z,max,k,h:integer;                         
          begin
 
             for i:= 1 to m do begin
                                 max:=x[1,i];
                                 h:=i;
                                 for j:= i to n do if x[1,j]>max then begin
                                                                         max:=x[1,j];
                                                                         h:=j;
                                                                        end;
                                 for k:=1 to n do   begin
                                                         z:=x[k,i];
                                                         x[k,i]:=x[k,h];
                                                         x[k,h]:=z;
                                                      end;
                                 end;
                                 y:=x;

          end;
 
Begin
          shapka(6,8);
          clrscr;
          randomize;
          vvod(a);
          writeln('Дан двумерный массив, содержащий 3 строки и 5 столбцов.       Элементами массива являются произвольные числа. Упорядочить   массив по убыванию элементов первой строки. ');
          writeln();
          writeln('Массив А: ');
          vevod(a);
          writeln;
          pravoeokno;
          obrabotka(a,f);
          writeln('Полученный массив имеет вид: ');
          vevod(f);
       vivod;
        readkey;
End.
interface1 это мой модуль вот он
unit interface1;
 interface
        uses crt;
        procedure shapka(x,y:word);
        procedure pravoeokno;
        procedure vivod;
        function factorial(k:word):longint;
        function tg(z:real):real;
 implementation
        procedure shapka(x,y:word);
         begin
           textbackground(7);clrscr;
           window(75,3,100,5); textbackground(4); clrscr;
           textcolor(15);
           writeln('Лабораторная работа №',x);
           writeln('     Задача №',y);
           window(4,6,65,36);
           textbackground(11); clrscr;
         end;
        procedure pravoeokno;
         begin
         window(115,6,175,36); textbackground(6); clrscr;textcolor(15);
         end;
        procedure vivod;
        begin
         window(75,48,100,50); textcolor(14); textbackground(13); clrscr;
         writeln('         Работу выполнил');
         writeln('   Ященко Максим Юрьевич');
        end;
        function factorial(k:word):longint;
         var pr:word; i:longint;
          begin
           pr:=1;
           for i:=1to k do begin
                         pr:=pr*i;
                         factorial:=pr;
                         end;
          end;
        function tg(z:real):real;
         var a:real;
          begin
          a:=sin(z)/cos(z);
          tg:=a;
         end;
 
Begin
End.

Решение задачи: «Упорядочить матрицу по убыванию элементов первой строки»

textual
Листинг программы
procedure SwapInt(var a, b: Integer);
var t: Integer;
begin
  t:=a; a:=b; b:=t;
end;
procedure obrabotka(var a: mas);
var i, j, k, p: Integer;
begin
  p:=m;
  repeat
    k:=p; p:=0;
    for j:=1 to k-1 do
      if a[1,j+1]>a[1,j] then begin
        p:=j; for i:=1 to n do SwapInt(a[i,j],a[i,j+1]);
      end;
  until p=0;
end;
function Max(const a: mas): Integer;
var i, j: Integer;
begin
  Result:=a[1,1];
  for i:=1 to n do for j:=1 to m do
    if Result<a[i,j] then Result:=a[i,j];
end;

Объяснение кода листинга программы

  1. Указаны процедуры для обмена значениями двух переменных (SwapInt) и для сортировки матрицы по убыванию элементов первой строки (obrabotka).
  2. В процедуре obrabotka используется цикл repeat-until для поиска наибольшего элемента в первой строке.
  3. Если найден больший элемент, то с помощью цикла for и процедуры SwapInt происходит обмен элементов в соответствующих позициях матрицы.
  4. Цикл while продолжается до тех пор, пока не будет найден элемент, который больше всех остальных в первой строке.
  5. Функция Max находит максимальное значение в матрице и возвращает его в качестве результата.
  6. Для этого используется два вложенных цикла for, которые перебирают все элементы матрицы.
  7. Если текущий элемент больше максимального значения, то он становится новым максимальным значением.
  8. В конце функции Max возвращается найденное максимальное значение.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.5 из 5
Похожие ответы