Кое-что о Процедурах и Функциях в Паскале

 

(это лишь дополнение к тому, что надо читать в книжках)

 

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

 

2.      Чтобы понять, как структурировать программу, надо запомнить следующее.
В Исполняемой части Программы (между BEGIN  .....  END.) пишутся конструкции языка, отвечающие на вопрос "ЧТО мы делаем".
А Процедуры и Функции пишутся в Описательной части Программы и отвечают на вопрос "КАК мы это делаем".

 

3.      Функция служит для вычисления только ОДНОГО значения.

      Это значение может использоваться программой различными способами:

a)     присвоить его какой-то переменной;

b)     вывести его на экран;

c)      сравнить с какой-то другой переменной.

 

1.      Функция НИКОГДА не служит для вывода на экран своего вычисленного значения, она только возвращает его в Программу, и уже в Программе, при необходимости, происходит вывод полученных значений.

 

2.      Процедура в Паскале может использоваться двояко:

·           для выполнения каких-то действий;

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

 

3.      У Процедуры или Функции может быть несколько входных параметров и даже не быть совсем.


 

4.      Переменные и константы в программе, написанной на Паскале, могут быть Глобальными или Локальными.
Глобальные описываются в Описательной части самой программы. Локальные - в Описательной части Процедур или Функций -
не в Заголовке!!!.
Локальные используются только внутри своей Процедуры или Функции и наружу из них не выходят.
Глобальные переменные и константы имеют право входить в любую Процедуру или Функцию данной Программы.
ОДНАКО!!!
     Читайте про СЛОНОВ:

 

СЛОНАМИ мы будем называть те переменные или константы, которые попали в Процедуру или в Функцию как Глобальные, МИНУЯ ЗАГОЛОВОК  Процедуры или Функции.
Использование Слонов в учебных программах ЗАПРЕЩЕНО - оценка сразу будет очень сильно снижаться (в лучшем случае до 3/2).

 

Пример СЛОНА:

      

       Program Slon;

       Uses CRT;

       VAR {Глобальные переменные программы}

         x,y  : Integer;

         flag : Boolean;

 

       Procedure P(a,b : Integer); {Заголовок Процедуры}

       Var i : byte; {Локальные переменные Процедуры}

       Begin

         .....

         If a=b then flag:=false else flag:=true;

{!!!! flag - СЛОН, так как не является ни Входным параметром Процедуры,  указанным в Заголовоке Процедуры, ни ее Локальной переменной}

         .....

       End;

 

       BEGIN

         .....

         P(x,y); {вызов Процедуры}

         ....

       END.

 

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

 

То есть в Процедуре или в Функции можно использовать лишь те переменные и константы, которые содержатся либо в их Заголовке, либо являются Локальными переменными и константами данной Процедуры или Функции.


 

Кроме того, в учебных программах ЗАПРЕЩЕНО использовать одинаковые имена для входных параметров в Заголовке Процедуры или Функции и в Программе при их вызове.

 

 

Пример запрещенной конструкции (одинаковые имена переменных):

        Program Bad;

        Uses CRT;

        Procedure P(a : Integer; b : String); {Заголовок Процедуры}

        Begin

          ..... {тело Процедуры}

        End;

 

        VAR {Глобальные переменные программы}

          a : Integer;

          b : String;

 

        BEGIN

          .....

          P(a,b); {вызов Процедуры}

          ....

        END.

 

 

Пример разрешенной конструкции:

        Program Good;

        Uses CRT;

        Procedure P(a : Integer; b : String); {Заголовок Процедуры}

        Begin

          ..... {тело Процедуры}

        End;

 

        VAR {Глобальные переменные программы}

          x : Integer;

          s : String;

 

        BEGIN

          .....

          P(x,s); {вызов Процедуры}

          ....

        END.