Составить программу на языке паскаль. дана целочисленная прямоугольная матрица. найти количество строк, среднее арифметическое элементов которых меньше заданной величины. ( оформить в виде функции).
// 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)<cavg then Inc(k); Writeln('Количество отобранных строк равно ',k) end.
Второе решение дано для демонстрации возможностей современного Паскаля. Оно не подходит в качестве ответа в той части, что не использует отдельную функцию для нахождения среднего. По лаконичности записи оно вполне может соперничать с постепенно набирающим популярность языком, как 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.
Компилятор: 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)<cavg then Inc(k);
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