Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

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




Процедуры и функции

В языке Паскаль существуют подпрограммы двух видов: процедуры и функции. Структура подпрограммы аналогична структуре всей программы. Имя подпрограммы обязательно. Заканчивается подпрограмма end;.

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

Все параметры, используемые в подпрограмме, делятся на локальные и глобальные. Первые объявлены внутри подпрограммы и доступны только ей самой. Вторые объявлены в программе и доступны как программе, так и всем её подпрограммам.

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

Глобальные параметры могут использоваться в подпрограмме двояким образом:

- непосредственное обращение к глобальным параметрам (по имени, идентификатору);

- использование механизмов формальных параметров.

 

Процедуры

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

procedure <имя процедуры> (<список формальных параметров>);

Пример

type

tarr=array [1..100] of integer;

procedure InpInt(var mas:tarr; n:integer);

var

i: integer; { локальный параметр}

begin

writeln(‘введите ’,n,’ целых чисел’);

for i:=1 to n do

read(mas[i]);

end;

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

Пример Вызов процедуры InpInt для ввода k целых чисел в массив m.

InpInt(m, k);

k-параметр целого типа, m-массив типа tarr.

 

Функции

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

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

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

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

Пример Функция вычисления факториала числа n.

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;

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

Пример

Part: =sqr (t)/factorial (i),

где

sqr (t) – вызов стандартной функции возведения в квадрат с фактическим параметром t;

factorial (i) - вызов функции, вычисляющей факториал с фактическим параметром i.

 

Формальные и фактические параметры

Формальные параметры указывают, с какими параметрами следует обращаться к этой подпрограмме (количество, их последовательность, типы). Они задаются в заголовке подпрограммы в виде списка формальных параметров. Список разбит на группы, разделенные точками с запятыми. В группу вкладываются однотипные параметры одной категории.

Все формальные параметры разбиты на 4 категории:

- параметры-значения (в основной программе эти параметры подпрограммой не меняются);

- параметры-переменные (эти параметры подпрограмма может изменить в основной программе);

- параметры-константы (только в Borland Pascal 7.0);

- параметры-процедуры и параметры-функции (процедурного типа).

Для каждого формального параметра следует указать имя и, как правило, тип.

Для параметра-переменной или параметра-константы – его категории. Имена параметров могут быть любыми, они могут совпадать с именами объектов программы.

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

Пример

Неправильно:

function max (a: array [1..00] of real):real;

Правильно:

type

tArr = array [1..100] of real;

function max(a:tArr):real;

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

 

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

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

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

Пример

procedure inp(max, min:real; n:word);

function mult(x,y:integer)real;

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

Пример

inp(abs(7),-abs(t), 2*k);

m:=mult(x+y, x-y);

Пример Функция вычисления максимального элемента массива.

В основной программе определен тип-массив, переменная этого типа и переменная целого типа.

type

tArr = array[1..100] of integer;

var

massiv: tArr;

maxim:integer;

function max(mas:tArr; n: byte): integer; {Описание функции}

var ma:integer;

i:byte;

begin

ma:=mas[1];

for i:=2 to N do

if ma<mas[i] then ma:=mas[i];

max:=ma

end;

Тогда возможно

maxim:=max(massiv, 5);

Будет определено максимальное число из пяти первых чисел массива massiv и записано в переменную maxim.

Подпрограмма может работать только с массивами типа tArr. Для массива другого типа требуется создать аналогичную подпрограмму. При работе подпрограммы в стеке будет создана копия исходного массива, что ведёт к уменьшению быстродействия.

 

Поделиться:





Читайте также:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...