Получить массив из номеров максимальных элементов строк матрицы - Pascal ABC
Формулировка задачи:
Здравствуйте! Помогите, пожалуйста с задачей.
Получить одномерный массив, состоящий из номеров максимальных элементов соответствующих строк матрицы.
В полученном векторе решить задачу поиска 'количества четных элементов;
Отсортировать в матрице строки по убыванию значений элементов в столбце с номером, заданным пользователем.
Листинг программы
- function evenmas(var b:mas; n:integer):integer; //кол-во чётных
- var
- k:integer;
- i:integer;
- begin
- i:=1;
- k:=0;
- while (i<=n) do begin
- if ((b[i] mod 2 = 0) and (b[i]<>0))then begin
- k:=k+1;
- i:=i+1;
- end
- else begin i:=i+1; end
- end;
- Writeln(k);
- end;
- function maxnumber(var a:matr; n,m,i:integer):integer; //поиск макс.номера
- var
- j:integer;
- max,imax:integer;
- begin
- max:=0;
- for i:=1 to n do begin
- max:=a[i,1];
- imax:=1;
- for j:=1 to m do begin
- if a[i,j] > max then
- max:=a[i,j];
- imax := j;
- maxnumber:=imax;
- end;
- end;
- end;
- procedure inputmas(var B: mas; A: matr; m, n: integer); //вставка его в массив
- var
- i: integer;
- begin
- for i := 1 to n do
- b[i] := maxnumber(a,n,m,i);
- end;
Решение задачи: «Получить массив из номеров максимальных элементов строк матрицы»
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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д