Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Р4_Подпрог_печать.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
169.47 Кб
Скачать

Иллюстрация свойств параметр-значение и параметр-переменная

Дано: Значения X и Y;

процедура ABC(A: Integer; Var B: Real) с формальным параметром-значение A и параметром-переменная B, внутри процедуры значения A и B удваиваются.

implementation

Const X: Integer = 5;

Y: Integer = 6;

procedure ABC(A: Integer; Var B: Real); //A и Var B формальные параметры

begin

A:= 2*A; //А и B удваиваем

B:= 2*B;

end;

Вызовем процедуру с фактическими параметрами X и Y, распечатаем значения X и Y.

……………………

procedure Проц1_Обработки_События(……..);

ABC(X, Y); //фактические параметры X=5, Y=6

{преобразуем X и Y в строковое значение и распечатаем их, отделив табуляцией}

Label1.Caption := IntToStr(X) + #9 + IntToStr(Y);

………………

В результате будут выведены соответственно значения 10 и 12. Параметр-значение не передаёт изменённые значения из процедуры в программу. Параметр-переменная изменённое значение передаёт в программу.

Если обратиться к процедуре с фактическими параметрами ABC(X+10, Y), получим прежний результат.

Обращение к процедуре с фактическими параметрами ABC(X, Y+10) компилятор объявит ошибочным.

Рекомендации по выбору типа формальных параметров

При подстановке фактических параметров, обращаясь к подпрограмме, следите за соответствием:

  • количество формальных и фактических параметров должно быть одинаковое;

  • порядок следования формальных и фактических параметров должен совпадать;

  • тип фактического параметра должен совпадать с соответствующим типом формального параметра.

Без необходимости описание всех формальных параметров как параметров-переменных нежелательно по двум причинам.

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

Не рекомендуется использовать параметры-переменные в заголовке функции, так как функция сама возвращает единственное значение. Если результатом работы подпрограммы должно быть несколько значений, то её следует оформить в виде процедуры.

Пример 2. Процедура с параметрами

Дано: несколько текстовых полей для ввода вещественных чисел.

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

{Параметр Var Symb - формальный параметр-переменная обеспечит передачу введённого символа из процедуры Inp_Real2 в вызывающую процедуру}

procedure Inp_Real2(Var Symb: Char);

begin

If Not (Symb in ['0'..'9', ',', '-', '+', #8]) //допустимые символы

then Symb := #0 ; //подмена недопустимого символа пустым значением

end;

{Вызов процедуры Inp_Real2 процедурой TForm1.LabeledEdit1KeyPress }

procedure TForm1.LabeledEdit1KeyPress(Sender: TObject; var Key: Char);

begin

Inp_Real(Key); {Key - фактический параметр, значение будет передано в

вызывающую процедуру TForm1.LabeledEdit1KeyPress}

end;

По аналогии с Inp_Real2 можно разработать процедуру для ввода целых чисел, она будет отличаться только множеством допустимых символов. Недостаток процедуры Inp_Real2 - не исключает ввода нескольких запятых.