Тема №10. Подпрограммы-процедуры
Тема №10. Подпрограммы-процедуры
Для выполнения каких-либо действий (а не вычислений значений) существуют подпрограммы-процедуры. Они также могут принимать параметры, как и подпрограммыфункции. Давайте сразу проиллюстрируем работу процедуры на примере графической программы.
В стандартной графической библиотеке нет процедуры, рисующей треугольники. Давайте создадим такую процедуру и проверим ее работу.
Program UseProc;
Uses GraphABC;
Procedure Triangle(x1,y1,x2,y2,x3,y3:integer);
// Процедура рисует треугольник
begin
line(x1,y1,x2,y2);
line(x2,y2,x3,y3);
line(x3,y3,x1,y1);
end;
// Главная программа
begin
SetWindowSize(500,500);
Triangle(100,200,400,300,250,150);
Triangle(10,20,30,40,50,10);
end.
Как мы видим, процедура Trianlge имеет шесть целочисленных параметров и вызывает функции трижды функции Line для соединения точек. Создав такую процедуру, мы можем использовать ее столько раз, сколько нам надо в главной программе.
Задание 10
1. Создайте еще несколько новых графических процедур, которые бы расширили возможность стандартной библиотеки (ромб, параллелограмм, и т.п.) (по 3-4 балла за каждую)
- 29 -
Модули (Units)
Вы, наверное, обратили внимание на неудобство, связанное с тем, что все подпрограммы (как процедуры, так и функции) размещаются перед главной программой. Хотелось бы разместить их в отдельную библиотеку. Такая возможность есть, её предоставляют модули.
Поместим описание процедуры Triangle в модуль MyGraph.
Unit MyGraph;
// Заголовок модуля. Имя файла модуля должно совпадать
// с именем модуля! Т.е. в нашем случае оно должно быть
// MyGraph.pas, иначе главая программа его не найдет!
Uses GraphABC; // Модули могут использовать другие модули
Procedure Triangle(x1,y1,x2,y2,x3,y3:integer);
// Эта процедура находится в модуле MyGraph
begin
line(x1,y1,x2,y2);
line(x2,y2,x3,y3);
line(x3,y3,x1,y1);
end;
end. // Этот оператор – завершение модуля.
Теперь главная программа будет выглядеть так:
Program UseProc;
Uses GraphABC, MyGraph; // Использование стандартного и собственного модуля
begin
SetWindowSize(500,500); // Эта процедура описана в GraphABC
Triangle (100,200,400,300,250,150); // Эта процедура описана в MyGraph
Triangle(10,20,30,40,50,10);
end.
Модули могут содержать неограниченное число процедур, функций, а также описаний глобальных переменных, констант (об этом позже).
Задание 10
2. Сформируйте модуль с вашими собственными графическими процедурами (5 баллов)
- 30 -