|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Параметры подпрограммВ описании процедуры или функции задается список формальных параметров. Формальный параметр или фиктивный аргумент используется для обозначения входных (выходных) данных подпрограммы. Формальные параметры являются локальными по отношению к описываемой процедуре или функции. В операторах тела подпрограммы все действия описаны с формальными параметрами. Но при активизации подпрограммы формальные параметры заменяются на фактические и вычисления ведутся с фактическим данными. Для формальных параметров и локальных переменных подпрограмм на время выполнения подпрограммы выделяется место в оперативной памяти машины в соответствии с их типом и размерами. Эта область памяти носит название стек. В стек заносится либо значение фактического параметра, либо адрес его расположения в памяти. Существует четыре вида параметров: значение, константа, переменная и нетипизированная переменная. Они характеризуются следующим: 1. Группа параметров без предшествующего ключевого слова является списком параметров- значений. 2. Группа параметров, перед которыми следует ключевое слово const и за которыми следует тип, является списком параметров- констант. 3. Группа параметров, перед которыми стоит ключевое слово var и за которыми следует тип, является списком типизированных параметров-переменных. 4. Группа параметров, перед которыми стоит ключевое слово var или const, за которыми не следует тип, является списком нетипизированных параметров. Параметры-значения Формальный параметр-значение обрабатывается как локальная по отношению к процедуре или функции переменная, за исключением того, что он получает свое начальное значение из соответствующего фактического параметра при активизации процедуры или функции. Изменения, которые претерпевает формальный параметр-значение, не влияют на значение фактического параметра. Фактический параметр должен иметь тип, совместимый по присваиванию с типом формального параметра-значения и может быть выражением. Если параметр имеет строковый тип, то формальный параметр будет иметь атрибут размером 255 символов. Параметры-константы Формальные параметры-константы работают аналогично локальной переменной, доступной только по чтению, которая получает свое значение при активизации процедуры или функции от соответствующего фактического параметра. Присваивания формальному параметру-константе не допускаются. Формальный параметр-константа также не может передаваться в качестве фактического параметра другой процедуре или функции.
function Max(const a: Vector; n: integer): extended;
Параметр-константа, соответствующий фактическому параметру в операторе процедуры или функции, должен подчиняться тем же правилам, что и фактическое значение параметра. В тех случаях, когда формальный параметр не изменяет при выполнении процедуры или функции своего значения, вместо параметра-значения следует использовать параметр-константу. Параметры-переменные Параметр-переменнаяиспользуется, когда значение должно передаваться из процедуры или функции вызывающей программе. Соответствующий фактический параметр в операторе вызова процедуры или функции должен быть ссылкой на переменную. При активизации процедуры или функции все действия подпрограммы выполняются над фактическими параметрами, любая ссылка на формальный параметр-переменную приводит к доступу к самому фактическому параметру.
Procedure NullsArray(var a: Vector; n: integer); Var i:Integer; Begin {обнуление массива} For i:=1 to n do a[i]:=0; End;
Тип фактического параметра должен совпадать с типом формального параметра-переменной. Примечание: файловый тип может передаваться только как параметр-переменная. Нетипизированные параметры Когда формальный параметр является нетипизированным параметром-переменной, то соответствующий фактический параметр может представлять собой любую ссылку на переменную или константу, независимо от ее типа. Нетипизированный параметр, описанный с ключевым словом var, может модифицироваться, а нетипизированный параметр, описанный с ключевым словом const, доступен только по чтению. Нетипизированный параметр несовместим с переменными всех типов, пока ему не будет присвоен определенный тип с помощью присваивания типа переменной. Процедурные типы и переменные. Параметры-процедуры и параметры-функции Для объявления процедурного типа используется заголовок процедуры (функции) без указания имени процедуры или функции, например: Type Proc1 = Procedure (a, b: real; var c: real); Proc2 = Procedure (var a, b: integer); Func1 = Function: String; Func2 = Function (a: Real): Real; Имена параметров в описании процедурного типа никакого действия не вызывают. После определения процедурного типа появляется возможность описывать переменные этого типа. Такие переменные называют процедурными переменными. Например, с учетом описаний типа из предыдущего примера, можно объявить следующие переменные: var P: Proc2; F: Func2; Процедурной переменной можно присвоить значение только процедурного типа. Таким значением может быть другая процедурная переменная, или идентификатор процедуры или функции. Например, пусть мы имеем следующие описания процедуры и функции: procedure Swap(var A,B: integer); var Temp: integer; begin Temp:= A; A:= B; B:= Temp; End;
function Tan(Angle: real): real; begin Tan:= Sin(Angle) / Cos(Angle); end. Описанным ранее переменным P и F теперь можно присвоить значения: P:= Swap; F:= Tan; После такого присваивания обращение P(i,j) эквивалентно Swap(i,j) и F(X) эквивалентно Tan(X). Процедурные переменные в левой и в правой части должны быть совместимы по присваиванию, то есть должны иметь одно и то же число параметров, а параметры на соответствующих позициях должны быть одинакового типа. Нельзя присвоить процедурной переменной стандартную процедуру или функцию. Когда процедурной переменной присваивается идентификатор процедуры, это означает, что адрес процедуры заносится в поле процедурной переменной. Формальные параметры подпрограмм могут иметь процедурный тип. Если процедура или функция должны передаваться в качестве параметра, они должны удовлетворять тем же правилам совместимости типа, что и при присваивании. То есть такие процедуры или функции должны компилироваться с директивой far, они не могут быть встроенными функциями и не могут быть вложенными. Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.006 сек.) |