Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Osnovy_informatiki_-_7_Parametry_podprogramm

.pdf
Скачиваний:
12
Добавлен:
13.02.2015
Размер:
177.45 Кб
Скачать

Область видимости и время жизни переменных

procedure p; var i: integer;

procedure q( j: integer);

// имя q принадлежит области видимости процедуры p var j: real; // - ошибка - повторное объявление

var i: real; // - верно – перекрытие области видимости

begin

. . .

end; begin

. . .

end;

21

27.10.2012

Чердынцева М.И. мехмат ЮФУ

Статические локальные переменные

procedure p; const n: integer = 0;

begin n:=n+1;

writeln ( n, ‘-тый вызов процедуры P ‘);

end;

22

27.10.2012

Чердынцева М.И. мехмат ЮФУ

Перегрузка имен подпрограмм

В одном пространстве имен процедуры (функции) могут иметь одинаковые имена, если они имеют различные списки параметров

Полиморфизм – использование одного имени (одного знака операции) для выполнения родственных действий над разными типами данных

23

27.10.2012

Чердынцева М.И. мехмат ЮФУ

Примеры

writeln(a,b) – полиморфная процедура: параметры различных типов.

a+b – операция «+» используется для различных типов

procedure swap(var a,b: integer);

...

procedure swap(var a,b: real);

...

24

27.10.2012

Чердынцева М.И. мехмат ЮФУ

Сигнатура подпрограммы

_swap_vi_vi

_swap_vr_vr

В сигнатуру включаются только параметры, но не включается тип результата, возвращаемого функцией

function f (a: integer):integer;

function f (a: integer):real; //!!! Перегрузки нет

Тип фактического параметра определяет, какая из перегруженных подпрограмм будет вызвана

25

27.10.2012

Чердынцева М.И. мехмат ЮФУ

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

procedure DoOperation(a,b: real; var res: real; op: char=’+’); begin

case op of

’+’: res:=a+b; ’-’: res:=a-b;

...

end;

end;

...

DoOperation(2,3,res);

DoOperation(2,3,res,'*');

26

27.10.2012

Чердынцева М.И. мехмат ЮФУ

Предварительное описание

procedure p(i: integer); forward; // Предварительное объявление. // p будет определена далее

procedure q; begin

p(3); // можно вызывать end;

procedure p(i: integer); // определение begin

...

end;

27

27.10.2012

Чердынцева М.И. мехмат ЮФУ

Проблемы при перегрузке

procedure A(i: integer);

. . .

procedure A(i: real); overload;

. . .

var b: byte;

...

A(b); // ошибка - неоднозначность при вызове процедуры

28

27.10.2012

Чердынцева М.И. мехмат ЮФУ