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

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

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

В наших примерах мы уже неоднократно пользовались некоторыми СТАНДАРТНЫМИ процедурами и функциями Паскаля: write, read и т.д. Сейчас мы будем говорить о НЕСТАНДАРТНЫХ процедурах и функциях, которые разрабатывает сам программист. Все они должны быть описаны в разделе описаний.

Описание и использование функций

Общая форма определения функции такова:

FUNCTION <имя функции>(a1,a2,...,an:<тип 1> ;

b1,b2,...,bn:<тип 2>; ...):<тип результата>;

Здесь <имя функции> - уникальное имя функции;

a1,a2,an - параметры типа <тип 1>;

b1,b2,bn - параметры типа <тип 2>;

<тип результата> - тип значения, возвращаемого функцией.

Поскольку функция - это подпрограмма, то ее структура такая же, как и всей программы. Таким образом, далее (после задания имени функции), следуя правилам Паскаля, мы обязаны описать константы, переменные и т. д., которые используются в данной подпрограмме (кроме тех, которые уже описаны в строке FUNCTION...). Далее следует раздел операторов данной функции, заключенный в операторные скобки BEGIN...END;. Обратим внимание, что после слова END обязательно должна стоять точка с запятой. Ну и конечно, среди операторов обязательно должен присутствовать оператор присвоения имени функции какого-либо конкретного значения вида

<имя функции>:=<выражение>;

Рассмотрим пример. Пусть в нашем распоряжении имеется N бочонков от лото. Мы должны выбрать наугад М из них. Сколькими способами мы можем реализовать эту задачу? На языке комбинаторики это называется - определение числа сочетаний С из N элементов по М:

N!

C = --------------------.

M!*(N-M)!

Как видим для расчета числа сочетаний нужно трижды вычислить факториал. Поэтому его вычисление целесообразно оформить в виде функции.

Program No9;

VAR {переменные программы No9}

M,N,C: word;

{----------------------------------------}

FUNCTION F(k: word):word;

VAR {переменные функции F}

p, i: word;

Begin { начало F}

p:=1;

for i:=1 to k do p:=p*i;

F:=p;

END; {конец F}

{-----------------------------------------}

BEGIN {начало No9}

write('M,N'); readln(M,N);

C:=F(N) div F(M) div F(N-M);

write('Число сочетаний ',C);

END. {конец No9}

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

Описание и использование процедур

Общая форма определения процедуры такова:

PROCEDURE <имя процедуры>(a1,a2,...,an:<тип 1> ;

b1,b2,...,bn:<тип 2>; ...;

VAR c1,c2,...,cn:<тип 3> ;

d1,d2,...,dn:<тип 4>...);

Здесь <имя процедуры> - уникальное имя процедуры;

a1,a2,an - входные параметры типа <тип 1>;

b1,b2,bn - входные параметры типа <тип 2>;

VAR - ключевое слово, за которым следует список выходных параметров с указанием их типов;

c1,c2,cn - выходные параметры типа <тип 3>;

d1,d2,dn - выходные параметры типа <тип 4>.

Общая структура описания процедуры точно такая же, как и любой программы: сначала следует раздел описаний, где кроме всего прочего могут описываться и другие процедуры далее следует раздел операторов процедуры заключенный в операторные скобки BEGIN...END. Описание процедуры завершается точкой с запятой.

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

q = N!, w = M!, r = (N-M)!

N! q

Тогда C = ------------ = -----.

M!*(N-M)! w*r

Вычисление факториала оформим в виде процедуры.

Program No10;

VAR {переменные программы No10}

M,N,C : word;

q,w,r : word;

{----------------------------------------}

PROCEDURE F(k: word; VAR p: word);

VAR {переменные процедуры F}

i: word;

Begin {начало п/п F}

p:=1;

for i:=1 to k do p:=p*i;

END; {конец п/п F}

{-----------------------------------------}

BEGIN {начало программы No10}

write('M,N'); readln(M,N);

F(N,q);

F(M,w);

F(N-M,r);

C:=q div w div r;

write('Число сочетаний ',C);

END. {конец программы No10}

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

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