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

2012

Глава 4 Модульное программирование

МГТУ им. Н.Э. Баумана

Факультет Информатика и системы управления

Кафедра Компьютерные системы и сети Лектор: д.т.н., проф.

Иванова Галина Сергеевна 1

4.1 Процедуры и функции

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

Программный блок:

Заголовок

Раздел

Раздел

;

блока

описаний

операторов

 

Процедура:

procedure

Идентификатор

;

 

 

 

 

Список

 

 

Функция:

 

 

параметров

 

 

 

 

 

 

function

Идентификатор

:

Тип

;

результата

 

 

 

Список

 

 

 

 

 

 

 

 

 

параметров

 

2

 

 

 

 

 

Передача данных в подпрограмму

Подпрограмма может

Program ex;

 

 

получать данные

Var

x:real;

z:real;

 

 

 

 

 

двумя способами:

Procedure A;

 

Обращение к

 

 

а) неявно – с

 

глобальной

Var z:integer;

использованием

переменной

 

 

 

глобальных

Обращение к

 

 

 

переменных;

 

 

 

переменной

 

Procedure B;

б) явно – через

 

вызывающей

 

Var i:integer;

 

подпрограммы

 

параметры.

 

Begin

i:=z; x:=5;

 

 

 

Обращение к

 

....

 

Неявная передача:

 

End;

 

глобальной

 

 

 

 

 

1) приводит к

переменной

 

 

 

большому

Begin

 

 

количеству

z:=round(x); ...

 

ошибок;

End;

 

 

2) жестко связывает

Begin

 

 

 

подпрограмму и

...

 

 

 

данные.

End.

 

 

3

Передача данных через параметры

 

Список параметров описывается в заголовке:

 

 

 

var

 

 

 

(

Идентификато

:

Тип

)

р

параметра

 

 

 

 

const

 

 

 

 

,

 

 

 

 

 

;

 

 

Параметры, описанные в заголовке – формальные.

 

При вызове подпрограммы необходимо определить фактические значения этих параметров – аргументы (константы и переменные).

Формальные и фактические параметры должны соответствовать по количеству, типу и порядку:

function proc(a:integer; b:single):byte; … n:= proc(5,2.1);

4

Способы передачи параметров

 

 

Передача по значению

 

 

 

Передача по ссылке

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Основная

 

 

 

 

 

Подпро-

 

Основная

 

 

 

Подпро-

программа

 

 

 

 

 

грамма

 

программа

 

 

 

грамма

 

Стек

Стек

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Копии

Работа с

Адреса

Работа с

копиями

 

параметров

параметрами

параметров

параметров

 

 

через адреса

 

 

 

 

 

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

Параметры - переменные – в под-

подпрограмму передаются ко-

программу передаются адреса фак-

пии фактических парамет-

тических параметров, соответст-

ров, и никакие изменения этих

венно все изменения этих парамет-

копий не возвращаются в вызы-

ров в подпрограмме происходят с

вающую программу. переменными основной программы.

5

Способы передачи параметров (2)

Параметры-значения при описании подпрограммы не помечаются, например:

function Beta(x:single; n:byte):integer; .

Параметры-переменные при описании подпрограммы помечаются служебным словом var, например:

function Alpha(x:single; Var n:byte):integer; .

Ограничение: в качестве фактических значений параметров-

переменных нельзя использовать литералы:

Alpha(2.5,5); // ошибка! правильно: n:=5; Alpha(2.5,n);

Параметры-константы – в подпрограмму, так же как и в случае параметров-переменных, передаются адреса фактических параметров, но при попытке изменить значение параметра компилятор выдает сообщение об ошибке; такие параметры при описании подпрограммы помечаются служебным словом const, например:

function Alpha(const x:single; n:byte); .

6

Определение площади четырехугольника

a

 

Площадь четырехугольника определяем как

 

b

сумму площадей треугольников.

e

Площадь треугольника определяем по

 

d

 

формуле Герона.

 

 

c

 

В качестве подпрограммы реализуем

 

 

вычисление площади треугольника,

 

 

поскольку эта операция выполняется два

 

 

раза с разными параметрами.

7

Схемы алгоритмов подпрограмм

Подпрограмма-функция

Начало алгоритма подпрограммы Формальные

параметры

Начало Stf(x,y,z)

Ввод

p:=(x+y+z)/2

a,b,c,d,e

 

Вывод

Stf= ...

Stf(a,b,e)+

 

Stf(c,d,e)

 

 

Return

Подпрограмма-процедура

Формальный параметр-переменная в заголовке на схеме не выделяется

 

Начало

Stp(x,y,z,S)

 

Ввод

p:=(x+y+z)/2

 

a,b,c,d,e

 

 

 

Stp

S= ...

 

(a,b,e,S1)

Вызов

 

 

 

проце-

Stp

 

дуры

Return

(c,d,e,S2)

 

 

Конец

Фактические Завершение параметры подпрограммы

Вывод

S1+S2

Конец

Фактическое

значение параметрапеременной8

Функция

Program Ex4_1;

Глобальные

переменные

 

{$APPTYPE CONSOLE}

 

Uses SysUtils;

Тип

Var A,B,C,D,E:single;

возвращаемого

значения

Function Stf(const X,Y,Z: single): single;

 

Var p:single; begin

p:=(X+Y+Z)/2;

Локальная

переменная

Result:=sqrt(p*(p-X)*(p-Y)*(p-Z)); // или Stf:=..

end; Begin

WriteLn('Input a,b,c,d,e:'); ReadLn(A,B,C,D,E);

Вычисление

возвращаемого

значения

WriteLn('S=',Stf(A,B,E)+Stf(C,D,E):7:3);

ReadLn;

End.

Вызов

 

 

функции из

 

 

выражения

9

Процедура

Program Ex4_2;

Глобальные

переменные

 

{$APPTYPE CONSOLE}

 

uses SysUtils;

Возвращаемое

 

Var A,B,C,D,E:real; S1,S2:single;

значение

Procedure Stp(const X,Y,Z:single;var S:single);

Var p:single;

Локальная

 

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

переменная

S:=sqrt(p*(p-X)*(p-Y)*(p-Z));

end;

 

Begin

 

WriteLn('Input a,b,c,d,e');

ReadLn(A,B,C,D,E);

Stp(A,B,E,S1);

Вызов

 

Stp(C,D,E,S2);

процедуры

WriteLn('S= ',S1+S2:7:3);

ReadLn;

End.

10

Соседние файлы в папке ОП. Лекции