Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
5 Подпрограммы.doc
Скачиваний:
28
Добавлен:
09.02.2015
Размер:
369 Кб
Скачать
☆

Перегружаемые подпрограммы

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

  1. program Funperegr;

  2. {$APPTYPE CONSOLE}

  3. uses

  4. SysUtils;

  5. var

  6. a,b,c:Real;

  7. k,l,m:Integer;

  8. function Divide(a,b:Real):Real; overload;

  9. begin

  10. Result:=a/b;

  11. end;

  12. function Divide(a,b:Integer):Integer; overload;

  13. begin

  14. Result:=a div b;

  15. end;

  16. begin// РАЗДЕЛ ОПЕРАТОРОВ ПРОГРАММЫ

  17. ReadLn(a,b);

  18. c:= Divide(a,b);

  19. ReadLn(k,n);

  20. m:= Divide(k,l);

  21. WriteLn('c =',c:6:2,' m=',m);

  22. ReadLn;

  23. end.

При вводе a=3 иb=2 будет вызвана функция, выполняющая деление вещественных чисел, так какaиb– вещественные переменные, и будет выведеноc = 1.5. При вводеk=3 иn=2 будет вызвана функция, выполняющая деление целых чисел, так какkиn– переменные целого типа, и будет выведеноm=1.

Параметры со значениями по умолчанию

Для параметров в объявлении подпрограмм можно задавать параметры по умолчанию. Значение по умолчанию – это значение параметра, которое используется при вызове подпрограммы, если в нее не передано фактическое значение. Использование параметров по умолчанию равносильно разрешению указывать в вызове подпрограммы не все необходимые параметры.

Значения по умолчанию задаются добавлением после объявления типа формального параметра знака равенства, после которого записывается константное выражение. Рассмотрим функцию, которая рассчитывает силу тяжести бруска в форме прямоугольного параллелепипеда в зависимости от его размеров, материала (плотности) и ускорения свободного падения.

  1. program Funumpar;

  2. {$APPTYPE CONSOLE}

  3. uses

  4. SysUtils;

  5. var

  6. a,b,c,ro,g:Real;

  7. p1,p2,p3,p4:Real;

  8. function St(a:Real=4; b:Real=5; c:Real=6;

  9. ro:Real=7.8; g:Real=9.81):Real;

  10. begin

  11. st:=a*b*c*ro*g;

  12. end;

  13. begin// РАЗДЕЛ ОПЕРАТОРОВ ПРОГРАММЫ

  14. ReadLn(a,b,c,ro,g);

  15. p1:=St(a,b,c,ro,g);

  16. p2:=St(); //или p2:=st;

  17. p3:=St(a,b,c,ro);

  18. p4:=St(a,b,c);

  19. WriteLn('p1=',p1:7:2,' p2=',p2:7:2

  20. ,' p3=',p3:7:2,' p4=',p4:7:2);

  21. ReadLn;

  22. end.

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

Аргументы по умолчанию должны быть самыми правыми (последними) в списке параметров подпрограммы, при передаче параметров действует правило: если пропущенный параметр не является последним, то и все параметры, стоящие справа от пропущенного тоже пропускаются. Принимая это правило во внимание, следует сделать вывод о том, что последними в списке параметров по умолчанию надо указывать те параметры, которые чаще всего остаются равными заданным по умолчанию значениям. Пропускать при вызове можно только несколько последних параметров по умолчанию. Нельзя вызвать функцию следующим образом: p1:=St(a,,c,ro,g). Значения по умолчанию могут задаваться не всем, а только некоторым параметрам подпрограммы. При этом они должны располагаться в конце списка параметров, так как действует правило: если какой-то параметр имеет значение по умолчанию, то и все последующие параметры должны иметь значения по умолчанию.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]