Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
7.doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
109.57 Кб
Скачать

7.4. Глобальные и локальные данные

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

Глобальные переменные (типы, константы) – это те, которые объявлены в программе вне процедур или функций. Они действуют в основной программе и в любой подпрограмме. Процедуры и функции используют и модифицируют глобальные данные, если эти данные описаны в тексте основной программы выше описаний соответствующих процедур и функций.

Локальные данные – это константы, типы и переменные, существующие только внутри процедур и функций, и объявленные либо в списке параметров (только переменные), либо в разделах const, type, var этих процедур и функций. Такие данные недоступны для операторов основной программы.

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

7.5. Формальные и фактические параметры

Формальные параметры подпрограммы указывают, с какими параметрами следует обращаться к этой подпрограмме (количество параметров, их последовательность, типы). Они задаются в заголовке подпрограммы в виде списка формальных параметров, разбитого на группы, разделенные ";". В группу формальных параметров включаются однотипные параметры одной категории.

Все формальные параметры можно разбить на четыре категории:

– параметры – значения (значения этих параметров в основной про–

грамме подпрограммой не меняются);

– параметры – переменные (значения этих параметров подпрограм–

ма может изменять в основной программе);

– параметры – константы (используются только в версии 7.0);

– параметры – процедуры и параметры – функции.

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

Например, нельзя писать

function day (dn : (Pn, Vt, Sr, Ch, Pt, Sb, Vs)):integer;

Чтобы правильно написать этот заголовок, следует в основной программе ввести перечисляемый тип, а затем использовать его в заголовке:

type

days=(Pn, Vt, Sr, Ch, Pt, Sb, Vs);

function day (dn : days) : integer;

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

7.5.1. Параметры – значения

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

1) выделяется место в памяти машины для каждого формального параметра;

2) вычисляется значение фактического параметра;

3) это значение засылается в ячейку, соответствующую формальному пара–

метру.

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

Выводы:

а) формальные параметры – значения используют для передачи ис–

ходных данных в подпрограмму;

б) параметры – значения нельзя использовать для передачи результа–

тов из подпрограммы в основную программу;

в) в качестве фактического параметра, соответствующего формаль–

ному параметру – значению может быть использовано любое вы–

ражение, переменная, константа того же типа, что и формальный

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

Параметр – значение указывается в заголовке подпрограммы своим именем и через ":" – типом. Тип параметра – значения может быть любым за исключением файлового.

Если параметров – значений одного типа несколько, их можно объединить в одну группу, перечислив их имена через ",", а затем уже указать общий тип.

Пример. procedure Inp (Max, Min : real; N : Word);

function Mult (X,Y : integer) : real;

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

Inp (abs(Z), –abs(T), 2*k);

M := Mult (X+Y, X–Y);

Задача 1. Пусть в программе необходимо вычислить площадь квадрата S1 = a*a и площадь прямоугольника S2 = a*b при различных значениях a и b. Оформить вычисление этих площадей, используя подпрограмму – функцию.

program PL_FIGUR;

var A, B : real; S1, S2 : real;

function PL(X, Y : real): real;

begin

PL:= X*Y

end;

{основная программа}

begin

Write('Введите значения A, B:');

Readln(A, B);

S1:= PL(A, A); {вызов подпрограммы: S квадрата}

S2:= PL(A, B); {вызов подпрограммы: S прямоугольника}

Writeln('S1=', S1:5:2, ', S2=', S2:5:2)

end.

Задача2. Даны отрезки a, b, c и d. Для каждой тройки этих отрезков, из которых можно построить треугольник, напечатать площадь данного треугольника. При решении задачи использовать подпрограмму – процедуру PR_SQ (X, Y, Z), печатающую площадь треугольника со сторонами x, y и z, если такой треугольник существует.

program S_TREUG;

var A, B, C, D : real;

procedure PR_SQ(X, Y, Z : real);

var P : real;

begin if (X+Y>Z) and (Y+Z>X) and (Z+X>Y) then

begin P:= (X+Y+Z)/2;

Writeln(sqrt(P*(P–X)*(P–Y)*(P–Z)):6:2) end

end;

{основная программа}

begin

Write('Введите длины отрезков A, B, C, D:'); { A, B, C, D > 0}

Readln(A, B, C, D);

{вызов процедуры PR_SQ выполняется 4 раза для вычисления площадей

треугольников со сторонами : A, B, C; A, B, D; A, C, D; B, C, D при вы–

полнении условия существования этих треугольников}

PR_SQ(A, B, C); PR_SQ(A, B, D);

PR_SQ(A, C, D); PR_SQ(B, C, D)

end.

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