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

Процедуры и функции

Как записывается текст песни? Припев даётся один раз. Если нужно повторять его, то указывается одно слово – припев. Зачем же повторять несколько раз одно и тоже? Этот же принцип действует и в программировании. Если какая-нибудь часть программы многократно повторяется, то её оформляют отдельно от основной программы и называют подпрограммой. К ней обращаются при необходимости ее использования.

Более того, рекомендуется большую задачу разбивать на отдельные смысловые места, и программировать их отдельно, а затем объединять в единую программу.

Подпрограммы располагаются в разделе описания основной программы. Выполнение программы начинается с выполнения операторов основной программы. При необходимости выполнения программы, она вызывается по имени. Данные из основной программы передаются в подпрограмму (входные данные), которая начинает выполняться. Затем результаты подпрограммы (входные данные) передаются в основную программу в то место, откуда был сделан вызов подпрограммы, и продолжает выполняться основная программа.

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

Имена, представленные в разделе описаний подпрограммы, называются локальными. Они действуют только в рамках подпрограммы и недоступны операторам основной программы.

В языке программирования Паскаль есть два вида подпрограмм:

Procedure – процедура и

Function - функция.

Процедуры и функции аналогичны программам в миниатюре и имеют общее название – подпрограммы. Применение подпрограмм дает возможность уменьшить число повторений одной и той же последовательности операторов, а также конструировать программу как набор отдельных подпрограмм (модулей), т.е. по принципу структурного программирования.

Описание процедур

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

Procedure имя (список формальных параметров);

Раздел описаний

Begin

Раздел операторов

End;

Раздел описаний процедуры подобен разделу описаний программы и состоит из разделов меток, констант, типов, переменных, процедур и функций. Он может отсутствовать вообще. Раздел операторов заключён в операторные скобки Begin End;

Процедура может быть и без параметров, тогда в заголовке указывается только её имя. С помощью параметров осуществляется передача исходные данных в процедуру, а также передача результатов работы в вызвавшую её программу. Список формальных параметров может включать в себя:

параметры – значений

параметры - переменных (перед ними должно стоять слово var),

параметры – процедуры (перед ними должно стоять служебное слово Procedure),

параметры – функции (перед ними должно стоять служебное слово Function)

Выполнение процедуры происходит при её вызове по имени:

Имя (фактические параметры).

Между формальными и фактическими параметрами должно быть полное соответствие:

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

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

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

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

Хотя параметры процедуры делятся на отдельные виды, но в простых программах чаще всего используются параметры-значения и параметры-переменные. Данные этих параметров передаются в обоих направлениях, из программы в процедуру и наоборот.

Параметры–значения (перед ними не стоит слово var) можно передавать только в одном направлении: из программы в процедуру. То есть, параметры-значения могут быть только входным для процедуры, а параметры-переменные как входными, так и выходными.

Процедура может содержать несколько операторов и несколько результатов выполнения. Каждый результат обозначается своим именем. В основной программе после вызова процедуры мы можем использовать эти результаты, сохраняя те же имена или давая другие.

Пример: Пусть в программе необходимо многократно вычислять площадь квадрата sк=а^2 и площадь прямоугольника sp=a*b при различных значениях сторон а и b.

Procedure Place (x, y: real);

Begin

Sk:=x*x

Sp:=x*y

End;

Вызвать эту процедуру можно, используя фактические переменные:

Place (A, B); где значения параметра А и В передаются в процедуру параметром X, Y.

Другой вариант:

Procedure Place (x, y: real; Var Sk, Sp: real);

Тогда обращение к ней: Place (A, B, S1, S2);

При вызове процедуры вместо переменных А, В можно указать конкретные значения: Place (2.5, 4, S1, S2).

Допускается одинаковое обозначение соответствующих формальных и фактических параметров.

Процедуры возвращают результат в основную программу не только при помощи параметров – переменных, но непосредственно изменяя глобальные переменные. Переменные, описанные в основной программе, являются глобальными по отношению к внутренним процедурам и функциям. Переменные, описанные внутри процедур и функций, являются локальными. Локальные переменные существуют только при выполнении процедуры и недоступны в основной программе. Переменная с символьного типа, описанная в процедуре Podschet, является локальной, а переменная s целого типа, описанная в основной программе, является глобальной.

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