Пример.

Программирование с использованием

Подпрограмм

Общего вида типа – Function .

 

Цель работы.

Отработка навыков написания и отладки программ, содержащих подпрограммы-функции.

 

Краткая теория.

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

Различают два вида подпрограмм: процедуры и функции. Обе формы предназначены для выделения и оформления самостоятельного программного модуля для повторных, многократных обращений к нему с целью выполнения определенных операций, предусмотренных алгоритмом. Несмотря на свое конструктивное сходство, принципиальным различием между ними является тот фактор, что результатом действия подпрограммы-функции возвращаемым может быть только одно число (значение), в то время как результатом подпрограммы-процедуры – возвращаемых результатов может быть множество (например, массив).

 

Рассмотрим организацию подпрограмм-функций языка Pascal.

Подпрограмма-функция используется в тех случаях, когда требуется в результате получить одно значение. Полученный результат присваивается имени подпрограммы. Функция является самостоятельной подпрограммной единицей и состоит из любого числа операторов. Подпрограмма – функция называется также пользовательской функцией.

Подпрограммa – функция должна быть описана до того, как к ней последует обращение и до начала тела главной программы (main program)


Описание пользовательских функций может иметь следующийй вид:

FUNCTION <name> (a:<тип>;b:<тип>;c,z:<тип>;…) :<тип>;

<описание локальных переменных и констант>

Begin

< тело подпрограммы>

end;

 

где: <name> - имя пользовательской функции, в скобках после имени функции указываются ее параметры (при описании функции эти параметры называются формальными) с указанием типа этих параметров. Последним в строке указывается тип самой функции (тип возвращаемого результата).

В теле подпрограммы следует хотя бы один раз записать оператор присваивания <name>:=… ; . Именно так происходит возвращение результата из подпрограммы в вызывающую программу.

 

Обращение к пользовательской функции допускается в правой части оператора присваивания или в операторе печати. Обращение имеет вид:

Y:=<name>(a,b,c,z);

где: a,b,c,z – называются фактическими параметрами.

К моменту обращения к подпрограмме – функции все фактические параметры должны быть определены, т.е. заданы их значения.

Между фактическими и формальными параметрами должно быть полное соответствие по порядку следования, количеству и типу.

 

Пример.

Заданы матрицы

Определить матрицу, имеющую максимальное среднее значение элементов .

uses crt;

const n=3;

type matr=array[1..n,1..n] of real;

var sr:array[1..3] of real; i,j:integer;

x,y,z:matr; maxsr:real;

{ **** подпрограмма вычисления среднего значения **** }

function sred(a:matr;m,n:integer):real;

var s:real; i,j:integer;

Begin

for i:=1 to m do

for j:=1 to n do

s:=s+a[i,j];

sred:=s/(m*n)

end;

{ ***** подпрограмма чтения из файла f матрицы ***** }

procedure input(var b:matr;m,n:integer;f:string);

var t:text;

Begin

assign(t,f);

reset(t);

readln(t);

for i:=1 to m do

for j:=1 to n do read(t,b[i,j]);