- •Лекция 2
- •1.8. Операторы, выражения, операции
- •1.8.1. Исполняемые операторы
- •1.8.2. Оператор присваивания
- •1.8.3. Выражения
- •1.8.4. Арифметические функции
- •1.8.6. Операции
- •1.8.6.1. Арифметические операции
- •1.8.6.2. Логические операции
- •1.8.6.3. Операторы отношения
- •1.8.6.4. Операторы для строк (String)
- •2. Структура: программы, процедуры, функции, модуля
- •2.1. Структура программы
- •2.2. Структура функции
- •2.3. Структура процедуры
- •2.4. Структура модуля
- •Имя модуля и имя файла, в котором записан модуль должны совпадать.
- •2.5. Список параметров
- •2.5.1. Область видимости
- •2.5.2. Формальные и фактические параметры
- •2.5.3. Параметры-значения, параметры-переменные, нетипизированные параметры
- •3. Операторы
- •3.2. Оператор if
- •3.1. Оператор for
- •3.2. Оператор while
- •3.3. Оператор цикла repeat
- •3.4. Оператор выбора case
2.3. Структура процедуры
Procedure NameProc(список параметров); |
Раздел описания типов, констант, переменных, Процедур, функций |
Begin |
Радел операторов |
End; |
Листинг 4. Пример процедуры
procedure PSurface(x1,y1,x2,y2,x3,y3: real;
var S: real);
var
a,b,c,p: real;
begin
a:=Distance(x1,y1,x2,y2); b:=Distance(x2,y2,x3,y3);
c:=Distance(x3,y3,x1,y1); p:=(a+b+c)/2;
S:=Sqrt(p*(p-a)*(p-b)*(p-c));
end;
2.4. Структура модуля
unit NameUnit; |
Interface |
Uses …; // подключение других модулей Секция описания типов, констант, переменных, заголовки процедур, функций, доступных из секции реализации |
Implementation |
Uses …; // подключение других модулей Секция описания локальных типов, констант, переменных. Тексты процедур, функций |
Initialization |
Секция операторов, выполняемых при инициализации |
Finalization |
Секция операторов, выполняемых при завершении работы |
end. |
Имя модуля и имя файла, в котором записан модуль должны совпадать.
Листинг 5. Пример модуля
unit Lib;
interface
var
x1,y1, x2,y2, x3,y3, S: real;
function Distance(x1,y1,x2,y2: real): real;
function FSurface(x1,y1,x2,y2,x3,y3: real): real;
implementation
function Distance(x1,y1,x2,y2: real): real;
begin
Result:=Sqrt(Sqr(x2-x1)+Sqr(y2-y1));
end;
function FSurface(x1,y1,x2,y2,x3,y3: real): real;
var
a,b,c,p: real;
begin
a:=Distance(x1,y1,x2,y2); b:=Distance(x2,y2,x3,y3);
c:=Distance(x3,y3,x1,y1); p:=(a+b+c)/2;
Result:=Sqrt(p*(p-a)*(p-b)*(p-c));
end;
end.
Листинг 6. Программа с подключением модуля
program Pr4;
uses
Lib;
{$APPTYPE CONSOLE}
begin
Write(‘x1=’); Readln(x1); Write(‘y1=’); Readln(y1);
Write(‘x2=’); Readln(x2); Write(‘y2=’); Readln(y2);
Write(‘x3=’); Readln(x3); Write(‘y3=’); Readln(y3);
S:=FSurface(x1,y1,x2,y2,x3,y3); Write(‘S=’,S:12:4);
Readln;
end.
2.5. Список параметров
2.5.1. Область видимости
Все константы, переменные, типы, функции, процедуры, описанные в процедуре или функции, являются локальными и доступны только внутри этой подпрограммы или в её подпрограммах (процедурах и функциях).
Все константы, переменные, типы, функции, процедуры, описанные в родительской подпрограмме ранее, чем дочерняя подпрограмма, доступны дочерней подпрограмме. Для дочерней подпрограммы эти константы, переменные, типы, функции, процедуры являются глобальными.
Если модуль подключает к себе другой модуль, то константы, переменные, типы, функции, процедуры, описанные в разделе interface подключенного модуля доступны подпрограммам подключающего модуля. Переменные, типы, функции, процедуры, описанные в разделе implementation доступны только подпрограммам этого модуля.
Для организации перекрестного подключения модулей необходимо хотя бы одно подключение реализовать в разделе implementation.
Необходимо избегать использования глобальных переменных, т.к.:
подпрограмма становится менее универсальной;
возрастает вероятность недопустимого изменения глобальной переменной в подпрограмме.
