Помогите составить программу ** языке Паскаль. Дана целочисленная прямоугольная матрица....

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

Помогите составить программу на языке Паскаль.

Дана целочисленная прямоугольная матрица. Найти количество строк, среднее арифметическое элементов которых меньше заданной величины. ( оформить в виде функции).


Информатика (22 баллов) | 55 просмотров
Дано ответов: 2
0 голосов
Правильный ответ

// PascalABC.Net 3.0, сборка 1064
// "Классическое" решение
const
  nn=20;

type
  SqMatrix=array[1..nn,1..nn] of integer;

function AvgRow(row,cols:integer; a:SqMatrix):double;
var
  j,s:integer;
begin
  s:=0;
  for j:=1 to cols do s:=s+a[row,j];
  AvgRow:=s/cols
end;

var
  i,j,n,k:integer;
  cavg:double;
  M:SqMatrix;
 
begin
  Write('Количество строк (столбцов) в матрице: '); Read(n);
  Write('Ограничение для среднего арифметического: '); Read(cavg);
  Randomize;
  // Инициализация и вывод исходной матрицы
  Writeln('*** Сгенерированная матрица ***');
  for i:=1 to n do begin
    for j:=1 to n do begin
      M[i,j]:=Random(51)-20;
      Write(M[i,j]:4)
    end;
    Writeln
  end;
  // Собственно, решение задачи
  k:=0;
  for i:=1 to n do
    if AvgRow(i,n,M)  Writeln('Количество отобранных строк равно ',k)
end.

Тестовое решение:
Количество строк (столбцов) в матрице: 10
Ограничение для среднего арифметического: 2
*** Сгенерированная матрица ***
  -5  10  29  25  23   0 -17   5 -19  -4
   4 -10  -4  13   3 -15  17  16  -4 -18
  -6  24  -4  19 -16 -15  11  -4  14  -3
  -7  -5 -10  -2 -17  19 -16  -2   4 -10
  26  25  29  -8  27  20  13 -10  -9   9
  -3 -11  18 -12   0   2  -7 -10  20  17
  19  18  22  14 -18 -11 -20  28   9  15
 -19  -1  -9 -15 -13  -1  25 -16  22  -5
   3   1 -16 -16 -20 -17   8 -18  28  12
   5  24   8  18   2 -12 -17  -6 -11  18
Количество отобранных строк равно 5

Второе решение дано для демонстрации возможностей современного Паскаля. Оно не подходит в качестве ответа в той части, что не использует отдельную функцию для нахождения среднего. По лаконичности записи оно вполне может соперничать с постепенно набирающим популярность языком, как Python

// PascalABC.Net 3.0, сборка 1064
// Решение, использующее возможности версии 3.0

var
  n: integer;
  cavg: double;
  M: array of array of integer;

begin
  Write('Количество строк (столбцов) в матрице: '); Read(n);
  Write('Ограничение для среднего арифметического: '); Read(cavg);
  // Инициализация и вывод исходной матрицы
  Writeln('*** Сгенерированная матрица ***');
  SetLength(M, n);
  for var i := 0 to n - 1 do
    begin M[i] := ArrRandom(n, -25, 25); M[i].Println end;
  // Собственно, решение задачи
  var k:=M.Select(x->x.Average < cavg).Count(x->x=True);
  Writeln('Количество отобранных строк равно ', k)
end.

Тестовое решение:
Количество строк (столбцов) в матрице: 10
Ограничение для среднего арифметического: 2
*** Сгенерированная матрица ***
-23 -13 13 20 20 -6 22 9 15 -12
8 12 20 -12 -10 16 -1 10 13 1
17 -16 -8 20 1 24 9 -8 4 15
12 7 -9 21 13 11 15 -25 -10 -24
1 3 16 15 -3 -17 23 -12 -15 4
8 -2 10 -17 23 19 20 19 -7 21
11 5 -21 25 1 -24 -4 24 0 5
-24 -1 -6 12 -25 -11 -6 2 -2 -7
-25 -5 -19 -25 -18 -11 23 -18 24 20
16 22 7 -6 -10 22 -2 16 -12 -4
Количество отобранных строк равно 4

(142k баллов)
0 голосов

Решение приложено.
Компилятор: PascalABC.NET 3.0, сборка 1064


image
(630 баллов)
0

type
TMatrix = array of array of integer;

function Func1(Arr: TMatrix; Number: integer): integer;
var
i, j: integer;
summ: integer;
begin
Result:= 0;

for i:= 0 to Length(Arr) - 1 do
begin
summ:= 0;
for j:= 0 to length(Arr[i]) - 1 do
inc(summ, Arr[i, j]);
if (summ div length(Arr[i]) < Number) then
inc(Result);
end;
end;

var
Arr: TMatrix;
Res: integer;

begin
SetLength(Arr, 2);
SetLength(Arr[0], 2);
SetLength(Arr[1], 2);

Arr[0, 0]:= 5;

0

Arr[0, 1]:= 5;
Arr[1, 0]:= 10;
Arr[1, 1]:= 10;

writeln(Func1(Arr, 5));
writeln(Func1(Arr, 10));
writeln(Func1(Arr, 15));
end.

0

Res: integer; - лишнее