Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка_ОАиПрг_2курс_лекции.doc
Скачиваний:
6
Добавлен:
01.04.2025
Размер:
4 Мб
Скачать
☆

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

Для того чтобы Pasсal-компилятор правильно понял, какие именно действия от него ожидаются, ваша программа должна быть оформлена в полном соответствии с синтаксисом (правилами построения программ) этого языка. Приступим же к изучению этих правил.

Любая Pascal-программа может состоять из следующих блоков (квадратными скобками здесь и далее помечены необязательные части):

program <имя_программы>;

[ uses <имена_подключаемых_модулей>;]

[ label <список_меток>;]

[ const <имя_константы> = <значение_константы>;]

[ type <имя_типа> = <определение_типа>;]

[ var <имя_переменной> : <тип_переменной>;]

[ procedure <имя_процедуры> <описание_процедуры>]

[ function <имя_функции> <описание_функции>;]

begin {начало основного тела программы}

<операторы>

end. (* конец основного тела программы *)

Поздние версии компиляторов языка Pascal уже не требуют указывать название программы, то есть строку program <имя_программы>; вообще говоря, можно опустить. Но это возможно только в том случае, если вся программа содержится в одном модуле-файле. Если же программа состоит из нескольких самостоятельных кусков - модулей, то каждый из них должен иметь заголовок.

Любой из перечисленных необязательных разделов может встречаться в тексте программы более одного раза, их общая последовательность также может меняться, но при этом всегда должно выполняться главное правило языка Pascal: прежде чем объект будет использован, он должен быть объявлен и описан.

Внешний вид исходного текста программы

Компиляторы языка Pascal не различают строчные и прописные буквы, а пробельные символы игнорируют, поэтому текст программы можно структурировать так, чтобы читать и отлаживать его было наиболее удобно. Например, операторы каждого логически единого блока программы стоит записывать с небольшим отступом от левого края экрана, и чем глубже вложенность блока, тем шире должны быть отступы перед входящими в него операторами. Для облегчения отладки программы не следует записывать на одну строку несколько операторов.

Комментарии

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

Комментарий - это строка (или несколько строк) из произвольных символов, заключенная

в фигурные скобки: { комментарий }. Другой вариант оформления комментария: (* комментарий *)

Внутри самого комментария символы } или *) встречаться не должны. Во время компилирования программы комментарии игнорируются. Следовательно, их можно добавлять в любом месте программы. Можно даже разорвать оператор вставкой комментария. Кроме того, все, что находится после ключевого слова end., завершающего текст программы, компилятор тоже воспринимает как комментарий.

Директивы компилятора

Строка, начинающаяся символами {$, является не комментарием, а директивой компилятора - специальной командой, от которой зависит процесс компиляции и выполнения программы. Директивы мы будем рассматривать в тех разделах, к которым они относятся "по смыслу". Например, строка {$I-,Q+} отключает контроль правильности ввода-вывода, но включает контроль переполнения при вычислениях.

Идентификаторы

Имена, даваемые программным объектам (константам, типам, переменным, функциям и процедурам, да и всей программе целиком) называются идентификаторами. Они могут состоять только из цифр, латинских букв и знака "_" (подчеркивание). Однако цифра не может начинать имя. Идентификаторы могут иметь любую длину, но если у двух имен первые 63 символа совпадают, то такие имена считаются идентичными.

Вы можете давать программным объектам любые имена, но необходимо, чтобы они отличались от зарезервированных слов, используемых языком Pascal, потому что компилятор все равно не примет переменные с "чужими" именами.

Приведем список наиболее часто встречающихся зарезервированных слов:

and goto set

array implementation shl

begin in shr

case interface string

const label then

div mod text

do nil to

downto not type

else of unit

end or until

file pointer uses

far procedure var

for program while

forward record with

function repeat xor

Переменные и типы данных

Переменная - это программный объект, значение которого может изменяться в процессе работы программы.

Тип данных - это характеристика диапазона значений, которые могут принимать переменные, относящиеся к этому типу данных.

Все используемые в программе переменные должны быть описаны в специальном разделе var по следующему шаблону:

var <имя_переменной_1> [, <имя_переменной_2, _>] : <имя_типа_1>;

<имя_переменной_3> [, <имя_переменной_4, _>] : <имя_типа_2>;

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

Константы

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

В языке Pascal существует три вида констант:

• неименованные константы (цифры и числа, символы и строки, множества);

• именованные нетипизированные константы;

• именованные типизированные константы.

Неименованные константы

Неименованные константы не имеют имен, и потому их не нужно описывать.

Тип неименованной константы определяется автоматически, по умолчанию:

• любая последовательность цифр (возможно, со знаком "-" или "+" или разбиваемая одной точкой) воспринимается компилятором как неименованная константа - число (целое или вещественное);

• любая последовательность символов в апострофах, воспринимается как константа - строка;

• любая последовательность целых чисел либо символов через запятую, обрамленная квадратными скобками, воспринимается как неименованная константа - множество.

Кроме того, существуют две специальные константы true и false, относящиеся к логическому типу.

Примерами использования неименованных констант могут послужить следующие операторы:

int1 := -10;

real2 := 12.075 + х;

char3 := 'z';

string4 := 'abc' + string44;

set5 := [1,3,5] * set55;

boolean6 := true;

Нетипизированные константы

Именованные константы, как следует из их названия, должны иметь имя. Стало быть, эти имена необходимо сообщить компилятору, то есть описать в специальном разделе const. Если не указывать тип константы, то по ее внешнему виду компилятор сам определит, к какому (базовому) типу ее отнести. Любую уже описанную константу можно использовать при объявлении других констант, переменных и типов данных. Вот несколько примеров описания нетипизированных именованных констант:

const n = -10;

m = 1000000000;

mmm = n*100;

x = 2.5;

c = 'z';

s = 'string';

b = true;

Типизированные константы

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

Описание типизированных констант производится по следующему шаблону:

const <имя_константы> : <тип_константы> = <начальное_значение>;

Из приведенных ниже примеров видно, как это сделать:

const n: integer = -10;

x: real = 2.5;

c: char = 'z';

b: boolean = true;