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

Пример 1. Процедуры без параметров

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

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

В разделе implementation определим глобальную переменную Key символьного типа и процедуру без параметров Inp_Real1.

implementation

{$R *.dfm}

Var Key: Char; {глобальная переменная Key будет использована в

процедуре Inp_Real1 без дополнительного описания}

procedure Inp_Real1; //контроль ввода символов вещественных чисел

begin

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

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

end; //конец описания процедуры

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

implementation

Var Key: Char; {глобальную переменную Key доступна в процедуре

Inp_Real1 без дополнительного описания}

procedure Inp_Real1; //контроль ввода символов вещественных чисел

begin

If Not(Key in ['0'..'9', ',', '-', '+', ’.’, #8]) // Key – глобальная переменная

{все остальные символы недопустимы}

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

end; //конец описания процедуры

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

begin

Inp_Rea1; //вызов процедуры

end;

………………………………

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

begin

Inp_Rea1; //вызов процедуры

end;

В данном примере процедура Inp_Rea1 вызывается девять раз – это одно из достоинств использования процедур. Другое достоинство – если процедура отлажена, то возникновение ошибки выполнения исключено.

Имя глобальной переменной Key, используемой в процедуре Inp_Rea1, выбрано не случайно, в процедуре обработки события TForm1.LabeledEdit1KeyPress(Sender: TObject; var Key: Char) через параметр-переменную Key формируется строка ввода.

Если задать другое имя глобальной переменной, то строка ввода не будет сформирована, это безусловный недостаток.

Способ передачи данных в процедурах без параметров, через глобальные переменные хорош в простейших случаях, Однако, использование только глобальных связей исключает возможность вызова процедуры с другими параметрами, делает программу запутанной и сложной в отладке. Реализация обмена данными через объявление параметров процедур более эффективный способ.

Параметры, указываемые в заголовках подпрограмм при их описании, - формальные параметры. Параметры, указываемые при вызове подпрограмм, - фактические параметры.

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

Procedure ABC(a: Real; b: Integer; с: Char);

Однотипные параметры объединяют в подсписки, например,

Function Fab(a,b: Real): Real;

Объявленные формальные параметры процедур могут быть следующих типов:

  • параметры-значения;

  • параметры-переменные, перед которыми должно стоять зарезервированное слово Var и после которых указывается их тип;

  • параметры-процедуры, перед которыми должно стоять зарезервированное слово procedure;

  • параметры-функции, перед которыми должно стоять зарезервированное слово function и после которых указывается тип возвращаемого значения;

  • нетипизированные параметры, перед которыми должно стоять зарезервированное слово Var, а указание типа отсутствует.

В этой работе будем использовать только параметры-значения и параметры-переменные, остальные типы параметров рассмотрим позднее.

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

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

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