Процедуры и функции являются важным инструментом большинства языков программирования. С их помощью можно часто встречающиеся фрагменты программы, одинаковые по выполняемым действиям, но различающиеся только значениями исходных данных, скомпоновать в группу операторов. Для эффективного программирования подобных повторений фрагментов в языках программирования введено понятие подпрограммы.
Определение
Функция в программировании — подпрограмма, вызываемая из других подпрограмм необходимое число раз.
Процедура — поименованная часть программы (подпрограмма), многократно вызываемая из последующих частей программы необходимое число раз.
к содержанию ↑
Источник: http://thedifference.ru/chem-procedura-otlichaetsya-ot-funkcii-v-programmirovanii/
Процедуры и функции.
Процедуры и функции относятся к числу подпрограмм. Здесь рассмотрены правила и особенности составления и объявления процедур и функций, а также их вызова.
Источник: http://kanyevsky.kpi.ua/ru/учебник-vhdl/процедуры-и-функции/
Процедуры
Для использования процедуры в программе необходимы:
- описание процедуры;
- вызов процедуры.
Описание процедуры содержит информацию для компилятора об объектах, используемых в процедуре, а также алгоритм решения задачи процедурой.
Вызов процедуры приводит к выполнению операторов, составляющих тело процедуры.
Описание процедуры
Процедура в Турбо Паскале имеет структуру, подобную структуре программы.
Структура описания процедуры имеет следующий вид:
Procedure <имя процедуры> (параметры); | заголовок процедуры; | ||
Label | объявление меток; | ||
Const | объявление констант; | ||
Type | объявление типов; | ||
Var | объявление переменных; | ||
procedure | описание процедур и функций, входящих в данную процедуру (внутренние процедуры и функции); |
||
function | |||
Begin | |||
Тело процедуры | операторы процедуры; | ||
End; | точка с запятой «;» ставится всегда |
Таким образом, процедура состоит из:
- заголовка;
- раздела описаний;
- раздела операторов.
Заголовок процедуры в отличие от заголовка программы не может быть опущен.
Формат заголовка
Procedure <имя> (<список формальных параметров>);
где Procedure – зарезервированное слово;
имя – имя процедуры, определяемое в соответствии с общими правилами построения идентификаторов;
<список формальных параметров> – перечень идентификаторов для обозначения исходных данных и результатов работы процедуры с указанием их типа.
Параметры в списке заголовка процедуры отделяются друг от друга точкой с запятой «;». Если параметры являются однотипными, их можно объединить и записать через запятую. Например:
Procedure SUMMA(a,b:real;i,n:integer);
Здесь SUMMA имя процедуры, a,b,i,n формальные параметры процедуры.
Раздел описаний процедуры содержит объявление меток, констант, типов переменных и внутренних процедур и функций, используемых в разделе операторов процедуры.
Раздел операторов ограничен операторными скобками BEGIN и END. При описании процедуры после END всегда ставится точка с запятой «;».
Вызов процедуры
Если процедура объявлена, то в программе ее можно использовать многократно, просто задавая ее имя и, если необходимо, список аргументов, т.е. вызов происходит с помощью оператора вызова:
<имя процедуры> (<список фактических параметров>);
где <имя процедуры> – имя процедуры, к которой происходит обращение;
<список фактических параметров> – перечень конкретных значений (выражений) и имен, подставляемых на место формальных параметров процедуры при ее выполнении.
При описании подпрограмм и вызова их используются понятия формальных и фактических параметров.
Параметры, указываемые в заголовке процедуры при ее описании, называются формальными параметрами. Параметры, указываемые при вызове процедуры, называются фактическими параметрами.
Формальные параметры – это параметры, определяющие тип и место подстановки реальных объектов при вызове процедуры.
При вызове процедуры формальные параметры, указанные в ее заголовке, заменяются на фактические параметры в порядке их следования. Число и тип формальных и фактических параметров должен обязательно совпадать.
ЗАДАЧА 1. Ввести с клавиатуры 15 вещественных чисел в массив и найти сумму этих чисел с помощью процедуры.
ЗАДАЧА 2. Найти наибольший элемент массива и определить его номер. Количество элементов массива и их значения ввести с клавиатуры. Оформить ввод данных, поиск наибольшего элемент массива и определение его номера с помощью процедур.
Источник: http://turbopro.ru/index.php/turbopascal/6803-turbo-pascal-protsedury-i-funktsii
Спецификация процедуры.
Спецификация процедуры описывает действия при вызове процедуры и имеет следующий синтаксис:
спецификация процедуры::=procedure имя процедуры[(список параметров)] is
{объявление в подпрограмме}
begin
{последовательный оператор}
end [procedure][имя процедуры];
список параметров::=(элемент списка {; элемент списка})
элемент списка::=[constant | variable | signal ]
идентификатор{,идентификатор}: [in | out | inout] тип параметра
[ := статическое выражение]
Здесь имя процедуры — идентификатор процедуры. В списке параметров указывается информация о формальных параметрах процедуры. Вместо формальных параметров подставляются фактические параметры во время вызова процедуры. В каждом из элементов списка параметров может объявляться какой это параметр (константа, переменная или сигнал) направление передачи параметра (in, out или inout) его тип или подтип и его значение по умолчанию, равное статическому выражению.
Список параметров может отсутствовать, т.е. он тогда задан неявно. При этом имена фактических параметров совпадают с именами формальных параметров, объявленных в процедуре. Обычно трудно понять программу с процедурами без списков параметров. Поэтому в соответствии с условиями повторного использования проектов, не рекомендуется программирование процедур без списка параметров.
Объявленными в процессе могут быть: объявление и тело другой процедуры или функции, объявление типа и подтипа, объявление константы, переменной, файла, псевдонима, объявление и спецификация атрибута, объявление группы, описание use.
Рассмотрим пример программирования и использования процедуры в процессе для сортировки трех целых чисел.
process(a1,a2,a3) varіable b1,b2,b3:іnteger; procedure sort2(varіable x1,x2:іnout іnteger) іs varіable t:іnteger; begіn іf x1>x2 then return; else t:=x1; x1:=x2; x2:=t; end іf; end procedure; begіn b1:=a1; b2:=a2; b3:=a3; sort2(b2,b3); sort2(b1,b2); sort2(b2,b3); c1
Здесь процедура sort2 выполняет сортировку двух переменных х1, х2, которые являются входными — выходными формальными параметрами процедуры. Вызов процедуры выполняется с позиционным связыванием.
Оператор return досрочно прерывает исполнение процедуры. Последовательный оператор return -оператор возврата из подпрограммы — немедленно прерывает выполнение процедуры или вызова функции и возвращает управление в программу, вызвавшую процедуру.
Источник: http://kanyevsky.kpi.ua/ru/учебник-vhdl/процедуры-и-функции/
Сравнение
Основная разница между функцией и процедурой — в возвращаемом результате. По сути, и функции, и процедуры представляют собой логически неделимые блоки, из которых складывается код программы. Функция возвращает значение, процедура в большинстве языков программирования — нет, либо (в Си, например) возвращает пустое значение. В последнем случае (в Си) процедура считается подчиненной разновидностью функции.
Заголовок функции содержит слово “function”, идентификатор (собственное имя функции), вариативно список параметров и обязательно — тип результата. В теле функции обязательно прописывается оператор, присваивающий значение имени функции, которое она вернет в качестве результата. Заголовок процедуры содержит слово “procedure”, идентификатор (имя процедуры) и вариативно список параметров. Вызов функции осуществляется в составе выражений там, где эти выражения применяются, вызов процедуры требует отдельного оператора. Вызов процедуры осуществляется только по имени, имя функции же связано с ее значением. На схемах алгоритмов вызов функции изображается в блоке вывода или в блоке процесса, вызов процедуры — в специальном блоке “предопределенный процесс”.
к содержанию ↑
Источник: http://thedifference.ru/chem-procedura-otlichaetsya-ot-funkcii-v-programmirovanii/
Основные отличия
- Функция должна возвращать значение, но в хранимых процедурах это необязательно: процедура может возвращать значения 0 или n.
- Функции могут иметь только входные параметры для него, тогда как процедуры могут иметь параметры ввода/вывода.
- Для функции обязательно принимать один входной параметр, но хранимая процедура может принимать от 0 до n входных параметров.
- Функции можно вызывать из процедуры, тогда как процедуры не могут быть вызваны из функции.
Источник: http://rg-gaming.ru/kompjutery/v-chem-razlichie-mezhdu-procedurami-i-funkcijami
Возврат из процедуры или функции.
Оператор возврата из подпрограммы — последовательный оператор return — немедленно прерывает выполнение процедуры или вызова функции и возвращает управление в программу, вызвавшую процедуру.
Источник: http://kanyevsky.kpi.ua/ru/учебник-vhdl/процедуры-и-функции/
Перезагрузка процедур и функций.
В языке VHDL допускается определять несколько процедур и функций с одинаковыми названиями. При вызове функции или процедуры из числа функций или процедур с одинаковым названием выбирается такая, которая подходит по типам и числу входных и выходных параметров. Такая функция перезагружает (overloads) остальные функции. Перезагрузка процедур и функций удобна при вычислениях с различными типами. Например, над типами integer, real, подтипами signed, unsigned определены одни и те же арифметические функции, но имеющие различное сочетание типов аргументов и результатов.
Примером перезагрузки служит следующая функция, которая не входит ни в один стандартный пакет:
functіon «and»(x1,x2:bіt) return boolean іs begіn return (x1 and x2) =’1′;end;
Если эта функция объявлена, то теперь транслятор не выдаст сообщения об ошибке при выполнении оператора if, вызывающего эту функцию:
varіable a,b,c: bіt;…іf (a and b and c) then…end іf;
так как выражение в скобках будет иметь правильный тип boolean.
Анатолий Сергиенко
E-mail: aser@comsys.kpi.ua
Источник: http://kanyevsky.kpi.ua/ru/учебник-vhdl/процедуры-и-функции/