Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тurbo Pascal 7+.doc
Скачиваний:
12
Добавлен:
24.12.2018
Размер:
10.09 Mб
Скачать

Глава 14. Строгости Паскаля

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

14.1. Структура программы

Минимальная программа на Паскале имеет такой вид: BEGIN END.

Она ничего не делает. Если мы хотим заставить программу что-то делать, то все операторы, приказывающие выполнять нужные нам действия, мы должны записать между BEGIN и END. Например:

BEGIN WriteLn(1993); WriteLn(1994) END.

Обычно программа содержит переменные, константы, обращения к подпрограммам и прочие элементы. Все они должны быть описаны выше BEGIN. Например:

CONST k =10;

VAR a :Real;

BEGIN

a:=5;

WriteLn(a+k)

END.

Таким образом, программа на Паскале состоит из двух и только из двух разделов:

• выше BEGIN расположен раздел описаний,

• ниже BEGIN расположен раздел выполняемых операторов.

Выше этих двух разделов могут находиться две короткие строки, но о них чуть позже.

Приведем полный список служебных слов, после которых задаются описания:

• переменные - описываются после служебного слова VAR

• метки - описываются после служебного слова LABEL

• константы - описываются после служебного слова CONST

• процедуры - описываются после служебного слова PROCEDURE

• функции - описываются после служебного слова FUNCTION

• новые типы, определяемые программистом, описываются после служебного слова TYPE.

Если программа на Паскале использует модули, то они должны быть перечислены выше раздела описаний после служебного слова USES.

И наконец, программа может иметь заголовок, который состоит из служебного слова PROGRAM (имени программы).

Пример программы:

PROGRAM Divan;

USES Crt, Graph;

LABEL met1, met2;

CONST k =100;

S ='Хорошо!';

TYPE Kniga =array [1..k] of String;

Tablitsa =array [0..20,1..10] of Integer;

Minuta =0,60;

VAR x,y :Real;

Uspevaemost :Tablitsa;

PROCEDURE Torpeda...

FUNCTION Invers...

BEGIN

...

end.

14.2. Структура процедур и функций

Подпрограмма может не только обращаться к другим подпрограммам, но и иметь внутри себя, свои внутренние, вложенные подпрограммы. Все эти подпрограммы описываются внутри данной подпрограммы, являются локальными в ней, и не видны снаружи. Необходимость этого вытекает из желания развязки отдельных частей больших проектов. Так руководитель проекта может разделить проект на 5 больших подпрограмм и поручить каждую отдельному руководителю. Те в свою очередь делят свои куски между подчиненными программистами, каждому поручая подпрограмму помельче, которая тоже в свою очередь нуждается в разбивке. В результате, если не использовать вложения, проект оказывается разбит на несколько сотен маленьких равноправных подпрограмм .Нет никакой гарантии, что среди них не встретятся одноименные, и, если бы вложенных подпрограмм не было, Паскаль обнаружил бы среди них одноименные и выдал ошибку. При использовании же вложения это не страшно, так как подпрограммы с одинаковыми именами, упрятанные внутрь более крупных подпрограмм и друг друга не видят.

Каждая из пяти подпрограмм большого проекта можeт иметь большой объем, и руководитель этой подпрограммы должен обладать всем набором средств Паскаля. Поэтому каждая подпрограмма может иметь и свои внутренние типы, метки, переменные, константы, процедуры и функции. Все эти объекты описываются внутри данной подпрограммы, являются локальными в ней и невидны, снаружи.

По сути структура подпрограммы копирует структуру программы за исключением того, что в подпрограммах запрещено писать USES.

Приведем пример записи программы с вложенными подпрограммами:

PROGRAM Hard;

USES ...

LABEL ...

CONST ...

TYPE ...

VAR ...

PROCEDURE a1;

CONST...

VAR...

PROCEDURE a11;

LABEL...

TYPE...

VAR...

BEGIN

...

END;

FUNCTION f11

VAR...

BEGIN

...

END;

BEGIN

...

END;

FUNCTION f2;

PROCEDURE a21;

BEGIN

...

END;

BEGIN

...

END;

BEGIN

...

END.

Здесь в программу Hard входят процедура а1 и функция f2. B процедуру а1 вложены процедура а11 и функция f11. B функцию f2 вложена процедура а21.

Из f2 видна а1, но не видны а11 и f11. Точно так же из а21 видны а1 и f2, но не видны а11 и f11. Это значит, что в теле процедуры а21 может содержаться вызов а1 и f2, но не может содержаться вызов а11 и f11.