Самостоятельная работа № 12
Составление подпрограмм в Паскале
Цель работы: ознакомление с подпрограммами-функциями; ознакомление с подпрограммами-процедурами; получение навыков в составлении х программ на основе приобретённых сведений.
Общие понятия
Автономная часть программы, с помощью которой можно производить одни и те же вычисления с разными исходными данными и в различных местах программы, многократно называется подпрограммой. Преимущества использования подпрограмм - уменьшение объема программы, сокращение времени на отладку.
В Pascal существует 2 вида подпрограмм: процедуры и функции. В отличие от стандартных процедур и функций, описанных в специальных модулях, все пользовательские подпрограммы должны быть описаны в начале программы (до начала тела программы).
Функция
Function Sum_v (var a:vector;n:byte): integer;
Процедура
Procedure Sum_vec (a:vector;n:byte; var sum:integer);
Основные отличия между процедурами и функциями приведены в таблице 5.
Таблица 5 - Основные отличия между процедурами и функциями
|
Функция |
Процедура |
|
Возвращает одно значение, которое связывается с именем функции, поэтому в теле подпрограммы-функции обязательно должно быть присваивание имени функции некоторого значения, чтобы вернуть его в основную программу Может использоваться в выражениях как обычная переменная, например, у:=х+ln(х) |
Может возвращать любое количество значений, которые связываются с именем процедуры
Нельзя использовать в выражениях, например, нельзя написать у:=x+write (х) |
Выполнение подпрограммы начинается при обращении к ней из основной программы. Процесс обращения называется вызовом процедуры или функции.
Когда в теле основной программы встречается оператор вызова подпрограммы, выполнение инструкций основной программы приостанавливается и выполняются инструкции подпрограммы. После выполнения всех инструкций подпрограммы продолжается выполнение инструкций основной программы с оператора, следующего за обращением к процедуре или функции.
Формальные и фактические параметры
Параметры (переменные), определяемые при описании процедуры или функции, называются формальными.
Параметры (переменные), задаваемые при вызове подпрограммы, называются фактическими.
Замена формальных параметров фактическими делается так: на место первого формального параметра подставляется первый фактический параметр, на место второго формального параметра - второй фактический и т.д. Поэтому количество и типы формальных и фактических параметров должны совпадать.
Формальные параметры, если они приводятся при описании процедуры, можно разделить на несколько категорий. Мы будем рассматривать только две:
- параметры-значения;
- параметры-переменные.
Основные отличия параметров-значений и параметров-переменных приведены в таблице 6.
Таблица 6 - Основные отличия параметров-значений и параметров-переменных
|
Параметры-значения |
Параметры-переменные |
|
Признаком является отсутствие служебного слова var |
Признаком является наличие служебного слова var |
|
Передаются в процедуру через стек в виде копии их значений. Процедура не может менять параметры х и у вне процедуры |
Передаются через стек, но напрямую. Эти параметры процедура может изменять в основной программе |
|
В качестве фактических параметров могут выступать любые выражения соответствующего типа и константы |
В качестве фактических параметров должны использоваться только переменные соответствующего типа |
Локальные и глобальные параметры
Переменные и константы, описанные внутри подпрограммы, называются локальными. Для основной программы они не существуют. Переменные и константы, определенные в разделе описаний основной программы, называются глобальными. Любой подпрограмме доступны все глобальные параметры, за исключением тех, с чьими именами совпадают имена ее параметров или локальных переменных.
В заголовках процедур и функций в списке формальных параметров необходимо указывать их тип. Правилами языка Pascal определено, что можно использовать либо стандартные типы (определенными разработчиками языка), либо так называемые предопределенные типы (определённые программистом ранее). Вводить новый тип в списке формальных параметров не допускается.
Рекурсия
Язык Pascal допускает, чтобы процедуры или функции были рекурсивными.
Рекурсия - это такой способ организации вычислительного процесса, при котором процедура или функция в собственном разделе операторов обращается сама к себе. В ряде случаев этот прием позволяет существенно повысить эффективность программирования.
Рекурсивная форма организации алгоритма обычно выглядит изящнее итерационной и дает более компактный текст программы, но при выполнении, как правило, медленнее и может вызвать переполнение стека.
Стек – это специальная область памяти (конечное число ячеек), где сохраняется адрес возврата (адрес вызывающей программы, используется для передачи управления вызывающей программе). Стеки используются также для передачи параметров в процедуры (для обычных параметров в стек заносятся их значения, для параметров-переменных – их адреса), размер стека ограничен. Стек можно представить в виде стопки книг. Если стопка достигла максимального размера, то при добавлении новой книги сверху – нижняя книга должна быть убрана.
Нужно обязательно отслеживать в программе наполнение стека, то есть не допускать зацикливания рекурсии.
Скачано с www.znanio.ru
Материалы на данной страницы взяты из открытых источников либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.