ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 17.07.2024
Просмотров: 24
Скачиваний: 0
Тема 8. «Подпрограммы в языке Паскаль»
1.Механизм подпрограмм. Процедуры и функции.
2.Принцип локализации параметров подпрограмм.
3.Синтаксис процедур и функций.
4.Рекурсивные процедуры и функции.
5.Побочный эффект процедур и функций.
1.Механизм подпрограмм. Процедуры и функции.
Механизм, подпрограммы в языке Паскаль позволяет расчленить исходную
крупную задачу на более мелкие подзадачи и тем самым снизить уровень сложности программы.
Механизм подпрограмм в языке Паскаль реализуется в виде процедур или функций, различие между ними состоит в том, что подпрограмма функция возвращает одно значение скалярного типа, а процедура может возвратить несколько значений, кроме этого функцию можно использовать в выражении, а процедуру – нельзя.
Структура любой подпрограммы должна бать писана до того, как она будет исправлена в программе или другой подпрограммой.
1
Тема 8. «Подпрограммы в языке Паскаль»
2. Принцип локализации параметров подпрограмм.
Допускается описание объектов в головной программе (их можно использовать как в самой головной программе, так и внутри любой ее подпрограммы) – это глобальные параметры, а также описание объектов внутри самой подпрограммы (их можно использовать только внутри данной подпрограммы) – такие параметры или объекты называются локальными. Считается, что объекты, описанные внутри блока, существуют только внутри этого блока или любого его подблока, говорят: «параметр локализован в блоке», и не определен за пределами данного блока.
Принципы локализации:
•Внутри блока действуют все локальные объекты.
•За пределами блока локальные объекты не действуют.
•Внутри блока действуют все глобальные объекты, если их имя не совпадает с именем локального объекта.
•При совпадении имен глобального и локального объектов внутри блока действует только последний (т .е. локальный).
2
Тема 8. «Подпрограммы в языке Паскаль»
3. Синтаксис процедур и функций
Процедура предназначена для выполнения некоторых законченных действий. Процедура должна быть описана в разделе описаний основной программы. Для
выполнения процедуры в программе должен быть предусмотрен оператор вызова процедуры.
Procedure <имя процедуры> (<список формальных параметров>); Begin
<список операторов> End;
Формальные параметры подпрограммы указывают, с какими параметрами следует обращаться к процедуре (количество параметров и последовательность типов параметров). Формальные параметры не имеют определенного значения, это имена списка. Они отделяются друг от друга “;”.
При обращении к процедуре формальные параметры заменяются на соответствующие фактические параметры. Способ замены формального параметры на фактический определяется типом параметра. В языке Паскаль существуют следующие типы формальных параметров:
1)параметры, вызываемые по значению (параметры - значения);
2)параметры, вызываемые по ссылке (параметры - переменные);
3)параметры - константы (только для Turbo-Pascal 7.0);
4) параметры процедурного типа. |
3 |
|
Тема 8. «Подпрограммы в языке Паскаль»
Параметры - значения передаются основной программой в процедуру и они не могут быть изменены в процессе выполнения процедуры. Параметр - значение указывается в заголовке процедуры своим именем и через двоеточие - типом. Тип параметра - значения может быть любым, кроме файлового. Если параметров значений одного типа несколько, их можно объединить в одну группу, перечислив их имена через запятую, а затем уже указать их общий тип. При этом отдельные группы параметров отделяются друг от друга точкой с запятой. При
использовании параметров значений при вызове процедуры с фактических параметров снимается копия (значение) и с этой копией мы и работаем, дальнейшая связь между фактическим и его копией обрывается.
Процедура имеет доступ к параметрам - переменным и может их изменять в процессе выполнения процедуры. Параметры - переменные отделяются от остальных служебным словом var, при этом действие служебного слова var распространяется до ближайшей точки с запятой (в пределах одной группы).
Например
procedure mult (x,y:integer; var z: integer);
Этот тип параметров используется для обозначения выходных величин (результатов вычислений), так как программа должна иметь возможность изменять значение некоторой переменной. Поэтому, как правило, входные параметры – параметры-
значения, а выходные параметры – параметры-переменные.
4
Тема 8. «Подпрограммы в языке Паскаль»
Кроме параметров - значений и параметров - переменных существуют еще параметры - константы. Их используют тогда, когда нужно передать в процедуру переменную, но изменять ее подпрограмма не должна. Параметр - константа указывается служебным словом const, действие которого также распространяется до ближайшей точки с запятой.
Например
procedure newstr(const s: string);
Параметры процедурного типа представляют собой фактически процедуру (подпрограмму) процедуры, которая может быть использована данной процедурой при работе. Параметры процедурного типа указываются именем соответствующей процедуры и ее списком параметров.
ЗАМЕЧАНИЕ: Следует помнить, что при описании типов формальных параметров процедуры допускается использование ТОЛЬКО ИМЕНИ ТИПА, а не его описания. Использование описания типа при описании типа формального параметра НЕ ДОПУСКАЕТСЯ.
Операторы вызова процедуры
<имя процедуры> (<список факт. пар-ов>); |
mult(5,3;product); |
|
newstr('Turbo-Pascal'); |
|
|
|
5 |
|
|
|
Тема 8. «Подпрограммы в языке Паскаль»
ЗАМЕЧАНИЕ: При записи оператора вызова процедуры следует строго
соблюдать правила соответствия формальных и фактических параметров по:
•количеству (если формальных N, то и фактических должно быть N);
•порядку следования (слева направо);
•по типу;
•по способу замены.
Функции. В общих чертах аппарат функций совпадает с аппаратом процедур, однако, имеет некоторые принципиальные отличия. Основным моментом, отличающим процедуры и функции, является область применения: функция применяется только в том случае, если в качестве результата работы подпрограммы выступает одно единственное значение простого скалярного типа.
Общая структура подпрограммы - функции в языке Turbo-Pascal имеет общий вид:
function <имя функции> (<список форм. параметров>): <тип функции>; |
|
{Комментарий функции} |
|
<описание локальных объектов>; |
|
begin |
|
<тело функции> |
|
end; |
6 |
Тема 8. «Подпрограммы в языке Паскаль»
Смысловое отличие функции от процедуры состоит в том, что:
Процедура возвращает несколько значений различного типа, функция – только одно значение простого скалярного типа.
У процедур для запоминания результата вычислений вводится специальные параметры, а у функций для запоминания результата используется имя функции, и следовательно, никаких специальных формальных параметров не нужно.
Так как у функций для запоминания результата используется имя функции, в теле функции должен
присутствовать хотя бы один оператор присваивания вычисленного результата имени функции.
Функции допускается применять при записи выражения
7
Тема 8. «Подпрограммы в языке Паскаль»
Пример. Функция вычисления факториала.
function factorial (n: byte ): longint; var fact: longint;
i: byte; begin
fact:=n;
for i:=n-1 downto 2 do fact:=fact*i; factorial:=fact
end;
Вызов функции в теле основной программы осуществляется следующим образом:
s:= factorial(50);
8
Тема 8. «Подпрограммы в языке Паскаль»
4. Рекурсивные процедуры и функции
Вязыке Turbo-Pascal допускается вызов подпрограммой самой себя. Такой вызов называется - рекурсивное обращение. Эта возможность обусловлена тем, что при каждом новом обращении к подпрограмме параметры, которые она использует, заносятся в память (в так называемый стек) причем параметры предыдущего обращения тоже сохраняются.
function factorial(n: byte ): longint; begin
if (n = 0) or (n+1) then factorial:=1
else factorial:=n*factorial(n-1) end;
ЗАМЕЧАНИЕ: При работе с рекурсивными процедурами и функциями не следует забывать о возможности переполнения стека. Поэтому, при работе с рекурсивными процедурами и функциями, необходимо провести
тщательный предварительный анализ плюсов и минусов данного способа описания подпрограмм. Необходимо также учесть, что затраты памяти и машинного времени могут быть слишком велики, и алгоритм может
потерять свою эффективность. |
9 |
Тема 8. «Подпрограммы в языке Паскаль»
5. Побочный эффект процедур и функций
Под этим термином понимается целая совокупность различных ситуаций. Общим для них является изменение значений некоторых переменных, вызванное обращением к процедуре или функции. Побочный эффект изменения значений прежде всего касается:
•глобальных объектов;
•объектов, заменяемых как переменные.
Побочный эффект I вида. Например, имеется некоторая глобальная переменная, передаваемая в подпрограмму, сама подпрограмма переопределяет значение этой переменной. В этом случае, сам факт обращения к подпрограмме вызовет переопределение (изменение) значения этой переменной.
Побочный эффект II вида. Этот эффект подобен эффекту первого вида однако проявляется этот эффект в изменении значений параметров, замена которых осуществляется как параметры переменные.
ЗАМЕЧАНИЕ: Следует отметить, что при этом первоначальное значение глобальной переменной, переданной таким способом в подпрограмму будет безвозвратно утеряно. Поэтому, РЕКОМЕНДУЕТСЯ ИЗБЕГАТЬ изменения глобальных параметров в теле процедур и функций. По тем же причинам НЕ СЛЕДУЕТ изменять в теле подпрограммы значения входных параметров,
замена которых осуществляется как параметры-переменные.
10