робот процедуры с параметрами

Урок 22
§24. Процедуры

Содержание урока

Процедура с параметром

Процедура с параметром

Теперь представьте себе, что нужно выводить строки из знаков «минус» разной длины (5, 10 и др). Конечно, можно сделать несколько процедур, например:

робот процедуры с параметрами. Смотреть фото робот процедуры с параметрами. Смотреть картинку робот процедуры с параметрами. Картинка про робот процедуры с параметрами. Фото робот процедуры с параметрами

Но так делать не нужно. Дело в том, что обе процедуры выводят цепочки знаков «минус» (т. е. выполняют одни и те же действия!), только разной длины. Поэтому хочется использовать всего одну процедуру, передавая ей нужную длину цепочки.

Заметим, что процедуру printLinelO можно переписать с помощью цикла:

робот процедуры с параметрами. Смотреть фото робот процедуры с параметрами. Смотреть картинку робот процедуры с параметрами. Картинка про робот процедуры с параметрами. Фото робот процедуры с параметрами

Эта процедура делает то же самое, что и первый вариант, — выводит строку из 10 минусов и переходит на новую строку.

Видим, что процедура стала длиннее и усложнилась, появился цикл. Внутри процедуры объявлена переменная i. Эта переменная принадлежит процедуре, она называется локальной. Другие процедуры и основная программа не могут обращаться к «чужой» локальной переменной.

Где вы уже встречались со словом «локальный» в курсе информатики? Вспомните, от какого иностранного слова оно произошло.

робот процедуры с параметрами. Смотреть фото робот процедуры с параметрами. Смотреть картинку робот процедуры с параметрами. Картинка про робот процедуры с параметрами. Фото робот процедуры с параметрамиЛокальная переменная — это переменная, объявленная внутри подпрограммы. Другие подпрограммы и основная программа не могут к ней обращаться.

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

Чем будет отличаться процедура, рисующая 5 знаков «минус», от последнего варианта процедуры printLine10?

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

робот процедуры с параметрами. Смотреть фото робот процедуры с параметрами. Смотреть картинку робот процедуры с параметрами. Картинка про робот процедуры с параметрами. Фото робот процедуры с параметрами

Величина n называется параметром процедуры. В заголовке процедуры добавились круглые скобки, где записано имя параметра и его тип.

робот процедуры с параметрами. Смотреть фото робот процедуры с параметрами. Смотреть картинку робот процедуры с параметрами. Картинка про робот процедуры с параметрами. Фото робот процедуры с параметрамиПараметр — это величина, от которой зависит работа процедуры. Параметр имеет имя и тип, с ним можно работать так же, как с локальной переменной.

Наша процедура printLine имеет один параметр, обозначенный именем n, — длину строки из знаков «минус».

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

робот процедуры с параметрами. Смотреть фото робот процедуры с параметрами. Смотреть картинку робот процедуры с параметрами. Картинка про робот процедуры с параметрами. Фото робот процедуры с параметрамиАргумент — это значение параметра, которое передаётся процедуре.

При вызове процедуры аргумент передаётся в скобках:

Что будет выведено на экран при выполнении фрагмента программы?

Для тестирования процедуры printLine Иван хочет написать небольшую программу, в которой длина линии вводится с клавиатуры. Где нужно поместить оператор ввода — в процедуре или в основной программе?

Следующая страница робот процедуры с параметрами. Смотреть фото робот процедуры с параметрами. Смотреть картинку робот процедуры с параметрами. Картинка про робот процедуры с параметрами. Фото робот процедуры с параметрамиНесколько параметров

Cкачать материалы урока
робот процедуры с параметрами. Смотреть фото робот процедуры с параметрами. Смотреть картинку робот процедуры с параметрами. Картинка про робот процедуры с параметрами. Фото робот процедуры с параметрами

Источник

Pascal: Занятие № 7. Подпрограммы: процедуры в Pascal

Процедуры в Паскале

Подпрограмма — это фрагмент кода, который имеет свое имя и создается в случае необходимости выполнять этот код несколько (много) раз. Подпрограмма описывается единожды перед началом основной программы (до begin ). Компилятор пропускает данный фрагмент кода, пока в основной программе не встретит «вызов» подпрограммы, который выглядит как обращение к ней по имени (возможно, имени с аргументами, указанными в скобках).

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

Итак, рассмотрим синтаксис объявления и описания процедуры в Паскале

procedure pr; var i:integer; begin for i:=1 to 60 do begin <тело подпрограммы>write(‘*’); writeln; end; end; <конец подпрограммы>begin pr; <вызов процедуры>end.

В данном примере работы с процедурой в Паскале очевидно, что компилятор пропустит блок описания процедуры и дойдет до основной программы (9 строка кода). И только после того, как встретится вызов процедуры (10 строка), компилятор перейдет к ее выполнению, вернувшись к строке 1.

