СРОЧНО Создать двумерный массив случайных чисел array[1..N,1..M] от 1 до 5, и найти...

0 голосов
49 просмотров

СРОЧНО
Создать двумерный массив случайных чисел array[1..N,1..M] от 1 до 5, и найти столбец с минимальной суммой и строчку с максимальной.


Информатика (39 баллов) | 49 просмотров
0

нельзя ли побыстрее

Дано ответов: 2
0 голосов
Правильный ответ

// PascalABC.NET 3.0, сборка 1160 от 05.02.2016
procedure MatrixPrint(a:array[,] of integer);
begin
  for var i:=0 to Length(a,0)-1 do begin
    for var j:=0 to Length(a,1)-1 do Print(a[i,j]);
    Println
    end
end;

function RowSum(a:array[,] of integer):array of integer;
// суммы построчно
begin
  SetLength(Result,Length(a,0));
  for var i:=0 to Length(a,0)-1 do begin
    var s:=0;
    for var j:=0 to Length(a,1)-1 do
      s+=a[i,j];
    Result[i]:=s
    end
end;

function ColSum(a:array[,] of integer):array of integer;
// суммы по столбцам
begin
  SetLength(Result,Length(a,1));
  for var j:=0 to Length(a,1)-1 do begin
    var s:=0;
    for var i:=0 to Length(a,0)-1 do
      s+=a[i,j];
    Result[j]:=s
    end
end;

begin
  var n:=ReadInteger('N=');
  var m:=ReadInteger('M=');
  var x:=MatrixRandom(n,m,1,5);
  Writeln('Исходный массив');
  MatrixPrint(x);
  var srow:=RowSum(x);
  var ir:=0;
  for var i:=1 to srow.Length-1 do
    if srow[i]>srow[ir] then ir:=i;
  WritelnFormat('Максимум {0} в строке {1}',srow[ir],ir+1);
  var scol:=ColSum(x);
  var ic:=0;
  for var i:=1 to scol.Length-1 do
    if scol[i]  WritelnFormat('Минимум {0} в колонке {1}',scol[ic],ic+1)
end.

Тестовое решение:
N= 8
M= 5
Исходный массив
3 3 3 2 4
2 4 2 2 1
1 1 2 4 5
5 1 4 1 5
4 2 3 3 4
2 3 2 4 2
5 3 4 1 1
4 3 4 4 2
Максимум 17 в строке 8
Минимум 20 в колонке 2

(142k баллов)
0

Опс... там от 1 до 5 числа...исправлю

0 голосов

Const
  n = 5;
  m = 5;
var
  a: array[0..n, 0..m] of integer;
  i, j, imin, jmax: integer;
begin
  writeln('Матрица: ');
  for i := 1 to n do
  begin
    for j := 1 to m do
    begin
      a[i, j] := Random(5) + 1;
      a[0, j] := a[0, j] + a[i, j];
      a[i, 0] := a[i, 0] + a[i, j];
      write(a[i, j] : 3);
    end;
    writeln;
  end;
  jmax := 1;
  for i := 2 to n do
    if a[i, 0] > a[jmax, 0] then
      jmax := i;
  imin := 1;
  for j := 2 to m do
    if a[0, j] < a[0, imin] then
      imin := j;
  writeln('Номер столбца: ', imin);
  writeln('Номер строки: ', jmax);
end.

(13.3k баллов)
0

Та же ошибка, что у меня первоначально....диапазон чисел от 1 до 5 запрошен

0

Исправил

0

И еще - у Вас номера строк и столбцов на выводе от 0 указываются?

0

нулевые элементы хранят сумму столбца/строки

0

Да, уже понял по тексту программы)

0

А я решил на процедурах сделать, потому что скоро в АВС будут расширения для матриц, как есть для векторов. И срезы типа a.row(i), a.Column(j)

0

И достаточно будет писать a.Row(i).Max ))

0

А не легче ли сразу добавить что-то типо a.RowMax?

0

a.RowMax(i: integer)

0

Я как раз сейчас и занимаюсь определением того, что надо добавить. Если у разработчика конференцию почитаете, там мне предложили дать набор таких функций.