Пример.
Программирование с использованием
Подпрограмм
Общего вида типа – 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]);