Что такое подпрограмма в паскале

Что такое подпрограмма в паскале

В прошлом уроке мы разобрали один вид подпрограмм в Паскале — функции, а сегодня разберём второй — процедуры. Сегодня мы узнаем о том, как она описывается, как вызывается в основной части и другие связанные с ней вопросы. Продолжение ниже.

Процедуры — подпрограммы, которые не возвращают значение, являются отрезком программы для дальнейшего его использования.

Предлагаю рассмотреть структуру процедуры на примере, предложенном мною ниже:

Procedure Prim(var a, b, c:integer); //Задание переменных в процедуру из программы
var M:integer; //Описание локальной/ных переменных
begin
A:=B+C; //Складывание чисел
M:=A/B; //Присваивание локальной переменной значение А/В
A:=A*C*B*M; //Перемножение
end; //Конец функции

Главные отличия от функции:
1) Нет описания типа возвращаемого значения (в первой строке после скобок стоит сразу точка с запятой);
2) Не возвращает значение, а значит возврат значения не пишется и процедуре ничего не присваивается

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

Как же вызвать процедуру в основной программе?

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

Для вызова процедуры необязательно писать передаваемые в процедуру параметры с таким же типом, важно, чтобы эти параметры были тех же типов и шли в том же порядке. Например:

В данном случае мы значение a присваиваем a, значение k присваиваем b, a значение m присваиваем c. Если бы k было типа real, то и b должно быть типа real.

Пример программы, использующей функцию и процедуру вместе, а также с разными типами:

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

п. 1. Что такое процедура и зачем она нужна

Читайте также:  Удаленный реестр что это

Часто некоторую последовательность действий требуется повторить в нескольких местах программы. Чтобы не тратить время и усилия на копирование, в языке программирования Pascal предусмотрены средства для организации подпрограмм. Программист имеет возможность присвоить последовательности операторов некоторое имя и использовать это имя в качестве сокращенной записи в тех местах, где встречается соответствующая последовательность действий. Таким образом, ПРОЦЕДУРА — это именованная последовательность операторов.

Использование процедур позволяет:

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

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

3) Разбиение программы на отдельные связанные процедуры позволяет также вести разработку коллективу программистов. Наконец, если в нескольких местах программы последовательности операторов близки, но не идентичны, то задавая параметры в процедуре, ее можно настроить на конкретное выполнение.

В сущности вы уже пользовались процедурами, когда записывали команды ввода и вывода. Read, Readln, WriteиWriteln–этотоже процедуры. Но они уже готовы и мы пользуемся ими, даже незадумываясь, как они реализованы. Это так называемые стандартные процедуры, которые поставляются вместе с транслятором языка PASCAL. Кроме стандартных процедур в языке предусмотрено создание своих (пользовательских) процедур.

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

Подпрограмма должна быть описана до того, как она будет использована в программе.

Любая процедура начинается с заголовка, который, в отличие от заголовка основной программы, в процедуре является обязательным. Заголовок состоит из зарезервированного слова Procedure, за которым следует имя процедуры, а далее в круглых скобках — список формальных параметров.

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

Читайте также:  Dns unlocker что это за программа

1. Сокращение объема программы.

2. Улучшение структуры программы с точки зрения читаемости

3. Уменьшение вероятности ошибок и облегчение процесса от-

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

4.1. Процедуры

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

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

Например, процедура для вычисления степени целого числа:

Procedure Degree(x,y:integer;var st:longist); <заголовок процедуры>var i: integer;

i=1 to y do st:=st*x;

Результат передается в основную программу.

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

Фактический параметр – это параметр, который передается процедуре при обращении к ней.

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

Формальный параметр – это переменная, фиктивно присутствующая в процедуре и определяющая тип и место подстановки фактических параметров. Все формальные параметры делятся на два вида: параметры-переменные и параметры-значения.

1) Параметры-переменные (st) − это формальные параметры, перед которыми стоит служебное слово var . Они передаются по ссылке, когда необходимо передать новые значения в точку вызова процедуры из программы.

2) Параметры-значения (x, y). Перед ними не ставится служебное слово var . Передается только копия значений этих параметров; внутри процедуры можно производить любые действия с данными формальными параметрами, но их изменения никак не отражаются на значениях соответствующих фактических параметров.

Глобальные переменные – это те переменные, которые объявлены в описании основной части.

Локальные переменные – это те переменные, которые объявлены

Читайте также:  Nvidia nforce 7025 630a amd k10

в процедурах и функциях.

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

Пример применения подпрограммы нахождения n -степени чис-

ла a ( a , n – целые, n >0).

Program PR1; var a,n : integer; s : longint;

procedure Degree(x,y : integer; var st : longint) var i : integer;

for i:=1 to y do st:=st*x;

writeln(‘Введите два числа’); < ввод значений >readln(a,n);

Процедура вызывается как оператор, состоящий из имени процедуры. В круглых скобках передаются фактические параметры. В нашем примере фактические параметры a , n и s передают свои значения соответственно формальным параметрам x , y и st . После завершения работы процедуры переменные a и n имеют те же значения, что и при вызове, а s получает новое значение.

Пусть a= 3 и n= 4. Когда в программе встречается оператор Degree(a,n,s), то компьютер выполняет следующие действия:

− выделяет память для переменных, описанных в процедуре

− присваивает формальным параметрам значения фактических: x:=a (x=3), y:=n (y=4), st:=s;

− выполняет операторы процедуры, то есть вычисляет 3 4 ;

− присваивает полученное значение переменной s , а переменные a и n остаются прежними; после этого переходит к выполнению следующих действий программы.

На рис. 1 показано распределение памяти между переменными, используемыми в процедуре и в основной программе. Прямоуголь-

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

После выполнения операторов (по последнему end ) идет возврат в точку вызова, при этом если фактические параметры передавались по значению, то они остаются неизменными, а если передавались по ссылке, то в ячейке с данным адресом появится новое значение (рис. 2).

Ссылка на основную публикацию
Adblock detector