Упорядочить матрицу по убыванию элементов первой строки - 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 возвращается найденное максимальное значение.