Показаны сообщения с ярлыком Структура. Показать все сообщения
Показаны сообщения с ярлыком Структура. Показать все сообщения

Процедуры пользователя в Pascal (описание, вызов, структура)

В языке Паскаль имеется два вида подпрограмм - процедуры и функции.

Процедуры помещаются в раздел описаний программы. Для обмена информацией между процедурами и функциями и другими блоками программы существует механизм входных и выходных параметров.

Входными параметрами называют величины, передающиеся из вызывающего блока в подпрограмму (исходные данные для подпрограммы), а выходными - передающиеся из подпрограммы в вызывающий блок (результаты работы подпрограммы).

Одна и та же подпрограмма может вызываться неоднократно, выполняя одни и те же действия с разными наборами входных данных. Параметры, использующиеся при записи текста подпрограммы в разделе описаний, называют формальными, а те, что используются при ее вызове - фактическими.

Описание и вызов процедур 

Структура описания процедур до некоторой степени похожа на структуру Паскаль-программы: у них также имеются заголовок, раздел описаний и исполняемая часть. Раздел описаний содержит те же подразделы, что и раздел описаний программы: описания констант, типов, меток, процедур, функций, переменных. Исполняемая часть содержит собственно операторы процедур.

Формат описания процедуры имеет вид:
Procedure имя процедуры (формальные параметры);
раздел описаний процедуры
Begin
  исполняемая часть процедуры
End;

Формальные параметры в заголовке процедур записываются в виде:
Var имя праметра: имя типа
 и отделяются друг от друга точкой с запятой. Ключевое слово var может отсутствовать. Если параметры однотипны, то их имена можно перечислять через запятую, указывая общее для них имя типа.

При описании параметров можно использовать только стандартные имена типов, либо имена типов, определенные с помощью команды type.Список формальных параметров может отсутствовать.

Вызов процедуры производится оператором, имеющим следующий формат:
имя процедуры(список фактических параметров); 

Список фактических параметров - это их перечисление через запятую. При вызове фактические параметры как бы подставляются вместо формальных, стоящих на тех же местах в заголовке.

Таким образом происходит передача входных параметров, затем выполняются операторы исполняемой части процедуры, после чего происходит возврат в вызывающий блок. Передача выходных параметров происходит непосредственно во время работы исполняемой части.

При вызове процедур необходимо соблюдать следующие правила:
  • количество фактических параметров должно совпадать с количеством формальных; 
  • соответствующие фактические и формальные параметры должны совпадать по порядку следования и по типу. 
Заметим, что имена формальных и фактических параметров могут совпадать. Это не приводит к проблемам, так как соответствующие им переменные все равно будут различны из-за того, что хранятся в разных областях памяти.

Кроме того, все формальные параметры являются временными переменными - они создаются в момент вызова подпрограммы и уничтожаются в момент выхода из нее.

Существует два вида переменных:
  • Локальные – описываются в подпрограммах, используются только в той подпрограмме, где были описаны. В основной программе они не известны. 
  • Глобальные – описываются в основной программе до раздела процедур и функций. Область их действий распространяется на основную программу и на все подпрограммы. 
Рассмотрим использование процедуры на примере программы поиска максимума из двух целых чисел.
Var x,y,m,n: integer;
Procedure MaxNumber(a,b: integer; Var max: integer);
Begin
  If a>b Then max := a
  Else max := b;
End;
Begin
  write('Введите x,y ');
  readln(x,y);
  MaxNumber(x,y,m);
  MaxNumber(2,x+y,n);
  writeln('m=',m,'n=',n);
End.

Структура программы Pascal

Структура программы Pascal

Структура программы 
Program <имя программы>;
{Заголовок программы необязателен}
<Раздел объявления меток>
<Раздел объявления констант>
<Раздел объявления типов>
<Раздел объявления переменных>
<Раздел объявления процедур и функций>
Begin
  <раздел операторов>
End.

Раздел объявления меток

Формат
Label 
  <имя метки, …>;
Например
Label
   1, 3, 1A, D;
Метка ставится в теле программы перед оператором и отделяется от него двоеточием.

Структура программы на языке Pascal

Программа в Паскале состоит из 3-х частей :
  1. Заголовок программы
  2. Раздел описания
  3. Раздел операторов

Схематичная структура

Структура программы написана в соответствии с синтаксисом языка Паскаль. Выглядит она так :

program <Имя программы> ;
type {Это раздел описания типов}
<Имя типа 1> = <Тип 1> ;
<Имя типа N> = <Тип N> ;

const {Это раздел описания констант}
<Имя константы 1> = <значения 1> ;
<Имя константы N> = <значение N> ;

var {Это описание переменных}
<Имя переменной 1> : <Тип 1> ;
<Имя переменной N> : <Тип N> ;

procedure <Имя процедуры>(<Список формальных параметров и переменных>) ; 
{Это описание процедуры}
<Раздел описания ( type, const, var, procedure, function)> ; 
{В подпрограмме также можно использовать все структуры основной программы}
begin
<Тело процедуры> ;
end ;

function <Имя функции> (<Список формальных параметров>) : 
<Тип возвращаемого значения>; {Все по аналогии с процедурой}
<Раздел описания> ;
begin
<Тело функции> ;
end ;

Begin
<Тело программы> ; {Основная программа}
End .

Пример сохранения структуры

Структура программы важно знать и использовать в ваших программах, так как именно такой порядок разработан не случайно. К примеру, вы объявляете какой-либо тип и используете его для переменных -

type mass = array of integer ;
{Тип mass который подразумевает массив целых чисел}
var massiv : mass ;
{Переменная massiv является переменной массива целых чисел}

- в этом случае все будет работать корректно и правильно. А также вы сможете использовать этот тип в любой части программы.

Однако, если поменять местами эти строчки вот так -

var massiv : mass ;
type mass = array of integer ;

- то программа выдаст вам ошибку.