Студопедия — Описание и вызов процедур и функций
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Описание и вызов процедур и функций






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

Формат описания процедуры имеет вид:

procedure имя процедуры (формальные параметры); раздел описаний процедуры begin исполняемая часть процедуры end;

Формат описания функции:

function имя функции (формальные параметры): тип результата; раздел описаний функции begin исполняемая часть функции end;

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

var имя праметра: имя типа

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

Вызов процедуры производится оператором, имеющим следующий формат:

имя процедуры (список фактических параметров);

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

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

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

имя функции:= результат;

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

  • количество фактических параметров должно совпадать с количеством формальных;
  • соответствующие фактические и формальные параметры должны совпадать по порядку следования и по типу.

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

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

var x,y,m,n: integer; procedure MaxNumber(a,b: integer; var max: integer);begin if a>b then max:=a else max:=b;end; begin write('Введите x,y '); readln(x,y); MaxNumber(x,y,m); MaxNumber(2,x+y,n); writeln('m=',m,'n=',n);end.

Аналогичную задачу, но уже с использованием функций, можно решить так:

var x,y,m,n: integer; function MaxNumber(a,b: integer): integer; var max: integer;begin if a>b then max:=a else max:=b; MaxNumber:= max;end; begin write('Введите x,y '); readln(x,y); m:= MaxNumber(x,y); n:= MaxNumber(2,x+y); writeln('m=',m,'n=',n);end.

 

 

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

На этом шаге мы рассмотрим использование параметров-констант.

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

Заголовок процедуры с описанными параметрами-константами имеет такой вид:

procedure MyProc (const Par1, Par2: Type1; const РаrЗ, Раr4: Туре2);

Приведем упрощенную схему и описание механизма работы параметров-констант:

 


Рис.1. Механизм передачи параметров

 

При вызове процедуры/функции:

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

выполняется копирование адресов (но не значений!) фактических параметров в выделенную для них память;

 

Во время работы процедуры/функции:

запрещено изменение значений формальных параметров-констант;

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

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

 

При окончании процедуры/функции:

влияние вызываемой процедуры/функции на вызывающую через параметры-константы отсутствует;

память, выделенная для работы процедуры/функции, очищается.

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

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

На следующем шаге мы рассмотрим безтиповые параметры.

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

На этом шаге мы рассмотрим использование параметров-значений.

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

Заголовок процедуры с описанными параметрами-значениями имеет следующий вид:

procedure MyProc (Par1, Par2: Type1; РаrЗ, Раr4: Туре2);

Приведем упрощенную схему и описание механизма работы параметров-значений:

 


Рис.1. Механизм передачи параметров

 

При вызове процедуры/функции:

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

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

 

Во время работы процедуры/функции:

никаких ограничений на использование параметров данного вида не накладывается;

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

 

При окончании процедуры/функции:

память, выделенная под формальные параметры-значения и локальные данные, очищается;

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

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

На следующем шаге мы рассмотрим передачу параметров по ссылке.

 

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

На этом шаге мы рассмотрим передачу параметров по ссылке.

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

Заголовок процедуры с описанными параметрами-переменными имеет следующий вид:

procedure MyProc (var Par1, Par2: Type1; var РаrЗ, Раr4: Туре2);

Приведем упрощенную схему и описание механизма работы параметров-переменных:


Рис.1. Механизм передачи параметров

 

При вызове процедуры/функции:

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

выполняется копирование адресов (но не значений!) фактических параметров в выделенную для них память;

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

 

Во время работы процедуры/функции:

никаких ограничений на использование параметров данного вида не накладывается;

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

 

При окончании процедуры/функции:

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

память, выделенная для работы процедуры/функции, очищается.

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

.

Открытые параметры-массивы для передачи параметров одинакового типа

На этом шаге мы рассмотрим использование параметров-массивов для передачи параметров.

В заголовке процедуры открытые параметры-массивы описываются следующим образом:

procedure OpenVector (Vector: array of TypeVector);

Открытый параметр-массив может быть параметром-значением, параметром-константой или параметром-переменной.

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

Гибкость при передаче массивов различной размерности получена за счет единообразия представления этих массивов как формальных параметров. Все формальные открытые параметры-массивы в рамках процедуры автоматически описываются как массивы с нулевой базой (нулевой нижней границей) указанного в заголовке типа:

array [ 0..N-1] of TypeVector;

где N - число элементов в фактическом параметре.

Другими словами, истинный диапазон изменения индекса фактического параметра-массива отображается в диапазон изменения индекса от 0 до N - 1.

Для определения характеристик переданного фактического параметра-массива в теле процедуры используются стандартная функция Low, которая всегда возвращает 0, стандартная функция High, которая возвращает индекс последнего элемента в формальном параметре-массиве, и функция SizeOf, которая возвращает размер фактического параметра-массива.

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

Для сравнения с использованием бестиповых параметров, приведем для открытых параметров-массивов такую же процедуру, как в предыдущем примере:

 

const

m = 10;

n = 15;

type

TVector1 = array [1..m] of Byte;

TVector2 = array [1..n] of Byte;

var

Vector1: TVector1;

Vector2: TVector2;

{--------------------------------------------------}

procedure SortVector (var Vector: array of Byte);

var

Min: Byte;

Imin: Word;

i, j: Word;

begin

for i:= 0 to High (Vector) do

begin

Min:= Vector[i];

Imin:= i;

for j:= i+1 to High (Vector) do

if Vector [j] < Min then

begin

Min:= Vector[j];

Imin:= j

end;

Vector[Imin]:= Vector[i];

end;

end;

{--------------------------------------------------}

begin

.....

SortVector (Vector1);

SortVector (Vector2);

.....

end.

 







Дата добавления: 2015-04-19; просмотров: 586. Нарушение авторских прав; Мы поможем в написании вашей работы!



Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...

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

Важнейшие способы обработки и анализа рядов динамики Не во всех случаях эмпирические данные рядов динамики позволяют определить тенденцию изменения явления во времени...

ТЕОРЕТИЧЕСКАЯ МЕХАНИКА Статика является частью теоретической механики, изучающей условия, при ко­торых тело находится под действием заданной системы сил...

Хронометражно-табличная методика определения суточного расхода энергии студента Цель: познакомиться с хронометражно-табличным методом опреде­ления суточного расхода энергии...

ОЧАГОВЫЕ ТЕНИ В ЛЕГКОМ Очаговыми легочными инфильтратами проявляют себя различные по этиологии заболевания, в основе которых лежит бронхо-нодулярный процесс, который при рентгенологическом исследовании дает очагового характера тень, размерами не более 1 см в диаметре...

Примеры решения типовых задач. Пример 1.Степень диссоциации уксусной кислоты в 0,1 М растворе равна 1,32∙10-2   Пример 1.Степень диссоциации уксусной кислоты в 0,1 М растворе равна 1,32∙10-2. Найдите константу диссоциации кислоты и значение рК. Решение. Подставим данные задачи в уравнение закона разбавления К = a2См/(1 –a) =...

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

Медицинская документация родильного дома Учетные формы родильного дома № 111/у Индивидуальная карта беременной и родильницы № 113/у Обменная карта родильного дома...

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

Studopedia.info - Студопедия - 2014-2024 год . (0.014 сек.) русская версия | украинская версия