Процедуры с параметрами. Фактические и формальные параметры

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

Особенность: Три похожие фигуры.

Алгоритм решения:

робот процедуры с параметрами. Смотреть фото робот процедуры с параметрами. Смотреть картинку робот процедуры с параметрами. Картинка про робот процедуры с параметрами. Фото робот процедуры с параметрами

Решение на паскале:
Процедура:
робот процедуры с параметрами. Смотреть фото робот процедуры с параметрами. Смотреть картинку робот процедуры с параметрами. Картинка про робот процедуры с параметрами. Фото робот процедуры с параметрами

uses GraphABC; procedure Tr( x, y: integer; color:system.Drawing.Color); begin MoveTo(x, y); LineTo(x, y-60); LineTo(x+100, y); LineTo(x, y); FloodFill(x+20, y-20,color); end; begin SetPenColor(clBlack); Tr(100, 100, clBlue); Tr(200, 100, clGreen); Tr(200, 160, clRed); end.

Рассмотрим синтаксис объявления и описания процедуры с параметрами в Паскале.

Параметры процедуры (в некоторых языках они называются аргументами) указываются в скобках после ее имени (в объявлении).

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

Фактический параметр — это то значение, которое указывается в скобках при вызове процедуры. Фактическим параметром может быть конкретное значение (литерал: число, символ, строка…) либо переменная, которые компилятор подставит вместо формального параметра. Поэтому тип данных у формального и фактического параметра процедуры должен быть одинаковым.

Процедуры с параметрами. Параметр-переменная

В примере формальные параметры a и b служат для помещения в них сравниваемых чисел, а параметр-переменная max — для сохранения в ней максимального из двух чисел. Параметр-переменная или выходной параметр передает свое значение в основную программу (фактическому параметру m ), т.е. возвращает значение, тогда как формальные параметры-значения (входной параметр), наоборот, принимают значения из основной программы (из фактических параметров x и y ). Для параметра-переменной ( max ) используются те ячейки памяти, которые отведены под соответствующий параметр при вызове процедуры (ячейка m ).

Таким образом, сформулируем понятия:

Если в качестве формального параметра указана обычная переменная с указанием ее типа, то такой параметр есть параметр-значение или входной параметр ( a и b в примере). Тип данных формального параметра-значения должен соответствовать типу данных его фактического параметра ( a и b должны попарно соответствовать типу данных x и y ).

Если перед именем формального параметра в объявлении процедуры стоит служебное слово var, то такой параметр называется параметром-переменной или выходным параметром ( max в примере). Для него используются те ячейки памяти, которые отведены под соответствующий параметр при вызове процедуры ( m ). Фактический параметр, соответствующий параметру-переменной, может быть только переменной (не константой, не литералом и не выражением).

робот процедуры с параметрами. Смотреть фото робот процедуры с параметрами. Смотреть картинку робот процедуры с параметрами. Картинка про робот процедуры с параметрами. Фото робот процедуры с параметрами
Словесный алгоритм:

робот процедуры с параметрами. Смотреть фото робот процедуры с параметрами. Смотреть картинку робот процедуры с параметрами. Картинка про робот процедуры с параметрами. Фото робот процедуры с параметрами

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

const n = 10; var i:integer; a, b: array[1..n] of integer; procedure arr_out (k:integer; arr: array[1..n] of integer); var i: byte; begin write (‘вывод массива: ‘); for i := 1 to k do write (arr[i]:4); writeln; end; begin for i:=1 to n do a[i]:=random(10); arr_out (n, a); end.

Пояснение:
Тело основной программы:
— формирование элементов массива (с функцией random ).
— вызов процедуры с двумя параметрами: количество элементов, массив.
Тело процедуры:
— вывод элементов массива с использованием параметров

Продолжим нашу задачу:

const n = 10; var a, b: array[1..n] of integer; procedure arr_rand (k:integer; var arr: array[1..n] of integer); var i: byte; begin write (‘Заполнение массива случайными числами ‘); randomize; for i := 1 to k do arr[i]:=random(100); end; begin arr_rand (n, a); end.

Самостоятельная работа

X и Y — входные параметры, AMean и GMean — выходные параметры вещественного типа.
В основной программе: Для заданных A, B, C, D найти среднее арифметическое и среднее геометрическое для пар (A, B), (A, C), (A, D), используя созданную процедуру.

1 вариант: для 5 одномерных массивов определять произведение элементов каждого массива, используя процедуру с двумя параметрами — число элементов массива и параметр-переменная для вывода произведения.

2 вариант: для 5 одномерных массивов определять минимальный элемент каждого массива, используя процедуру с двумя параметрами — число элементов массива и параметр-переменная для вывода минимального элемента.

Источник

