Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по Паскалю.doc
Скачиваний:
61
Добавлен:
04.06.2015
Размер:
7.62 Mб
Скачать

Var a, b : Integer;

Function Nemo(Var x : Integer; y : Integer) : Integer; x – параметр-переменная,

y – параметр-значение

Begin

x := x + y;

a := y;

Nemo := x;

End;

Begin

a := 1;

b := 2;

WriteLn(‘Nemo=’, Nemo(a, b),‘ a=’, a, ‘ b=’, b);

ReadLn;

End.

Результат работы программы:

Nemo=2 a=2 b=2

Значение переменной aбудет испорчено, так как значения переменныхaи xбудут записываться воднойячейке памяти, а функцияNemoвместо3примет значение, равное2. Ошибки такого рада трудно найти, поэтому в функциях и не рекомендуется использовать параметры-переменные,

15.в заголовке функции нельзя использовать формальные параметрыбезымянныхтипов (стандартныетипы считаютсяпоименованными):

Function Func(x : 1..10; r : array [1..20] Of Real) : Real;

Типы формальных параметров xиr являются безымянными, так как не относятся к стандартным. Поэтому в вызывающей эту функцию программе необходимо определить новые типы данных:

Type TCount = 20;

TVector = Array [1 .. TCount] Of Real;

TInterval = 1 .. 10;

а в заголовке функции использовать эти новые типы:

Function Func(x : TInterval; r : TVector) : Real;

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

  • их типдолжен быть определен в разделе описания типовType,

  • они не должны быть стандартными,

  • они не должны быть вложенными,

  • они должны иметь только параметры-значения,

  • они должны быть откомпилированы с использованием директивы компилятору {$F+}– использованиедальнего типа вызоваподпрограмм.

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

Program Param_func;

Uses CRT;

Type TFunс = Function (x, y: Integer): Integer; описан процедурный тип TFunc – целой функции двух аргументов целого типа

Var a, b, c: Integer;

{$F+} директива компилятору- использование дальнего типа вызова подпрограмм

Function Add(x, y: Integer): Integer; функция для сложения двух переменных

Begin

Add := x + y;

End;

Function Mult(x, y: Integer): Integer; функция для перемножения двух переменных

Begin

Mult := x * y;

End;

Function Funny(x, y: Integer): Integer;

Begin

Funny := (x + y) * (x - y);

End;

{$F-} отмена директивы

функция, использующая параметр-функцию operation

Function Par_func(m, n : Integer; operation : TFunc): Integer;

Begin

Par_func := operation(m, n);

End;

Begin

ClrScr;

a := 5;

b := 3;

c := Par_func(a, b, Add); фактические параметры для параметров-функций не указываются!

WriteLn('c=', c);

c := Par_func(a, b, Mult);

WriteLn('c=', c);

c := Par_func(a, b, Funny);

WriteLn('c=', c);

ReadLn;

End.

На экран будет выведено:

с=8

с=15

с=16

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