- •5.160 5. Программирование с использованием подпрограмм
- •5. Программирование с использованием подпрограмм
- •Процедуры
- •Объявление процедуры
- •Заголовок процедуры
- •Обращение к процедуре
- •Список формальных параметров
- •Пример 5.1 выполнения задания
- •Задания 5.1 для самостоятельной проработки
- •Функции Объявление функции
- •Заголовок функции
- •Обращение к функции
- •Пример 5.2 выполнения задания
- •Задания 5.2 для самостоятельной проработки
- •Рекурсивные подпрограммы
- •Пример выполнения задания на составление рекурсивной подпрограммы
- •Задания 5.3 для самостоятельной проработки
- •Параметры - открытые массивы
- •Динамические массивы
- •Перегружаемые подпрограммы
- •Параметры со значениями по умолчанию
- •Примеры программ с подпрограммами
Перегружаемые подпрограммы
В рамках одной программы можно объявить несколько подпрограмм (процедур или функций) с одинаковыми именами, но различающихся по типу или числу параметров. Если при объявлении заголовка подпрограммы поставить ключевое слово overload, то компилятор после анализа фактических параметров в вызове подпрограммы выберет подходящий вариант подпрограммы из числа одноименных подпрограмм. Например, при делении целых чисел их надо делить нацело, а при делении действительных чисел требуется получать результат действительного типа. В этом случае следует объявить две одноименных функции деления, у которых будет различный тип аргументов, а также будет различаться тип результата.
program Funperegr;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
a,b,c:Real;
k,l,m:Integer;
function Divide(a,b:Real):Real; overload;
begin
Result:=a/b;
end;
function Divide(a,b:Integer):Integer; overload;
begin
Result:=a div b;
end;
begin// РАЗДЕЛ ОПЕРАТОРОВ ПРОГРАММЫ
ReadLn(a,b);
c:= Divide(a,b);
ReadLn(k,n);
m:= Divide(k,l);
WriteLn('c =',c:6:2,' m=',m);
ReadLn;
end.
При вводе a=3 иb=2 будет вызвана функция, выполняющая деление вещественных чисел, так какaиb– вещественные переменные, и будет выведеноc = 1.5. При вводеk=3 иn=2 будет вызвана функция, выполняющая деление целых чисел, так какkиn– переменные целого типа, и будет выведеноm=1.
Параметры со значениями по умолчанию
Для параметров в объявлении подпрограмм можно задавать параметры по умолчанию. Значение по умолчанию – это значение параметра, которое используется при вызове подпрограммы, если в нее не передано фактическое значение. Использование параметров по умолчанию равносильно разрешению указывать в вызове подпрограммы не все необходимые параметры.
Значения по умолчанию задаются добавлением после объявления типа формального параметра знака равенства, после которого записывается константное выражение. Рассмотрим функцию, которая рассчитывает силу тяжести бруска в форме прямоугольного параллелепипеда в зависимости от его размеров, материала (плотности) и ускорения свободного падения.
program Funumpar;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
a,b,c,ro,g:Real;
p1,p2,p3,p4:Real;
function St(a:Real=4; b:Real=5; c:Real=6;
ro:Real=7.8; g:Real=9.81):Real;
begin
st:=a*b*c*ro*g;
end;
begin// РАЗДЕЛ ОПЕРАТОРОВ ПРОГРАММЫ
ReadLn(a,b,c,ro,g);
p1:=St(a,b,c,ro,g);
p2:=St(); //или p2:=st;
p3:=St(a,b,c,ro);
p4:=St(a,b,c);
WriteLn('p1=',p1:7:2,' p2=',p2:7:2
,' p3=',p3:7:2,' p4=',p4:7:2);
ReadLn;
end.
При первом обращении к функции будет вычислена сила тяжести бруска при значениях всех параметров, введенных в основной программе с клавиатуры, во втором случае, наоборот, все параметры берутся по умолчанию, т.е. вычисления ведутся с теми значениями, которые заданы в заголовке функции. В третьем случае по умолчанию берется только ускорение свободного падения, а в четвертом случае – плотность вещества и ускорение свободного падения.
Аргументы по умолчанию должны быть самыми правыми (последними) в списке параметров подпрограммы, при передаче параметров действует правило: если пропущенный параметр не является последним, то и все параметры, стоящие справа от пропущенного тоже пропускаются. Принимая это правило во внимание, следует сделать вывод о том, что последними в списке параметров по умолчанию надо указывать те параметры, которые чаще всего остаются равными заданным по умолчанию значениям. Пропускать при вызове можно только несколько последних параметров по умолчанию. Нельзя вызвать функцию следующим образом: p1:=St(a,,c,ro,g). Значения по умолчанию могут задаваться не всем, а только некоторым параметрам подпрограммы. При этом они должны располагаться в конце списка параметров, так как действует правило: если какой-то параметр имеет значение по умолчанию, то и все последующие параметры должны иметь значения по умолчанию.
