Файл: Основы программирования на языке Pascal (Использование процедур в языке Pascal).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 28.06.2023

Просмотров: 70

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

ВВЕДЕНИЕ

Если в программе имеется несколько одинаковых (или очень похожих) фраг­ментов, то возникает естественный вопрос: нельзя ли оформить повторяю­щийся фрагмент в виде отдельного блока, а затем обращаться к нему в программе столько раз, сколько требуется. Аналогичная идея возникает и при отладке больших программ — если разделить программу на отдельные самостоятельные фрагменты, то отладить ее по частям будет проще. Эти ра­зумные мысли имеют поддержку во всех языках высокого уровня, которые предоставляют программисту такое удобное средство разбиения программы на части, как подпрограммы.

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

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

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

Многие подпрограммы невелики по размерам и содержат десятки строк текста. Написать такие программы можно и без под­программ. Иное дело — создание проектов, насчитывающих тысячи и де­сятки тысяч строк, в которых задействованы целые команды программистов. Писать такие программы как единое целое, без разделения на самостоятель­ные фрагменты, просто невозможно. В курсовой работе рассмотрим варианты реализации подпрограмм средствами языка Pascal.

1 ТЕОРЕТИЧЕСКАЯ ЧАСТЬ

1.1 Общие сведения о реализации подпрограмм

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


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

- стандартные (встроенные);

- определенные пользователем.

Встроенные (стандартные) процедуры и функции входят в стандартные биб­лиотеки и могут вызываться по имени без предварительного описания (напри­мер, процедуры ввода и вывода read и write). Наличие стандартных процедур существенно облегчает разработку программ, и этот инструмент широко используется при программировании на языке высокого уровня.

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

Процедуры и функции пользователя разрабатываются самим программистом и поме­щаются в раздел описаний процедур и функций. Их вызов для выполнения записывается в разделе операторов основной программы или другой подпрограммы.

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

В общем случае подпрограмма имеет ту же структуру, что и программа.

Объявление процедуры:

procedure ИмяПроцедуры (ФормальныеПараметры) ;

{ описательная часть процедуры }

Begin

{ Инструкции исполнительной части процедуры }

end;

Объявление функции:

Function ИмяФункции (ФормальныеПараметры) : ТипРезультата;

{ описательная часть функции }

Begin

{ Инструкции исполнительной части функции }

ИмяФункции := Результат;

end;

1.2 Использование процедур в языке Pascal

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

Структура процедуры повторяет структуру программы, это "программа в ми­ниатюре", состоящая из заголовка и тела. В отличие от программы, для про­цедур и функций наличие заголовка обязательно.

Заголовок состоит из зарезервированного слова procedure, идентификатора (имени) процедуры и необязательного списка формальных параметров. Тело процедуры по своей структуре аналогично обычной программе:

procedure ИмяПроцедуры(ФормальныеПараметры) ;

{ Описательная часть процедуры }

begin

{ Инструкции исполнительной части процедуры }


end;

В конце тела процедуры, как и в конце программы, стоит end, однако после end ставится точка с запятой, а не точка.

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

ИмяПроцедуры(ФактическиеПараметры);

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

Для принудительного выхода из процедуры в ее теле записывается оператор завершения exit, который обеспечивает выход во внешний блок (обычно — в основную программу).

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

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

2. При использовании осмысленных и понятных имен процедур текст ос­новной программы становится не только более коротким, но и более по­нятным и выразительным.

3.Использование процедур позволяет упростить процесс внесения измене­ний в повторяющиеся фрагменты, т. к. исправления делаются один раз в процедуре, а не несколько раз в программе.

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

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

1.3 Механизм передачи параметров

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


Соответствие между формальными и фактическими параметрами обеспечи­вается выполнением следующих требований:

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

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

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

В языке Pascal типом любого параметра в списке формальных параметров может быть только стандартный или ранее объяв­ленный тип.

Например, нельзя объявить процедуру с заголовком:

procedure proc(m,n: integer; k: 1..5);

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

type range : 1. .5;

procedure proc(m,n: integer; к: range);

Имеются два основных вида параметров, которые отличаются способом их передачи в подпрограмму:

- параметры-значения;

- параметры-переменные.

Начиная с версии Turbo Pascal 7.0, появилась еще одна разновидность пара­метров — параметры-константы. В Delphi они также используются.

1.3.1. Параметры-значения

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

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

Поэтому параметры-значения нельзя использовать для передачи результатов из подпрограммы в основную программу. К сожалению, нарушение этого требования — это типичная ошибка начинающих, которая не обнаруживается компилятором, но выражается в неверных результатах работы программы. Ошибки, которые трудно обнаружить, лучше совсем не делать, поэтому будь­те внимательны к параметрам подпрограмм.

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


1.3.2. Параметры-переменные

Параметры-переменные необходимо использовать, прежде всего, для воз­врата результатов работы подпрограммы в основную программу.

В списке формальных параметров перед ними ставится ключевое слово var.

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

В этом случае при вызове подпрограммы ей передается адрес фактического параметра в памяти и в дальнейшем подпрограмма работает именно с этой ячейкой памяти, а не с копией, как при использовании параметра-значения.

1.3.3 Параметры-константы

Параметры-константы передаются по адресу, как параметры-переменные, но значения их запрещено изменять в подпро­грамме. За этим строго следит компилятор, при нарушении запрета он вы­дает сообщение об ошибке Invalid variable reference (Недопустимое обраще­ние к переменной).

При описании подпрограммы перед параметрами-константами добавляется служебное слово const, например:

procedure proc (const p: integer) ;.

Параметры-константы — это очень хороший способ передачи исходных данных в подпрограмму, т. к. он не требует дополнительных затрат памяти для хранения копий (во многих случаях для хранения адреса требуется меньше памяти, чем для хранения самого значения). При этом сами исход­ные данные в своих ячейках памяти остаются в неприкосновенности.

1.4 Использование функций

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

- функция передает в программу результат своей работы — единственное значение, носителем которого является имя самой функции;

- имя функции может входить в выражение как операнд.

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