Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лек 1 семестр.doc
Скачиваний:
26
Добавлен:
10.06.2015
Размер:
1.26 Mб
Скачать

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

Программист вводит текст программы, произвольно располагая строки на экране. Отступ слева выбирает сам программист, чтобы программа была более читабельной. В одной строке допускается писать несколько операторов. Длинные операторы можно переносить на следующую строку. Перенос допускается в любом месте, где можно сделать пробел. Максимальная длина строки не должна превышать 127 символов. Из соображений наглядности, удобства просмотра и отладки программы рекомендуется длину строки ограничивать 80 символами. Программы имеют жесткую структуру, описанную в таблице 12.

Таблица 12. Структура программы

Фрагмент программы

Содержание

Примечание

Заголовок

Program <имя программы>

Необязательный

Раздел 0

USES, описание модулей, библиотек

Разделы описаний программного блока

Раздел I

LABEL, описание меток

Раздел 2

CONST, описание констант

Раздел 3

TYPE, описание типов данных

Раздел 4

VAR, описание переменных

Раздел 5

PROCEDURE, FUNCTION - описание процедур и функций, используемых в программе

Раздел 6

BEGIN ... END. - тело программы

Раздел исполняемых операторов

Синтаксические правила построения предложений языка можно описывать следующими способами:

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

  • синтаксической диаграммой. Этот способ детально формализует синтаксис предложения и используется разработчиками трансляторов с языка Паскаль;

• порождающими правилами РАСШИРЕННЫХ БЭКУСА-НАУРА ФОРМ (РБНФ). Это весьма компактный и в то же самое время наглядный способ записи языковых конструкций. Этот способ используется в статьях и научных разработках. В данном курсе используются только пять элементов РБНФ (таблица 13).

Таблица 13

Соглашение

Толкование

Угловые скобки < >

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

Квадратные скобки [ ]

Квадратные скобки в синтаксических конструкциях заключают в себе один или несколько необязательных элементов

Вертикальная черта |

Разделяет два альтернативных элемента синтаксической конструкции, один из которых нужно выбрать

Фигурные скобки { }

Фигурные скобки заключают в себе несколько элементов, разделенных '|'. Из них нужно выбрать один

Многоточие

Многоточие показывает, что можно повторить некоторый элемент один и более раз

Раздел описания модулей USES

Раздел имеет структуру:

USES

Модуль 1, Модуль 2, ... Модуль N,

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

Пример:

USES CRT, GRAPH, HELP, MYLIB;

В этом примере две стандартные библиотеки — CRT, GRAPH и две пользовательские библиотеки — HELP, MYLIB.

Раздел описания меток LABEL

Раздел имеет структуру:

LABEL Метка 1, Метка 2,Метка N,

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

Пример:

LABEL Ml, 12_BL, 9999;

Метки позволяют менять естественный ход выполнения программы. Ссылка на метку осуществляется оператором GOTO <метка>. Если в программе меток нет, то раздел LABEL отсутствует. В теле программы (в разделе операторов) метка ставится перед требуемым оператором и отделяется от него двоеточием.

Пример:

М27: X := А * В - С/2;

Областью действия метки является блок, где она описана. Ниже приведена схема использования меток в тексте программы. LABEL метка 1, метка 2;

BEGIN

метка 1: <Оператор 1>;

метка 2: <Оператор 2>;

END.

Раздел описания констант CONST

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

В стандарте на Паскаль константы определяются следующим способом:

CONST

<Идентификатор 1> = <3начение 1>;

<Идентификатор 2> = <3начение 2>;

<Идентификатор N> = < Значение N>; Примеры констант:

CONST

А = 15.7;

BXZ = 'Серия N123/5';

MIN_IND = $15D;

С_10 = -0.57Е-6;

L125 = 695;

FLAG = TRUE;

Константа может иметь только предопределенный (стандартный) тип данных. Тип присваивается константе по внешнему виду значения и в соответствии с этим типом отводится память для хранения значения константы.

В качестве расширения стандартного Паскаля разрешено использовать выражения, составленные из ранее определенных констант и некоторых стандартных функций (Abs, Chr, Hi, Length, Lo, Odd, Ord, Pred, Prt, Round, SizeOf, Succ, Swap, Trunc). Примеры использования константных выражений:

CONST

Min = 0;

Max = 250;

Centr = (Max-Min) div 2;

Beta = Chr(225);

NumChars = Ord('2') - Ord('A')+l;

Message = 'не хватает памяти';

ErrStr = 'Ошибка:' + Message + '.';

Ln10 - 2.302585092994045884;

Ln10R = 1/Ln10;

Константные выражения вычисляются компилятором без выполнения программы на этапе ее создания.

