Получить массив из номеров максимальных элементов строк матрицы - 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.

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

  1. В функции InitArray создается массив ar с n строками и m столбцами.
  2. Заполняются строки массива случайными числами от 0 до 198.
  3. Вызывается функция LineMaxId для каждой строки массива ar, и возвращается номер строки с максимальным значением.
  4. В функции GetMaxs создается новый массив maxs той же длины, что и ar, и заполняется номерами строк, которые содержат максимальные значения.
  5. Выводится массив maxs.
  6. В функции HowMuchEvens подсчитывается количество четных строк в массиве ar.
  7. Выводится количество четных строк.
  8. В функции SwapLines меняются местами две строки x и y.
  9. В функции SortByColumn сортируется массив ar по столбцу, указанному в переменной column.
  10. Выводится отсортированный массив ar.

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


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

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

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