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

20.Подпрограммы в Паскале. Область видимости. Локальные и глобальные идентификаторы.

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

  1. по количеству;

  2. по типу: на соответствующих местах должны стоять величины одного и того же типа;

  3. по смыслу: на соответственных местах должны стоять параметры, в которые вкладывается один и тот же смысл.

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

21-22. Процедуры. Ф-ции.

Существуют 2 вида подпрограмм: процедуры и ф-ции. Более унив-ым видом явл-ся процедура. Ф-ция м/б преобразована в процедуру. Обратное не верно. Если подпрог-ма возвращает един-ое знач простого или строкового типа, целесообразно ее оформить как ф-цию. В остальных случаях - процедура.

Структура процедуры: procedure идент-тор процедуры (список формальных параметров);

{Раздел описаний} - здесь м/б описаны const, переменные, типы, др. процедуры и ф-ции.

Begin {раздел операторов} - любые операторы Pascal; end. В таком виде она будет записана в разделе описаний. Обращение к процедуре: обращ-ся можно к ней как в осн-ой прог-ме, так и в процедурах и ф-циях, j расположены ниже. Идент-тор процедур (список фактических параметров; формальные параметры задаются с указанием типа, а фактические просто перечис-ся без указания типа). Формальные параметры — это идент-торы входных данных для подпрограммы. Если формальные параметры получают конкретные значения, то они называются фактическими.

Пример процедуры. Используем алг-м нахождения наибольшего общего делителя двух натур-ых чисел в качестве вспом-ого при решении задачи: составить прог-му вычитания дробей (a, b, c, d — натур-ые числа). Результат представить в виде обык-ой несокр-ой дроби.

Program Sub;

Var A, B, C, D, G, E, F: Integer;

Procedure Nod (M, N: Integer; Var K: Integer);

Begin

While M <> N Do

If M > N Then M: = M - N Else N: = N - M;

K:= M

End;

Begin

Write('Вв числ-ли и знам-ли дробей:');

ReadLn(A, B, C, D);

E := A * D - B * C;

F := B * D;

If E = 0 Then WriteLn(E)

Else

Begin

Nod(Abs(E), F, G);

E := E Div G;

F := F Div G;

WriteLn('Ответ: ', E, '/', F)

End

End.

Структура ф-ций:

Function идент-тор ф-ции (список формальных параметров): тип результата;

{раздел описаний};

Begin {раздел операторов}

Идент-тор ф-ции:=выражение

End.

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

Пример ф-ции дано условие выше:

program lab21;

var k,i,sc,sz,n:longint;

function pd (m,n:longint):longint;

begin

if m=0 then pd:=n

else begin m:=abs(m);

while m<>n do begin if m>n then m:=m-n

else n:=n-m;

end;end;

pd:=m; end;

begin

writeln('вв. кол. членов');

readln(n);

sc:=1;

sz:=1;

for i:=2 to n do begin

if odd(i) then

sc:=sc*i+sz

else

sc:=sc*i-sz;

sz:=sz*i;

k:=pd(sc,sz);

sc:=sc div k;

sz:=sz div k;

end;

writeln('сумма=',sc,'/',sz);

readln;

end.