Описание подпрограммы состоит из трёх подчастей:
- заголовок
- локальные описания
- тело программы
Заголовок – для обозначения начала описания подпрограммы.
Локальные описания – набор описаний типов, переменных и т.д., которые действуют только в рамках данной подпрограммы.
Тело программы – логический блок begin/end, содержащий операторы и команды, и реализующий логику работы.
Описание программы может располагаться в любом месте программы, но обязательно до первого вызова.
Заголовок состоит из трёх частей: ключевого слова, списка параметров и типа возвращаемого значения (для функций).
Программа м.б. процедурой или функцией (задаётся ключевым словом).
Procedure Comp (X:Integer; S:String);
Function Compare (A1,A2:Byte; Stroka:String) : Real;
Procedure Sheetswap;
Function EndPrint:Boolean;
Для параметров м.б. заданы значения по умолчанию.
Procedure MyProc (I:Integer; i1:integer=1; i2:integer=2);
При обращении к процедуре формальным параметрам при описании, присваиваются значения, указанные в списке параметров при вызове (фактические параметры). Это называется передачей параметров по значению. Формальные параметры играют роль локальных переменных.
Если в списке параметров перед переменной поставить ключевое слово var, то вместо формального параметра подставится имя переменной фактического параметра (передача параметра по имени):
Procedure MyProc (X:Byte; var Y:Byte);
Вызов – MyProc (2+2, N);
В теле процедуры будет обрабатываться локальная переменная X со значением 4 и переменная Y, которая на самом деле является переменной N из другой части программы. По окончании работы процедуры локальная переменная удаляется из памяти, а при изменении значения переменной Y изменится и N (потенциальные ошибки). Передачу параметров по имени лучше не применять, за исключением передачи в подпрограмму данных большого объёма. Для обеспечения неизменности параметра в теле процедуры его можно объявить постоянным:
Procedure Sum (const A:Array);
Для получения результатов от подпрограммы правильнее использовать функции. Процедуры нужно использовать для выполнения действий.
Для передачи в подпрограмму строк фиксированной длины, их нужно сначала описать как новый тип:
Procedure Sum (s:String[50]); // - неверно
Правильно:
Type string 50 = string[50];
Procedure Sum (S:string);
Локальное описание типов, переменных и констант подчиняется обычным правилам Паскаля.
Программы могут включать вложенные подпрограммы, обращение к которым возможно только у тела «родительской» подпрограммы и которые могут использовать любые локальные описания, сделанные до них. Уровень вложенности неограничен.
В теле подпрограммы между логическими скобками begin/end располагаются только операторы и вызовы других подпрограмм.
При использовании функции нужно определить, как значение будет возвращено в вызывающую программу:
Соответствующее значение присваивается переменной, имя которой совпадает с названием функции:
Function Sum (A,B: Integer):Integer;
Begin:= A+B;
End;
Или:
Соответствующее значение присваивается специальной локальной переменной Result;
Function Sum (A,B:Integer):Integer;
Bbegin
Result:=A+B;
End;
Вызов из прграммы (функции) – работа программы – end – передачпа управление обратно.
- заголовок
- локальные описания
- тело программы
Заголовок – для обозначения начала описания подпрограммы.
Локальные описания – набор описаний типов, переменных и т.д., которые действуют только в рамках данной подпрограммы.
Тело программы – логический блок begin/end, содержащий операторы и команды, и реализующий логику работы.
Описание программы может располагаться в любом месте программы, но обязательно до первого вызова.
Заголовок состоит из трёх частей: ключевого слова, списка параметров и типа возвращаемого значения (для функций).
Программа м.б. процедурой или функцией (задаётся ключевым словом).
Procedure Comp (X:Integer; S:String);
Function Compare (A1,A2:Byte; Stroka:String) : Real;
Procedure Sheetswap;
Function EndPrint:Boolean;
Для параметров м.б. заданы значения по умолчанию.
Procedure MyProc (I:Integer; i1:integer=1; i2:integer=2);
При обращении к процедуре формальным параметрам при описании, присваиваются значения, указанные в списке параметров при вызове (фактические параметры). Это называется передачей параметров по значению. Формальные параметры играют роль локальных переменных.
Если в списке параметров перед переменной поставить ключевое слово var, то вместо формального параметра подставится имя переменной фактического параметра (передача параметра по имени):
Procedure MyProc (X:Byte; var Y:Byte);
Вызов – MyProc (2+2, N);
В теле процедуры будет обрабатываться локальная переменная X со значением 4 и переменная Y, которая на самом деле является переменной N из другой части программы. По окончании работы процедуры локальная переменная удаляется из памяти, а при изменении значения переменной Y изменится и N (потенциальные ошибки). Передачу параметров по имени лучше не применять, за исключением передачи в подпрограмму данных большого объёма. Для обеспечения неизменности параметра в теле процедуры его можно объявить постоянным:
Procedure Sum (const A:Array);
Для получения результатов от подпрограммы правильнее использовать функции. Процедуры нужно использовать для выполнения действий.
Для передачи в подпрограмму строк фиксированной длины, их нужно сначала описать как новый тип:
Procedure Sum (s:String[50]); // - неверно
Правильно:
Type string 50 = string[50];
Procedure Sum (S:string);
Локальное описание типов, переменных и констант подчиняется обычным правилам Паскаля.
Программы могут включать вложенные подпрограммы, обращение к которым возможно только у тела «родительской» подпрограммы и которые могут использовать любые локальные описания, сделанные до них. Уровень вложенности неограничен.
В теле подпрограммы между логическими скобками begin/end располагаются только операторы и вызовы других подпрограмм.
При использовании функции нужно определить, как значение будет возвращено в вызывающую программу:
Соответствующее значение присваивается переменной, имя которой совпадает с названием функции:
Function Sum (A,B: Integer):Integer;
Begin:= A+B;
End;
Или:
Соответствующее значение присваивается специальной локальной переменной Result;
Function Sum (A,B:Integer):Integer;
Bbegin
Result:=A+B;
End;
Вызов из прграммы (функции) – работа программы – end – передачпа управление обратно.