![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Параметры-значения. Введенная нами в употребление процедура facне очень удобна для использования, поскольку ее назначение зафиксировано слишком жестко
Введенная нами в употребление процедура fac не очень удобна для использования, поскольку ее назначение зафиксировано слишком жестко. В частности, исходными данными для нее могут служить только значение переменной m. Поэтому перед каждым обращением в процедуре приходится предварительно присваивать этой переменной значение, для которого нужно вычислять факториал. Чтобы снять это ограничение и тем самым обеспечить общность процедуры и повысить удобство ее использования, Паскаль позволяет не фиксировать те исходные значения, к которым должна применяться процедура, а сделать их параметрами процедуры, которые можно достаточно удобно конкретизировать при каждом обращении к ней. С этой целью не будем заранее фиксировать значение, для которого процедура должна вычислять факториал, а обозначим ее формально некоторым идентификатором, не используемы в теле процедуры. Такие идентификаторы называются формальными параметрами процедуры, поскольку они представляют не какие-то конкретные значения, а значения " вообще". При каждом обращении к процедуре ее формальные параметры должны конкретизироваться, поэтому для упрощения последующих обращений к процедуре ее формальные параметры явно указываются в заголовке процедуры и тем самым упорядочиваются по их перечислению. При этом для каждого формального параметра должен быть указан тип значения, представляемого этим параметром. Как и в случае описания переменных, этот тип может быть указан только один раз, после списка соответствующих формальных параметров: _ Var p, p1, p2, p3: longint; n, k: byte; procedure fac(m: byte); var i: byte; begin p: =1; for i: =1 to m do p: =p*i; end; begin readln(n, k); fac(n); p1: =p; fac(k); p2: =p; fac(n-k); p3: =p; c: =p1/(p2*p3); readln(c: 10: 2); readln; end. При обращении к такой процедуре в соответствующем операторе процедуры вслед за именем процедуры необходимо в круглых скобках задать список фактических параметров, конкретизирующих те значения, к которым должна применяться процедура и которые в ее теле были обозначены формальными параметрами. Таким образом, при обращении к процедуре в ней вводятся в употребление свои внутренние переменные, имена которых совпадают с формальными параметрами. Эти переменные существуют только во время выполнения процедуры. При входе в процедуру этим внутренним переменным присваиваются значения, заданные соответствующими фактическими параметрами в операторе процедуры, — они и используются при выполнении процедуры. Благодаря этому раздел операторов в основной программе стал еще более компактным и наглядным. Рассмотренные здесь формальные параметры процедуры носят название параметры-значения, поскольку каждый из них в теле процедуры представляет некоторое значение, задаваемое при обращении к процедуре с помощью соответствующего фактического параметра. Фактическим параметром в этом случае может быть любое выражение того же типа, что и тип формального параметра, в частности — константа или переменная соответствующего типа как частный случай выражения. Следует подчеркнуть, что в данном случае фактические параметры используются только при входе в процедуру, с целые передачи задаваемых ими значений тем внутренним переменным процедуры, которые поставлены в соответствие ее формальным параметрам-значениям. После этого фактические параметры недоступны из процедуры, так что она не в состоянии ни использовать их каким-либо иным способом, ни изменить значение переменной, являющейся фактическим параметром.
|