Получить массив из номеров максимальных элементов строк матрицы - Pascal ABC
Формулировка задачи:
Здравствуйте! Помогите, пожалуйста с задачей.
Получить одномерный массив, состоящий из номеров максимальных элементов соответствующих строк матрицы.
В полученном векторе решить задачу поиска 'количества четных элементов;
Отсортировать в матрице строки по убыванию значений элементов в столбце с номером, заданным пользователем.
Решение задачи: «Получить массив из номеров максимальных элементов строк матрицы»
textual
Листинг программы
type
TLine = Array Of ShortInt;
TArray = Array Of TLine;
procedure PrintLine(const l: TLine);
var
j: Byte;
begin
for j := 0 to Length(l) - 1 do
Write(l[j]:4);
WriteLn;
end;
procedure PrintArray(const ar: TArray);
var
i, j: Byte;
begin
for i := 0 to Length(ar) - 1 do
PrintLine(ar[i]);
end;
procedure InitArray(var ar: TArray);
var
i, j, n, m: Byte;
begin
Write('n='); ReadLn(n);
Write('m='); ReadLn(m);
SetLength(ar, n, m);
for i := 0 to Length(ar) - 1 do
for j := 0 to Length(ar[i]) - 1 do
ar[i, j] := Random(199) - 99;
PrintArray(ar);
end;
function LineMaxId(const l: TLine): Byte;
var
Result, j: Byte;
begin
Result := 0;
for j := 1 to Length(l) - 1 do
if (l[j] > l[Result])
then
Result := j;
LineMaxId := Result;
end;
procedure GetMaxs(const ar: TArray; var maxs: TLine);
var
i: Byte;
begin
SetLength(maxs, Length(ar));
for i := 0 to Length(ar) - 1 do
maxs[i] := LineMaxId(ar[i]) + 1;
PrintLine(maxs);
end;
function HowMuchEvens(const l: TLine): Byte;
var
Result, i: Byte;
begin
Result := 0;
for i := 0 to Length(l) - 1 do
if (Not Odd(l[i]))
then
Inc(Result);
HowMuchEvens := Result;
end;
procedure SwapLines(var x, y: TLine);
var
z: TLine;
begin
z := x;
x := y;
y := z;
end;
procedure SortByColumn(var ar: TArray; const j: Byte);
var
i, k: Byte;
begin
for i := 0 to Length(ar) - 1 do
for k := i to Length(ar) - 2 do
if (ar[k, j] < ar[k + 1, j])
then
SwapLines(ar[k], ar[k + 1]);
PrintArray(ar);
end;
var
ar: TArray;
max: TLine;
column: Byte;
begin
InitArray(ar);
Write('Max ids: '); GetMaxs(ar, max);
WriteLn('Evens in max id: ', HowMuchEvens(max));
Write('Input column: '); ReadLn(column);
SortByColumn(ar, column - 1);
end.
Объяснение кода листинга программы
- В функции InitArray создается массив ar с n строками и m столбцами.
- Заполняются строки массива случайными числами от 0 до 198.
- Вызывается функция LineMaxId для каждой строки массива ar, и возвращается номер строки с максимальным значением.
- В функции GetMaxs создается новый массив maxs той же длины, что и ar, и заполняется номерами строк, которые содержат максимальные значения.
- Выводится массив maxs.
- В функции HowMuchEvens подсчитывается количество четных строк в массиве ar.
- Выводится количество четных строк.
- В функции SwapLines меняются местами две строки x и y.
- В функции SortByColumn сортируется массив ar по столбцу, указанному в переменной column.
- Выводится отсортированный массив ar.