Процедуры и функции
При решении сложных объемных задач часто целесообразно разбивать их на более простые. Метод последовательной детализации позволяет составить алгоритм из действий, которые, не являясь простыми, сами представляют собой самостоятельные алгоритмы. В этом случае говорят о подпрограммах. Использование подпрограмм позволяет сделать основную программу более наглядной, понятной, а в случае, когда одна и та же последовательность команд встречается в программе несколько раз, даже более короткой и эффективной. Роль подпрограмм выполняют процедуры и функции. Процедура - именованная последовательность инструкций, реализующая некоторое действие. Функция - отличается от процедуры тем, что она должна обязательно выработать значение определенного типа. Процедуры и функции, используемые в программе, соответствующим образом описываются до первого их упоминания. Вызов процедуры (функции) производится по их имени. Подпрограммы в Pascal имеют параметры. Параметры - значения, передаваемые в процедуру или функцию в качестве аргументов. Формальные - параметры, указываемые при описании (имена, под которыми будут фигурировать передаваемые данные внутри подпрограммы) и их типы. При вызове подпрограммы вместе с ее именем должны быть заданы все необходимые параметры в том порядке, в котором они находятся в описании. Фактические - параметры, указываемые при вызове подпрограммы. Формат описания процедуры: Раздел описаний может иметь такие же подразделы, как и раздел описаний основной программы. Однако описанные там объекты «видимы» лишь в этой процедуре. Они локальные, как и имена формальных параметров. Глобальные - доступные для использования объектыдля подпрограммы, описанные ранее в разделе описаний основной программы и не переопределенные в процедуре. Легко заметить схожесть структуры программы целиком и любой из ее процедур, ведь и процедура и основная программа реализуют некий алгоритм, просто процедура не дает решения всей задачи. Отличие в заголовке и в знаке после End. Function < Имя функции> (< Имя форм. параметра 1>: < Тип>; < Имя форм. параметра 2>: < Тип>?): < Тип результата>; В теле функции обязательно должна быть хотя бы команда присвоения такого вида: < Имя функции>: =< Выражение>; Вызов процедуры представляет в программе самостоятельную инструкцию: < Имя процедуры> (< Фактический параметр 1>, < Фактический параметр 2>?); Типы фактических параметров должны быть такими же, что и у соответствующих им формальных. Вызов функции должен входить в выражение. При вычислении значения такого выражения функция будет вызвана, действия, находящиеся в ее теле, будут выполнены, в выражение будет подставлено значение результата функции. Пример 14: Из 3х введенных чисел найти максимальное. Для решения воспользуемся описанием функции, принимающей значение максимального из двух чисел, которые передаются в нее в виде параметров. Program Fn; If A> B Then Max: =A {значение максимального из них } End; Writeln('Введите три числа'); End. Обратите внимание на краткость тела программы и на прозрачность действий внутри функции. Формальные параметры A и B, используемые в подпрограмме, не имеют никакого отношения к переменным A и B из основной программы. Существует два способа передачи фактических параметров в подпрограмму: по значению и по ссылке. В первом случае: значение переменной - фактического параметра при вызове подпрограммы присваивается локальной переменной, являющейся формальным параметром подпрограммы. Что бы ни происходило с локальной переменной, это никак не отразится на соответствующей глобальной. Иногда требуется произвести в подпрограмме действия над самими переменными, указанными в качестве фактических параметров. Тогда первый случай модифицируется: при обращении к подпрограмме не происходит формирования локальной переменной - формального параметра. На время выполнения подпрограммы имя этой локальной переменной будет указывать на ту же область памяти, что и имя соответствующей глобальной переменной. Если в этом случае изменить локальную переменную, изменятся данные и в глобальной. При передаче параметров по ссылке перед именем переменной (формального параметра) при описании подпрограммы ставится слово Var. Теперь использование в качестве фактических параметров выражений или непосредственных значений уже не допускается - они должны быть именами переменных. Пример 15: Расположить в порядке неубывания три целых числа. Program Pr; Writeln('Введите три числа'); End.
|