- •Место процедур в модуле
- •Вложенные описания процедур
- •Параметры процедур
- •Пример 1. Процедуры без параметров
- •Иллюстрация свойств параметр-значение и параметр-переменная
- •Рекомендации по выбору типа формальных параметров
- •Пример 2. Процедура с параметрами
- •Пример 3. Процедура контроля алфавита вещественных чисел
- •Пример 4. Функция
- •Постановка задачи
- •Пример 5. Вычисление значений функции
- •Содержание отчета
Пример 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. Фактическим параметром-переменной при вызове может быть только переменная.
