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

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

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

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

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

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

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

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

Пример 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 - не исключает ввода нескольких запятых.

Пример 3. Процедура контроля алфавита вещественных чисел

Для расширения возможностей контроля ввода данных, исключающих ввод нескольких запятых, воспользуемся стандартной функцией Pos.

Pos(Substr: string; S: string): Integer - функция ищет подстроку Substr (или отдельный символ) в строке S и возвращает значение позиции первого символа Substr в строке S. Если вхождение Substr не найдено, то функция возвращает ноль. Функция чувствительна к регистру.

Например. Pos(‘,’, Edit1.Text), в поле Edit1.Text введено 123 (запятой нет) - функция возвратит 0; после ввода запятой 123, - функция вернёт значение 4.

procedure Inp_Rea3(Var Symb: Char ; Str_Ed : string);

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

Str_Ed – значение строки отображаемой в поле ввода, параметр-значение,

при вызове процедуры будет подставлено фактическое имя поля}

begin

case Symb of

'0'..'9': ; // допустимые символы

',','.' : //введена точка или запятая

begin

if Symb = '.' //введена точка

then Symb := ','; // подмена точки запятой

{проверка наличия в отображаемой строке Str_Ed запятой}

if Pos(',', Str_Ed) <> 0 // строка Str_Ed уже содержит запятую

then Symb:=Char(0); // подмена запятой пустым символом

end;

#8 : ; // <Backspace>

else Symb :=Chr(0); //подмена недопустимого символа пустым

end;

Обращение к процедуре Inp_Real3.

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

begin

Inp_Real4 (Key, LabeledEdit1.Text);

end;

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