Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УМК ОАиП.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.14 Mб
Скачать

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

Среди параметров процедуры выделяют:

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

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

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

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

Пример

Procedure Expres (А, В, С : Real; Var X, Y : Real);

Var Z: Real;

Begin

Z: = A + B + C;

X : = Z * Z;

Y : = Sqrt (Z);

End;

Здесь имеем: А, В, С - параметры-значения; X, Y - пара­метры-переменные.

2.3. Область действия имен

  • Имена, объявленные в разделе описания основной программы, действуют в разделе операторов основной про­граммы и в любой подпрограмме (процедуре и функции), эти имена называются глобальными.

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

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

2.4. Процедуры без параметров

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

Задача 1

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

Program Lab8_l;

{Демонстрация операций +, *, - при работе с множеством}

Uses Crt;

Type MN = 1 .. 6;

MN1 = set of MN;

Var A, B, C: MN1;

{Подпрограмма вывода результата вычислений}

Procedure RESULT;

Var К : Integer;

Begin

For К : = 1 To 6 Do

If К In С Then Write (K : 4);

WriteLn;

End;

{Исполнимая часть головной программы}

Begin

ClrScr;

A : = [1,3,4];

В : = [2,4,6];

С :=А + В;

WriteLn ('ОБЪЕДИНЕНИЕ [1, 3, 4] + [2, 4, 6]');

RESULT;

С := А*В;

WriteLn ('ПЕРЕСЕЧЕНИЕ [1, 3, 4] » [2, 4, 6 ]');

RESULT;

C := A-B;

WriteLn ('РАЗНОСТЬ [1, 3, 4] - [2,4, 6]');

RESULT;

End.

Задача 2

Банк выплачивает р % годовых. В какую сумму обратит­ся вклад величиной X, положенный на n лет?

Lab8_2;

Uses Crt;

Var X: Extended; {начальная сумма}

n: Byte; {срок вклада}

{Описание процедуры Initialize}

Procedure Initialize;

Begin {1}

Write ('Введите сумму вклада:');

ReadLn (X);

Write ('Введите срок вклада:');

ReadLn (n);

End; {1}

{Описание процедуры Calculate}

Procedure Calculate;

Const p = 8; {процент годовых}

Var Xn: Extended;

Begin {2}

Xn: = X * Exp (n * Ln (1 + 0.01 * p));

Write ('Сумма составит: ', Xn: 10 : 3);

ReadLn;

End; {2}

{Исполнимая часть головной программы}

Begin {3}

Initialize;

Calculate;

End. {3}

Протокол работы программы:

Введите сумму вклада: 1000

Введите срок вклада: 5

Сумма составит: 1469.328

Опишем работу программы. В этой программе имеется две процедуры. Имя первой процедуры Initialize, она служит для ввода начальных данных, имя второй процедуры - Calcu­late, она служит для вычисления искомой суммы и вывода результата, который определяется по известной в теории процентов формуле «сложных процентов»: X„ = X (1 + 0,01p)n.

Заголовки процедур содержат только их имена. Такие процедуры называются процедурами без параметров. В те­лах процедур Initialize и Calculate соответственно четыре и три оператора. Имена процедур используются в основной программе для вызова процедур. Во второй процедуре введе­ны константа р и переменная Хп. Они существуют только внутри этой процедуры, это локальные параметры. Глобальные параметры объявлены в головной программе вне процедуры. Таковыми являются x и n.

Задача 3

Оформить в виде процедуры вычисление суммы 1+2+3 +... + и произведения 1, 2, 3... п целых чисел.

Program Lab8_3;

Var n: Integer;

Sum, Pr: Real;

{процедура вычисления суммы и произведения}

Procedure summa (k: Integer; Var x, у: Real); {k, х, у - глобальные параметры} Var i: Integer;

Begin {1}

x: = 0; y:=l;

For i: = 1 to к Do {i-локальный параметр}

Begin {2}

x: = x + i;

y: = y * i;

End; {2}

End; (1}

{Исполнимая часть головной программы}

Begin {3}

WriteLn ('Введите значение n');

Read (n);

Summa (n, Sum, Pr); {Вызов процедуры по имени с указа­нием фактических параметров}

WriteLn ('Sum =', Sum: 5);

WriteLn ('Pr =', Pr: 5);

End. {3}

Пояснения к программе.

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

Имеем следующие переменные в головной программе: n - количество суммируемых элементов, Sum - переменная, где копим сумму, Рr – переменная, где копим произведение. Это фактические параметры при обращении к процедуре Summa (n, Sum, Pr).

В заголовке процедуры Procedure Summa (k: Integer; Var x, у: Real); в скобках имеем формальные значения:

k - это параметр-значение типа Integer (количество сумми­руемых элементов);

х, у - это параметры-переменные типа Real (для накопления суммы и произведения).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]