
- •5.160 5. Программирование с использованием подпрограмм
- •5. Программирование с использованием подпрограмм
- •Процедуры
- •Объявление процедуры
- •Заголовок процедуры
- •Обращение к процедуре
- •Список формальных параметров
- •Пример 5.1 выполнения задания
- •Задания 5.1 для самостоятельной проработки
- •Функции Объявление функции
- •Заголовок функции
- •Обращение к функции
- •Пример 5.2 выполнения задания
- •Задания 5.2 для самостоятельной проработки
- •Рекурсивные подпрограммы
- •Пример выполнения задания на составление рекурсивной подпрограммы
- •Задания 5.3 для самостоятельной проработки
- •Параметры - открытые массивы
- •Динамические массивы
- •Перегружаемые подпрограммы
- •Параметры со значениями по умолчанию
- •Примеры программ с подпрограммами
Пример 5.2 выполнения задания
Составить функцию для вычисления среднего арифметического элементов одномерного массива. Использовать эту функцию для формирования массива средних арифметических значений элементов каждой строки матрицы A(m,n), m≤12, n≤11.
program Fun1;
{$APPTYPE CONSOLE}
uses
SysUtils;
const
mMax=12; nMax=11;
type
tStrk=array[1.. nMax] of Real;
tMatr=array[1.. mMax] of tStrk;
tStlb=array[1.. mMax] of Real;
//Функция вычисления среднего арифметического
//элементов одномерного массива
function Sred(const B:tStrk; n:Integer):Real;
var
i:Integer;
begin
Result:=0;
for i:=1 to n do
Result:= Result+B[i];
Result:= Result/n;
end; //конец функции Sred
var
A: tMatr; //Массив исходной матрицы
StrkA: tStrk; //Массив строки матрицы
SredStrkA: tStlb; //Массив средних значений строк матрицы
m,n,i,j:Integer;
begin// РАЗДЕЛ ОПЕРАТОРОВ ПРОГРАММЫ
WriteLn('Введите количество строк и столбцов');
ReadLn(m,n);
WriteLn('Введите матрицу по строкам');
for i:=1 to m do
begin
for j:=1 to n do
Read(a[i,j]);
ReadLn;
end;
//Вычисление средних арифметических
//значений в строках матрицы
for i:=1 to m do
SredStrkA[i]:=Sred(A[i],n); //Обращение к функции
//Вывод матрицы по строкам и правее
//каждой строки - её среднего арифметического
WriteLn('Исходная матрица и средние арифметические');
for i:=1 to m do
begin
for j:=1 to n do
Write(a[i,j]:6:1,' '); //Вывод строки матрицы
//Вывод её среднего арифметического
WriteLn(' ', SredStrkA[i]:6:2);
end;
ReadLn;
end.
Можно поставленную задачу решить и по-другому, если функция должна работать непосредственно с матрицей. Функция в этом случае возвращает сразу сформированный массив средних арифметических.
program Fun1a;
{$APPTYPE CONSOLE}
uses
SysUtils;
const
mMax=12; nMax=11;
type
tStrk=array[1.. nMax] of Real;
tMatr=array[1.. mMax] of tStrk;
tStlb=array[1.. mMax] of Real;
//Функция вычисления среднего арифметического
//элементов строк матрицы
function Sred(const B: tMatr; m,n:Integer):tStlb;
var
i,j:Integer; S:Real;
begin
for i:=1 to m do
begin
S:=0;
for j:=1 to n do
S:= S +B[i,j];
Sred[i]:=S/n
end;
end; //конец функцииSred
var
A:tMatr; //Массив исходной матрицы
SredStrkA:tStlb; //Массив средних значений строк матрицы
m,n,i,j:Integer;
begin// РАЗДЕЛ ОПЕРАТОРОВ ПРОГРАММЫ
WriteLn('Введите количество строк и столбцов');
ReadLn(m,n);
WriteLn('Введите матрицу по строкам');
for i:=1 to m do
begin
for j:=1 to n do
Read(a[i,j]);
ReadLn;
end;
//Вычисление средних арифметических
//значений в строках матрицы
SredStrkA:=Sred(A,m,n);
//Вывод матрицы по строкам и правее
//каждой строки - её среднее арифметическое
WriteLn('Исходная матрица и средние арифметические');
for i:=1 to m do
begin
//Вывод строки матрицы
for j:=1 to n do
Write(a[i,j]:6:1,' ');
//Вывод её среднего арифметического
WriteLn(' ', SredStrkA[i]:6:2);
end;
ReadLn;
end.