Процедуры с параметрами

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

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

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

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

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

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

Приведем еще один пример программы вычисления значения степени числа, использующей для этой цели процедуру с формальными параметрами:

PROCEDURE Stepen (n: integer; x: real; var y: real);

var i: integer;

Begin

for i:= 1 to n do

y:= y*x;

STEPEN (j, a, b)

STEPEN (-j, 1/a, b);

Дата добавления: 2017-11-04 ; просмотров: 1598 ; ЗАКАЗАТЬ НАПИСАНИЕ РАБОТЫ

Источник

Робот процедуры с параметрами

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

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

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

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

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

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

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

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

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

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

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

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

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

Волгоградский государственный педагогический университет
Кафедра алгебры, геометрии и информатики

Источник

OpenEdge ABL

ВНЕШНИЕ И ВНУТРЕННИЕ ПРОЦЕДУРЫ

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

В ABL выделяют два вида процедур: внутренние и внешние.

Внешние процедуры представляют собой отдельные текстовые файлы с расширением .p. Именем внешней процедуры является имя ее файла. Таким образом, создание внешней процедуры сводится к созданию ее файла.

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

Внешние и внутренние процедуры могут быть как с параметрами, так и без них.

ПРОЦЕДУРЫ БЕЗ ПАРАМЕТРОВ

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

PROCEDURE proc-name [PRIVATE]:
. (тело процедуры)
END [PROCEDURE].

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

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

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

hello-word.p :

Создадим внешнюю процедуру test-proc2.p, в которой опишем и вызовем внутреннюю процедуру hello-word:

test-proc2.p:

ПРОЦЕДУРЫ С ПАРАМЕТРАМИ

Объявление параметров осуществляется в теле процедуры, как правило в самом ее начале, и очень схоже с объявлением переменных:

parameter – идентификатор параметра;

data-type – тип данных параметра.

Существует три основных типа параметра:

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

parameter-type – тип параметра;

parameter-value – значение параметра.

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

В случае если тип параметра не указан явно, то по умолчанию он является INPUT параметром.

В качестве параметра процедуры так может выступать буфер записи таблицы:

DEFINE PARAMETER BUFFER buffer-name FOR [TEMP-TABLE] table-name
[PRESELECT]

Параметр BUFFER всегда по умолчанию является INPUT-OUTPUT.

Параметром процедуры также могут быть временная таблица (TEMP-TABLE) и ProDataSet:

DEFINE PARAMETER
< TABLE FOR temp-table-name [APPEND] [BIND] [BY-VALUE]
| TABLE-HANDLE temp-table-handle [BIND] [BY-VALUE]
| DATASET FOR dataset-name [APPEND] [BIND] [BY-VALUE]
| DATASET-HANDLE dataset-handle [BIND] [BY-VALUE]
>

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

Помимо выходных параметров, процедуры дополнительно могут возвращать текстовое значение. Определение данного значения осуществляется с помощью оператора RETURN в теле процедуры.

RETURN [return-value |
ERROR [return-value | error-object-expression] |
NO-APPLY]

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

Одним из предназначений данной возможности является возврат ошибки, возникшей в теле процедуры. В этом случае оператор RETURN применяется с опцией ERROR.

Задание значений OUTPUT и INPUT-OUTPUT параметров процедуры должны осуществляться до оператора RETURN ERROR.

ОБЛАСТЬ ВИДИМОСТИ КОНТЕНТА ПРОЦЕДУР

Весь контент внешней процедуры (переменные, временные таблицы и т.д.) доступен всем содержащимся в ней внутренним процедурам и функций.

Внутренние процедуры не могут содержать в себе объявления временных таблиц. Если во внутренней процедуре предполагается работа с временной таблицей, то она должна быть объявлена во внешней процедуре.

Контент внутренней процедуры доступен исключительно ей самой и недоступен вне нее, ни внешней процедуре, ни другим внутренним процедурам и функциям. При этом, например, во внутренней процедуре допускается объявление одноименных переменных с уже объявленными во внешней процедуре.

Внешние процедуры могут обращаться к одним и тем же переменным находящимся в памяти. Для этого переменная в процедуре, где она создается должна быть объявлена как NEW [GLOBAL] SHARED, а в процедурах, которым она должна быть доступна как SHARED.

По завершению процедуры весь ее контент удаляется.

ИНКЛЮД-ФАЙЛЫ

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

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

Расширение
Назначение
.defобъявление переменных, временных таблиц и т.д.
.proописание внутренних процедур
.funописание функций

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

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

АРГУМЕНТЫ

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

my-proc1.p:

my-proc2.p:

my-iclude.i:

Имя аргумента должно начинаться с символа &. В процедуре my-proc2.p мы подключили инклюд-файл my-include.i с передаваемыми ему аргументами &par1 и &par2, которым присваиваем значения переменных a и b соответственно.

