Блок-схема алгоритма подпрограммы изображается аналогично блок-схемам программ: в ней присутствуют блоки «Начало» и «Конец», между которыми заключена вся исполняемая часть подпрограммы.
Вызов подпрограммы в основной программе изображается на блок-схеме в виде блока «Предопределенный процесс»:
1.3 Пример составления алгоритма и программы на языке Pascal для обработки одномерных массивов с использованием подпрограмм.
Задание: Даны два массива вещественных чисел A(20) и F(30). Найти средние арифметические значения положительных элементов в каждом массиве и вывести на экран отношение этих значений.
Решение.
Для объявления массивов A и F опишем в разделе Type тип массива из 30 вещественных чисел. Для обозначения количества элементов массива A введем переменную Na, количества элементов массива F – переменную Nf, средних арифметических значений положительных элементов массивов – переменные SrA и SrF.
Для каждого массива необходимо повторить одни и те же операции:
- ввод элементов массива,
- поиск среднего значения среди положительных элементов,
- вывод элементов массива.
Поэтому, для выполнения этих действий удобно организовать подпрограммы. Для решения данной задачи создадим три подпрограммы: процедуру ввода элементов массива, процедуру вывода элементов массива на экран, функцию поиска среднего значения среди положительных элементов массива.
Процедуру ввода элементов массива назовем EnterMassiv, в списке формальных параметров укажем следующие переменные: массив X и количество элементов в массиве Nx. При этом в списке формальных параметров массив должен быть указан со служебным словом var, поскольку значения элементов массива изменяются в процедуре и возвращаются в основную программу. Внутри процедуры формирование элементов массива выполним с помощью генератора случайных чисел random.
Процедуру вывода элементов массива назовем PrintMassiv, и будем в нее передавать те же переменные: массив X и количество элементов в массиве Nx. При этом в списке формальных параметров перед массивом служебное слово var можно не указывать, поскольку значения элементов массива в процедуре не изменяются, а только выводятся на экран.
Функцию поиска среднего значения среди положительных элементов массива назовем MiddlePositive, и будем в нее также передавать массив X и количество элементов в массиве Nx. Поскольку среднее арифметическое является вещественным числом, тип функции должен быть real. Внутри функции будем использовать локальную переменную K для подсчета количества положительных элементов массива, переменную M для расчета суммы всех положительных элементов массива и их среднего значения.
1.3.1 Блок-схема алгоритма решения данной задачи выглядит следующим образом:
Блок схема подпрограммы EnterMassiv
Блок схема подпрограммы PrintMassiv
Блок схема подпрограммы MiddlePositive
Блок-схема основной программы
1.3.2 Текст программы на языке Pascal выглядит следующим образом:
program primer7;
uses crt;
type
mass=array[1..30] of real;
var
A,F:mass;
Na,Nf:byte;
SrA,SrF:real;
procedure EnterMassiv(Nx:byte;var X:mass);
var
i:byte;
begin
for i:=1 to Nx do
X[i]:=100*random-50;
end;
procedure PrintMassiv(Nx:byte;X:mass);
var
i:byte;
begin
for i:=1 to Nx do
begin
write(X[i]:7:2);
if i mod 10 = 0 then writeln;
end;
end;
function MiddlePositive(Nx:byte;X:mass):real;
var
i,K:byte;
M:real;
begin
M:=0;
K:=0;
for i:=1 to Nx do
if X[i]>0
then begin
M:=M+X[i];
K:=K+1;
end;
M:=M/K;
MiddlePositive:=M;
end;
Begin
clrscr;
randomize;
Na:=20;
Nf:=30;
EnterMassiv(Na,A);
writeln('Massiv A:');
PrintMassiv(Na,A);
EnterMassiv(Nf,F);
writeln;
writeln('Massiv F:');
PrintMassiv(Nf,F);
SrA:=MiddlePositive(Na,A);
writeln;
writeln('Srednee znachenie pologitelnix elementov massiva A SrA=',SrA:6:2);
SrF:=MiddlePositive(Nf,F);
writeln('Srednee znachenie pologitelnix elementov massiva F SrF=',SrF:6:2);
writeln('Otnoshenie SrA/SrF = ',SrA/SrF:6:2);
readkey;
end.
1.3.3 Результаты работы программы:
Massiv A:
-23.80 -12.44 34.55 40.12 44.23 -12.64 47.59 -44.87 -33.71 22.57
-2.90 13.48 30.43 -3.48 -10.49 -28.54 13.54 45.97 45.69 -6.19
Massiv F:
16.44 35.73 -32.21 -43.19 23.06 -27.09 4.27 42.06 13.07 -10.75
-44.77 31.96 -17.03 -35.05 -14.75 42.72 -44.94 -7.59 36.02 -44.01
-20.89 3.38 -44.29 34.89 -43.59 7.92 -12.39 35.46 40.88 18.63
Srednee znachenie pologitelnix elementov massiva A SrA= 33.82
Srednee znachenie pologitelnix elementov massiva F SrF= 25.77
Otnoshenie SrA/SrF = 1.31