1.1.11 Процедуры и функции. Модули.
Если необходимо повторять определенную последовательность действий в нескольких местах программы, то используются процедуры и функции.
Современный стиль программирования – такой способ программирования, когда в главной программе практически отсутствуют операторы, а есть только функционально значимые процедуры. Сейчас в основном используется технология структурного программирования,которая предполагает блочно-модульное построение программы.
Наиболее часто употребляемые библиотечные процедуры и функции называют стандартными. Некоторые стандартные функции и процедуры были описаны ранее (это стандартные математические функции, процедуры ввода-вывода и т.п.).
Если планируется использование процедур во многих программах, то эти процедуры помещаются в отдельный модуль.
Процедуры и функции находятся в разделе описаний (см. табл. 1.1).
Процедура – независимая часть программы, предназначенная для выполнения повторяющихся действий. Она состоит из заголовка и тела. По структуре она похожа на мини-программу. Иногда процедуру называют подпрограммой.
Заголовок процедуры в общем случае выглядит так:
PROCEDURE <имя> (<список формальных параметров>);
Имя процедуры – ее название. Обычно процедуры называются так, чтобы было понятно, для чего она предназначена.
Формальные параметры – это переменные, через которые передаются значения из программы в процедуру и обратно. Используются при описании процедуры.
Список формальных параметров выглядит так:
(Парам1:Type1; Парам2:Type2;… VAR ПарамN:TypeN…);
При этом параметры, стоящие перед VAR – это параметры, передаваемые в процедуру (параметры-значения), а после VAR – параметры, вычисляемые в процедуре или результат работы процедуры (параметры-переменные).
Особенности:
Если есть несколько параметров одного типа, они записываются через запятую, как в описаниях переменных.
В спецификации параметров можно использовать только идентификатор типа. Например, можно написать (a, b, c: real) но нельзя написать (a:array[1..10] of real). При использовании массив, необходимо предварительно задать тип переменной массива:
Const n=10;
Type Matr = array[1..n] of real;
Фактические параметры – это идентификаторы конкретных переменных, используемые при вызове процедуры.
Вызов процедуры в программе осуществляется следующим образом:
<имя> (<список фактических параметров>);
Список фактических параметров выглядит так:
(Парам1, Парам2, … ПарамN);
Пример. Векторное произведение.
Необходимо вычислить векторное произведение Для этого сначала вычисляется векторное произведение , а затем вычисляется
Program NameProg;
Const n=3;
Type Vector = array[1..n] of real;
Var
i: integer;
x,y,z,rez: Vector;
Procedure VectMult (a,b: Vector; var c: Vector);
Begin
c[1]:= a[2]*b[3]– a[3]*b[2];
c[2]:= a[3]*b[1]– a[1]*b[3];
c[3]:= a[1]*b[3]– a[3]*b[1];
End;
Begin
VectMult (x,y,z);
VectMult (x,z,rez);
End.
Формальные параметры здесь – это a, b, c, а фактические – при первом вызове процедуры – x,y,z и при втором – x,z,rez.
Функции вычисляют только одно единственное значение простого типа или указатель. Общая структура функции совпадает со структорой процедуры.
Заголовок функции в общем случае выглядит так:
FUNCTION <имя> (<список форм. параметров>): <тип результата>;
Вызывается просто по имени.
Пример1. Вычисление синуса угла, заданного в градусах
Program NameProg;
Var
i: integer;
x,y,z: real;
Function SinGrad(x: real): real;
Begin
SinGrad := sin(x*3,1415926/180);
End;
Begin
y:= 5* SinGrad(x) – 2 sqr(x);
z:= sqr( sqr(x))/7 – 13* SinGrad(x) – 2;
End.
Пример2. Вычисление длины вектора
Program NameProg;
Const n=3;
Type Vector = array[1..n] of real;
Var
DLx, DLy: real;
x,y: Vector;
Function DlVect(a: Vector): real;
Var i: integer;
Begin
DlVect:=0;
for i:=1 to 3 do
Begin
DlVect:= DlVect+sqr(a[i]);
End;
End;
Begin
DLx:= DlVect(x);
DLy:= DlVect(y);
End.
Пример 3. Вычисление котангенса угла в градусах
Program NameProg;
Var
a,y: real;
Function CtgGrad (a: real): real;
Const pi=3,14;
Var x: real;
Begin
x:=a*pi/180;
if (sin(x) <> 0) then
ctgGrad:=cos(x)/sin(x)
else
WriteLn(‘ctg не существует’);
End;
Begin
y:=ctgGrad(x);
End.
Во многих задачах, особенно в задачах вычислительной математики, необходимо передавать имена процедур и функций в качестве параметров. Для этого в Турбо Паскаль Borland введен новый тип данных – процедурный или функциональный, в зависимости от того, что описывается. В стандартном языке Паскаль такого типа нет.
Если в подпрограмме необходимо задавать различные функции, то в описании необходимо предусмотреть формальный параметр-функцию.
Например, Function Integral(a,b:real; Function f(x:real):real): real;
Можно вводить описание процедурных и функциональных типов в разделе описания типов:
type
FuncType = Function(x: Real): Real;
ProcType = Procedure (a,b: Real; var x,y: Real);
Функциональный и процедурный тип определяется как заголовок процедуры и функции со списком формальных параметров, но без имени.
После объявления процедурного или функционального типа его можно использовать для описания формальных параметров – имен процедур и функций. Кроме того, необходимо написать те реальные процедуры или функции, имена которых будут передаваться как фактические параметры. Эти процедуры и функции должны компилироваться в режиме дальней адресации (far) с ключом {$F+}.
Модули (объекты UNIT) – это комплекс специально подобранных процедур и функций, которые хранятся на диске в откомпилированном виде (файлы с расширением tpu).
Наиболее часто используемые готовые модули:
– для управления режимом экрана – модуль Crt,
– для создания программ интерфейса, рисования – модуль Graph,
– для обработки прерываний – модуль DOS.
Возможно создание своей собственной библиотеки процедур и функций, объединение их в модуль, компиляция – и дальнейшее использование в своих программах.
Borland Pascal содержит следующие стандартные модули:
Crt, Dos, Graph, Graph3, Objects, ODialogs, Overlay, Printer, Strings, System, Turbo3, WinAPI, WinCrt, WinDOS, WinPrn, WinProcs,WinTypes.
Данные стандартные модули обеспечивают поддержку всех ваших программ на Borland Pascal и хранятся в отдельных файлах TPW.TPL (для среды Windows), TPP.TPL (для защищенного режима DOS) или TURBO.TPL (для реального режима DOS).
Любой модуль подобен отдельной программе Pascal: он может иметь основную операторную часть, которая вызывается перед началом вашей программы и в которой можно производить любую необходимую инициализацию.
- 1.1 Теоретические сведения
- 1.1.1 Структура программы в языке Паскаль
- 1.1.2 Основные типы данных
- 1.1.3 Оператор присваивания
- 1.1.4 Арифметические выражения
- 1.1.5 Логические выражения
- 1.1.6 Основные стандартные функции языка Паскаль
- 1.1.7 Основные функции ввода/вывода
- 1.1.8 Операторы цикла
- 1.1.9 Операторы перехода (безусловный и условные)
- 1.1.10 Работа с массивами
- 1.1.11 Процедуры и функции. Модули.
- 1.1.11.1 Модуль System
- 1.1.11.2 Модуль Crt
- Порядок выполнения работ
- Лабораторная работа №5. Работа с двумерными массивами
- Лабораторная работа №6. Программирование с использованием подпрограмм
- Содержание
- 1.1 Теоретические сведения 1