ПРОЦЕДУРНЫЙ УКАЗАТЕЛЬ

В ABL существует системная переменная THIS-PROCEDURE типа HANDLE, значением которой является указатель процедуры в которой она используется.

Процедурный указатель является ссылкой на процедуру как на объект ООП, обладающий набором атрибутов и методов.

Атрибуты:

Методы:

МетодОписание
ADD-SUPER-PROCEDURE()
GET-SIGNATURE()возвращает сигнатуру процедуры или функции
REMOVE-SUPER-PROCEDURE()
SET-CALLBACK-PROCEDURE()

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

PERSISTENT ПРОЦЕДУРЫ

Рассматриваемый до этого способ вызова внешней процедуры являлся NON-PERSISTENT. Создаваемый при NON-PERSISTENT вызове процедурный указатель существует исключительно до конца выполнения процедуры и по завершению ее удаляется из стека.

Допустим у нас имеется две внешние процедуры test1.p, в которой объявлена внутренняя процедура hello-word и test2.p, в которой нам необходимо осуществить вызов hello-word из test1.p.

Такой вызов внутренней процедуры из сторонней внешней процедуры имеет следующий синтаксис:

Осуществить такой вызов возможно только в том случае, если в момент вызова в test2.p процедуры hello-word в стеке процедур имеется указатель на test1.p. Таким образом, нам необходимо, чтобы test1.p была вызвана ранее чем test2.p и продолжала быть активной, т.е. ожидала завершения test2.p.

Следовательно решение данной задачи будет выглядеть следующим образом:

Первой вызываемой процедурой является test1.p, в которой уже осуществляется вызов test2.p с передачей ей в качестве входного параметра процедурного указателя test1.p. Процедура test1.p ожидает завершения test2.p и тем самым является активной на протяжении выполнения test2.p.

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

Таким образом, решение нашей задачи может быть реализовано несколько иначе:

Теперь первой вызываемой процедурой является test2.p и уже в ней, осуществляется вызов test1.p, указатель которой сохраняется в переменной h_proc и продолжает существовать до конца клиентской сессии.

Внутренняя процедура объявленная как PRIVATE не может быть вызвана из сторонних внешних процедур. Ее вызов возможен только из процедуры в которой она объявлена.

УДАЛЕНИЕ PERSISTENT ПРОЦЕДУР

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

Удаление персистентной процедуры осуществляется следующим образом:

DELETE PROCEDURE h_extern [NO-ERROR].

При удалении PERSISTENT процедуры могут возникнуть ошибки, например, когда удаляемый указатель h_extern отсутствует в стеке. Для отключения реакции AVM на возникающую ошибку удаления можно использовать NO-ERROR.

Перед удалением рекомендуется предварительно проверять существование процедурного указателя.

ШИФРОВАНИЕ ВНЕШНИХ ПРОЦЕДУР (УТИЛИТА XCODE)

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

ФУНКЦИИ

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

Описание функции осуществляется во внешней процедуре.

. (тело функции)

[RETURN result].
END [FUNCTION].

function-name – имя функции по которому она в дальнейшем будет вызываться;

return-type – тип данных возвращаемого функцией значения;

parametr – параметр функции;

result – возвращаемое функцией значение.

Основным требованием является то, что функция должна быть объявлена до момента обращения к ней. Как правило, объявление функции осуществляется в начале файла внешней процедуры.

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

ФУНКЦИЯ SIN(x):

робот процедуры с параметрами. Смотреть фото робот процедуры с параметрами. Смотреть картинку робот процедуры с параметрами. Картинка про робот процедуры с параметрами. Фото робот процедуры с параметрами

ФУНКЦИЯ cos(x):

робот процедуры с параметрами. Смотреть фото робот процедуры с параметрами. Смотреть картинку робот процедуры с параметрами. Картинка про робот процедуры с параметрами. Фото робот процедуры с параметрами

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

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

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

Объявление прототипа функции осуществляется следующим образом:

Применим объявление прототипа функции SIN():

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

Объявление прототипа функции дает AVM необходимую информацию о ее сигнатуре. Тем самым, встретив функцию в коде AVM уже знает о ней.

Объявление прототипа функции также позволяет использовать функции из сторонних внешних процедур. Для этого в опции IN необходимо указать handle процедуры, содержащей реализацию функции, которую мы собираемся использовать.

Создадим процедуру pp-lib.p, в которой разместим реализацию наших тригонометрических функций:

Что если подключаемая персистентная процедура содержит функцию с именем уже использующимся в процедуре, в которой она подключается?

При объявлении прототипа функции мы можем указать альтернативное имя функции, а в опции MAP [TO] актуальное имя функции в персистентной процедуре.

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

В случае если тип параметра не указан явно, то по умолчанию он является INPUT параметром.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *