Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Pascal_лекция6.doc
Скачиваний:
14
Добавлен:
30.03.2015
Размер:
79.87 Кб
Скачать

Константы – указатели

При объявлении константы–указателя для определения её значения обычно используется константное адресное выражение.

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

Рассмотрим примеры:

Type

p = ^byte;

const

pp : p = nil;

pb : byte = 0;

pa : p = @pb;

Здесь объявлен тип p, являющийся указателем на адрес в памяти, по которому содержатся данные типа Byte. Кроме того, объявлены три константы-указателя – pp, pa, pb. Первая константа (pp) имеет тип p и ей присвоено значение nil.

Вторая константа (pb) объявлена с типом byte, и, наконец, третья константа (pa) имеет тип p, (как и pp) и ей присвоено значение @pb .

Иными словами, pa – это указатель на адрес в памяти, по которому содержится константа pb. Здесь nil и @pbконстантные адресные выражения. (@ - оператор, позволяющий создавать указатели).

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

Любая программная единица включает следующие разделы:

<Объявление программной единицы>

{Раздел описаний}

BEGIN

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

END. {символ конца программной единицы}

<Объявление программной единицы> - заголовок программы, процедуры или функции. Заголовок программы можно опускать, для процедур и функций наличие заголовка обязательно.

{Символ конца программной единицы}- это точка для программы или «;» для процедуры или функции.

В {разделе описаний} объявляются идентификаторы типов, объектов, констант, переменных, а также метки, процедуры и функции.

Каждый блок определяется своим ключевым словом. Структура программы имеет вид:

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

USES <список библиотечных модулей>;

LABEL <список меток в основном блоке>;

CONST <определение констант>;

TYPE

<определение типов>;

VAR

<определение глобальных переменных>

<определение процедур>

<определение функций>

BEGIN

<основной блок программы>

END.

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

USES CRT, DOS, GRAPH;

производится подключение трех модулей СRТ, DOS и GRAPH.

Модуль СRТ содержит процедуры и функции для управления вывода текста на дисплей, звуковым генератором и чтения с клавиатуры. DOS содержит программы операционной системы. GRAPH содержит комплекс графических программ универсального назначения.

В блоке LABEL перечисляются через запятую метки, используемые в программной единице. Метка может содержать числовое значение от 0 до 9999 либо являться идентификатором, состоящим не более чем 63 символов. Например:

LABEL 1, 400, М1, EPS;

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

Блок CONST описывает константы двух видов:

CONST <имя1>=<константа 1>;

<имя2>=<константа 2>;

…….

или

CONST <имяК>:<тип>=<константаК>;

< имяR>: <тип>=<константаR>;

……..

Например:

CONST

NI = 100;

d : real = 7.65432;

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

Блок ТУРЕ содержит определения вводимых программистом нестандартных типов в следующих формах

TYPE <идентификатор>=(список компонентов);

или

TYPE <идентификатор>=<описание типа> или<имя другого типа>;

Пример: TYPE FAMILY= (FATHER, MATHER);

Если в Паскале используются только стандартные типы, например: INTEGER, REAL, то этот блок опускается.

Блок VAR описывает имена переменных, а также имена массивов:

VAR

A1, A2.....An: <тип1>;

В1, В2.....Вn: <типК>;

<имя массива>: АRRАY [диапазон] OF <тип>;

где буквами А1, B1 указаны имена переменных, а <тип1>.<типК> - типы соответствующих переменных, [диапазон] указывает начальное и конечное значения индексов массива, <тип> задает тип элементов массива.

Пример:

VAR

А, В, С: INTEGER; {объявлены три переменные целого типа}

D, M: REAL: {объявлены две вещественные переменные}

MASS1: ARRAY [1..10] OF REAL; {массив из 10 чисел}

MASS2: ARRAY [-2..2] OF CHAR; {массив из пяти символов}

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

PROGRAM INTREAL:

VAR

А, В, С : INTEGER;

X,Y, Z : REAL;

BEGIN

READ (X, Y);

Z:=Y+X;

A:=TRUNC(Z); {выделение целой части}

B:=ROUND(Z); {* округление *}

C:=В-А;

WRITELN(‘Z=', Z, 'A=', А, 'B=', В, 'C=', С);

END.

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

Пример. Программа, вычисляющая сумму двух чисел.

Program pr1; {заголовок программы}

vаг {раздел объявления переменных}

x, y, summa: real;

begin {тело программы}

Write ('Введите числа Х и Y '); {вывод сообщения на экран}

ReadLn (Х, Y); {чтение двух чисел}

Summa:= Х + Y; {определение суммы}

WriteLn ('Сумма чисел Х и Y равна ', Summa) {вывод результата}

End.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]