Персональная страничка
| ||
Предыдущий раздел:
Следующий раздел:
Очень часто некоторые последовательности инструкций, встречающиеся в программе, не идентичны, но очень близки по форме. Особенно важна ситуация, когда различие между различными вхождениями инструкций можно устранить систематической заменой идентификаторов или выражений.
Пример: В описанном ранее алгоритме сортировки методом выбора, требовалось искать минимальный элемент в несортированной части массива и ставить его на левый край несортированной части. Отличие в действиях на каждом шаге алгоритма сводилось к изменению одного параметра – номера индекса, с которого начиналась несортированная часть.
Такие инструкции можно записать в виде процедуры, работа которой зависит от одного или нескольких параметров. Параметры описываются в скобках после имени процедуры.
Пример: Программа, печатающая произведение двух чисел с помощью процедуры.
var x, y: integer; procedure Mult(a, b: integer); {Заголовок процедуры с описанием двух параметров} var c: integer; begin c:=a*b; {Значения параметров используются для вычисления c} writeln(c); end; begin readln(x, y); Mult(x, y); {Вызов процедуры с указанием значений параметров} end.
Программа запросит у пользователя значения переменных x и y, затем вызовет процедуру Mult, указав при этом, что значения параметров a и b при данном вызове процедуры должны быть равны значениям переменных x и y. Процедура выведет произведение x*y.
Переменные a и b в заголовке процедуры называются формальными параметрами. То, что подставляется при вызове процедуры (в примере это переменные x и y), называется фактическими параметрами.
Формальный параметр внутри процедуры может использоваться как обычная локальная переменная. То есть их можно использовать в выражениях и даже присваивать им новые значения. Отличие от просто локальных переменных в том, что при вызове процедуры обязательно указывается, чему они изначально равны.
В качестве фактических параметров в данном примере могут выступать произвольные выражения. Например, возможен такой вызов процедуры: Mult(x*y+1, 2). Значения этих выражений присвоятся формальным параметрам, и процедура напечатает значение выражения (x*y+1)*2.
Следующий раздел:
Предыдущий раздел:
Мааленький недочет.
«Например, возможен такой вызов процедуры: Mult(x/y+1, 2)»
ничего не получится, так как тип формальных переменных не соответствует типу фактических переменных)) и тип локальной переменной не соответсвует типу ожидаемого результата.
Кстати, да. Спасибо. Исправил на умножение.