Упорядочить матрицу по убыванию элементов первой строки - Free Pascal
Формулировка задачи:
Дан двумерный массив, содержащий 3 строки и 5 столбцов. Элементы массива являются произвольные числа
Нужно упорядочить массив по убыванию элементов первой строки. Вот не могу понять что в моей программе не так? Преподаватель попросила найти ещё максимум я нашёл, но программа не хочет упорядочивать первую строку массива. помогите пожалуйста.
interface1 это мой модуль вот он
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.
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;
Объяснение кода листинга программы
- Указаны процедуры для обмена значениями двух переменных (SwapInt) и для сортировки матрицы по убыванию элементов первой строки (obrabotka).
- В процедуре obrabotka используется цикл repeat-until для поиска наибольшего элемента в первой строке.
- Если найден больший элемент, то с помощью цикла for и процедуры SwapInt происходит обмен элементов в соответствующих позициях матрицы.
- Цикл while продолжается до тех пор, пока не будет найден элемент, который больше всех остальных в первой строке.
- Функция Max находит максимальное значение в матрице и возвращает его в качестве результата.
- Для этого используется два вложенных цикла for, которые перебирают все элементы матрицы.
- Если текущий элемент больше максимального значения, то он становится новым максимальным значением.
- В конце функции Max возвращается найденное максимальное значение.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д