
- •Министерство общего и профессионального образования Российской Федерации Уральский государственный технический университет Основы программирования на языке Паскаль
- •Структура программы на паскале
- •Типы данных
- •Правила программирования арифметических операций
- •Арифметические функции
- •Операции отношения (сравнения)
- •Логические операции
- •Приоритет операций
- •Операторы турбо-паскаля ввод и вывод данных
- •Составной оператор
- •Условный оператор
- •Оператор выбора
- •Операторы повторений (циклов) счетный цикл
- •Оператор цикла с предусловием
- •Оператор цикла с постусловием
- •Использование массивов
- •Процедуры и функции
- •Описание и использование функций
- •Описание и использование процедур
- •Взаимодействие подпрограмм
- •Стандартные модули
- •Использование модуля crt
- •Практический пример. Программа "меню"
- •Использование модуля graph
- •Установка цветов
- •Изображение точек и линий
- •Практический пример. Построение графика функции
- •Работа с текстом
- •Практический пример. Построение спирали
- •Программирование с использованием нестандандартных типов данных перечисляемый тип
- •Множества
- •Основы программирования на языке Паскаль
Процедуры и функции
Процедуры и функции - это особым образом оформленные фрагменты программы, имеющие собственное имя. Мы уже знакомы с этими понятиями и умеем использовать их при составлении программ на языке 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 для лучшего понимания различий правил описания функций и процедур.