Раздел описания типов TYPE

Стандартные типы данных (REAL, INTEGER, BOOLEAN, CHAR) не требуют описаний в этом разделе. Описания требуют только типы, образованные пользователем.

Концепция типов — одно из основных понятий в языке. С каждым данным связывается один и только один определенный тип.

Тип — это множество значений + множество операций, которые можно выполнять над этими значениями, то есть правила манипулирования данными. Использование типов позволяет выявлять многочисленные ошибки, связанные с некорректным использованием значений или операций еще на этапе трансляции без выполнения программ.

О Паскале говорят, что он строго типизирован, то есть программист должен описать все объекты, указывая их типы, и использовать в соответствии с объявленными типами. Программы становятся более надежными и качественными. При компиляции информация используется для уточнения вида операции. Так знаком + для данных типа REAL и INTEGER обозначается операция сложения, а для множеств (тип SET) — объединение. Структура раздела описания типов имеет вид:

TYPE

<имя типа 1> = <значение типа 1>;

<имя типа 2> = <значение типа 2>;

<имя типа L> = <значение типа L>;

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

TYPE

DAY = 1..31; Year = 1900.. 2000; {Интервальный тип}

LatBukv = ('А', 'С, 'D', 'G, 'Н'); {Перечисляемый тип}

Matr = array[-1..12, 'А'.. 'F'] of real; {Регулярный тип}

Раздел описания переменных VAR

Это обязательный раздел. Любая встречающаяся в программе переменная должна быть описана. В языке нет переменных, объявляемых по умолчанию. Основная цель этого раздела определить количество переменных в программе, какие у них имена (идентификаторы) и данные каких типов хранятся в этих переменных. Таким образом, переменная это черный ящик, а тип показывает, что мы в него можем положить.

Структура раздела имеет вид:

VAR

<список 1 идентификаторов переменных>:<тип 1>;

<список 2 идентификаторов переменных>:<тип 2>;

<список N идентификаторов переменных>:<тип N>;

Тип переменных представляет собой имя (идентификатор), описанный в разделе TYPE при явном описании типа, или собственно описание типа в случае его неявного задания. Примеры описания переменных:

TYPE

DAY= 1..31; Matr = ARRAY[1..5,1..8] OF INTEGER;

VAR

A, B: DAY; X, Y: Matr; {явное описание типов }

YEAR: 1900.. 2000; LES: (LPT, PRN); {неявное описание типов }

А, В, CD, FER51: REAL; {описание переменных стан-}

EQUAL: BOOLEAN; SH: CHAR; {дартных типов производится }

I, J, К: INTEGER; {только в разделе VAR}

Раздел описания процедур и функций

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

PROCEDURE <имя процедуры> (<параметры>); {заголовок процедуры}

<разделы описаний> {тело процедуры }

BEGIN

<раздел операторов >

END;

FUNCTION <имя функции>(<параметры>): <тип результата>; { заголовок }

<разделы описаний > {тело функции}

BEGIN

<раздел операторов >

END;

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

Раздел операторов

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

Синтаксис раздела операторов основной программы:

BEGIN

<Оператор 1;> { Операторы выполняются}

<Оператор 2;> { строго последовательно}

… {друг за другом.}

<Оператор N>

END.

Комментарий

Это пояснительный текст, который можно записать в любом месте программы, где разрешен пробел. Текст комментария ограничен: слева - '{', справа - '}', и может содержать любые символы. Комментарий игнорируется транслятором, и на программу влияния не оказывает.

Пример использования комментария:

PROGRAM PR;

<Разделы описаний >

BEGIN

<Оператор 1; >

<Оператор 2; >

{< Оператор 3; >

<Оператор N > }

END.

Средства комментария часто используются для отладки. Так в приведенном выше примере, операторы — 3,... N, заключенные в фигурные скобки, временно не выполняются.

Правила пунктуации

Основным средством пунктуации является символ точка с запятой – ';'.

1. Точка с запятой не ставится после слов LABEL, TYPE, CONST, VAR, а ставится после каждого описания этих разделов.

2. Точка с запятой не ставится после BEGIN и перед END, так как эти слова – операторные скобки.

3. Точка с запятой разделяет операторы, и ее отсутствие вызовет:

А := 333 {ошибка — нет ';'}

В := А/10;;;;; {четыре пустых оператора}

4. Возможна ситуация:

END; следует писать END

END; > END

END; END;

5. Допускается запись метки на пустом операторе — <Метка>: ;

6. Точка с запятой не ставится после операторов WHILE, REPEAT, DO и перед UNTIL.

7. В условных операторах ';' не ставится после THEN и перед ELSE.