Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Тема 8

.pdf
Скачиваний:
6
Добавлен:
12.04.2015
Размер:
107.86 Кб
Скачать

Тема 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

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