Глава 3. Элементы языка.
3.2 Идентификаторы
3.3 Константы
3.4 Выражения
3.5 Операции
3.6 Структура программы
Тест для закрепления материала
3.1. АЛФАВИТ
Алфавит языка Турбо Паскаль включает буквы, цифры, шестнадцатеричные цифры, специальные символы и зарезервированные слова.
Буквы - это буквы латинского алфавита от а до z и от А до Z. В Турбо Паскале нет различия между прописными и строчными буквами алфавита, если только они не входят в символьные и строковые выражения.
Цифры - арабские цифры от 0 до 9.
Каждая шестнадцатеричная цифра имеет значение от 0 до 15. Первые 10 значений обозначаются арабскими цифрами 0...9, остальные шесть - латинскими буквами A...F или a...f.
Специальные знаки Турбо Паскаля - это символы: +
- * / = , ' . : ; < > [ ] ( ) { } ^ @ $ #
К специальным знакам относятся также следующие пары символов: ; <
> <= >= := (* *) (..)
В программе эти пары символов нельзя разделять пробелами, если они используются как знаки операций отношения или ограничители комментария. Символы (. и .) могут употребляться соответственно вместо [и]
Особое место в алфавите языка занимают пробелы, к которым относятся любые символы ASCII в диапазоне кодов от 0 до 32. Эти символы рассматриваются как ограничители идентификаторов, констант, чисел, зарезервированных слов. Несколько следующих друг за другом пробелов считаются одним пробелом (последнее не относится к строковым константам).
В Турбо Паскале имеются следующие зарезервированные слова:
and
end
nil
shr
asm
file
not string
array for
object then
begin function
of
to
case
goto
or
type
const if
packed unit
constructor implementation procedure until
destructor in
program uses
div
inline
record var
do
interface
repeat while
downto label
set
with
else
mod
shl
xor
Зарезервированные слова не могут использоваться в качестве идентификаторов.
Стандартные директивы первоначально связаны с некоторыми стандартными объявлениями в программе. К ним относятся:
absolute far
near
assembler forward private
external interrupt virtual
Вы можете переопределить любую стандартную директиву, т.е. объявить одноименный идентификатор. Стандартные директивы
PRIVATE и VIRTUAL действуют только в пределах объявления
объектов
3.2. ИДЕНТИФИКАТОРЫ
Идентификаторы в Турбо Паскале -
это имена констант, переменных, меток,
типов, объектов, процедур, функций,
модулей, программ, полей в записях.
Идентификаторы могут иметь произвольную
длину, не значащими (уникальными в
области определения) являются только
первые 63 символа.
Идентификатор всегда
начинается буквой или знаком
подчеркивания, за которым могут
следовать буквы, цифры и знак
подчеркивания (код; 95 в ASCII). Пробелы и
специальные символы алфавита не могут
входить в идентификатор.
Примеры правильных
идентификаторов:
ALPHA
МуРгоgramIsBestProgram
date_27_sep_39
external
_beta
Примеры неправильных идентификаторов:
1Program {начинается цифрой}
block#l {содержит
специальный символ}
My Program {содержит пробел}
Mod
{зарезервированное слово}
3.3. КОНСТАНТЫ
В качестве констант в Турбо
Паскале могут использоваться целые,
вещественные и шестнадцатеричные числа,
логические константы, символы, строки
символов, конструкторы множеств и
признак неопределенного указателя NIL.
Целые числа записываются со
знаком или без него по обычным правилам и
могут иметь значение от -2147483648 до +2147483647.
Следует учесть, что, если целочисленная
константа выходит за указанные границы,
компилятор дает сообщение об ошибке.
Такие константы должны записываться с
десятичной точкой, т.е. определяться как
вещественные числа.
Вещественные числа записываются
со знаком или без него с использованием
десятичной точки и/или экспоненциальной
части. Экспоненциальная часть начинается
символом е или Е, за которым могут
следовать знаки «+» или «-» и десятичный
порядок. Символ е (Е) означает десятичный
порядок и имеет смысл «умножить на 10 в
степени». Например,
3.14Е5 - 3.14 умножить на 10 в степени 5;
-17е-2 - минус 17 умножить на 10 в степени
минус 2.
Если в записи вещественного
числа присутствует десятичная то перед
точкой и за ней должно быть хотя бы по
одной цифре. Если используется символ
экспоненциальной части е (£), за ним
должна следов хотя бы одна цифра
десятичного порядка.
Шестнадцатеричное число состоит
из шестнадцатеричных цифр которым
предшествует знак доллара $ (код 36 в ASCII).
Диапазон шестнадцатеричных чисел - от
$00000000 до $FFFFFFFF.
Логическая константа - это либо слово
FALSE (ложь), либо TRUE (истина).
Символьная константа - это любой символ
ПК, заключенный апострофы:
'z' - символ z; 'Ф' - символ Ф.
Если необходимо записать собственно
символ апострофа, он удваивается:
'''' - символ ' (апостроф).
Допускается использование записи
символа путем указания внутреннего кода,
которому предшествует символ # (код 35),
например
#97 - символ а:
#90 - символ Т.;
#39 - символ ';
#13 - символ CR.
Строковая константа - любая
последовательность символов (кроме
символа CR - возврат каретки), заключенная
в апострофы. Если в строке нужно указать
сам символ апострофа, он удваивается,
например
'Это - строка символов'; 'That''s string’.
Строка символов может быть пустой, т.е. не
иметь никаких символов обрамляющих ее
апострофах. Строку можно составлять из
кодов нужных символов с предшествующими
каждому коду символами #, например, строка
#83#121#109#98#11#108 эквивалентна строке 'Symbol'.
Наконец, в строке можно чередовать
части, записанные в обрамляющих
апострофах, с частями, записанными кодами.
Таким способом можно вставлять в строки
любые управляющие символы, в том числе
символ CR, например:
#7 ’ Ошибка !’ 13’Нажмите любую клавишу ... '#7
Конструктор множества - список
элементов множества, обрамленный
квадратными скобками, например:
[1,2,4..7,12]
[blue, red]
[]
[true]
В отличие от стандартного Паскаля, в
Турбо Паскале разрешается объявлении
констант использовать произвольные
выражения, операндами которых могут быть
ранее объявленные не типизированные
константы, имена типов и объектов, а также
следующие функции от них:
abs | lo | ptr | swap |
chr | odd | round | trunc |
hi | ord | sizeof | |
length | pred | succ |
например:
MaxReal = MaxLnt div SizeOf (real);
Ln10 = 2.302585092994;
Ln10R = 1/Ln10;
3.4. ВЫРАЖЕНИЯ
Основными элементами, из
которых конструируется исполняемая
часть программы, являются константы,
переменные и обращения к функциям. Каждый
из этих элементов характеризуется своим
значением и принадлежит к какому-либо
типу данных. С помощью знаков операций и
скобок из них можно составлять выражения,
которые фактически представляют собой
правила получения новых значений.
Частным случаем выражения может быть
просто одиночный элемент, т.е. константа,
переменная или обращение к функции.
Значение такого выражения имеет,
естественно, тот же тип, что и сам элемент.
В более общем случае выражение состоит из
нескольких элементов (операндов) и знаков
операций, а тип его значения определяется
типом операндов и видом примененных к ним
операций.
Примеры выражений:
У
21
( а + Ь) * с
sin(t)
а > 2
not Flag
and (a =b)
NIL
[1, 3. .7] * set1
3.5. ОПЕРАЦИИ
В Турбо Паскале определены следующие
операции:
« унарные not, @;
• мультипликативные *, /, div, mod, and, shl, shr,
• аддитивные +, -, or, xor,
отношение =, <>, <, >, <=, >=, in
Приоритет операций убывает в
указанном порядке, т.е. наивысшим
приоритетом обладают унарные операции,
низшим - операции отношения. Порядок
выполнения нескольких операций равного
приоритета устанавливается компилятором
из условия оптимизации кода программы не
обязательно слева направо. При
исчислении логических выражен операции
равного приоритета всегда вычисляются
слева направо, при будут вычисляться все
или только достаточные операции в
зависимости ( установленной в среде Турбо
Паскаля опция OPTIONS/COMPILER/COMPLETE BOOLEAN.EDIT.-при
установлен ном значении этой опции
вычисляются все операции отношения, не
установленном - только те, которые
достаточны для получения результата (см.
прил. 1).
Это обстоятельство необходимо
учитывать при использовании операций
отношения с функциями, в которых
изменяются глобальные переменные или
параметры, передаваемые по имени,
например:
var
а,Ь
: Integer:
FUNCTION Add I(var x; integer) :
Integer;
Begin
inc(x);
Addl :=x
End {Add}
BEGIN {main}
if (a > b) or (Addl(a) > 100) then b :=
a;
При выполнении этого фрагмента
значение переменной А будет зависеть от
настройки опции: если опция
активизирована, значение . всегда
наращивается на 1, если не активизирована
- только в случае А • В.
Правила использования операций с
операндами различного тип приводятся в
табл. 2.
Опе-
|
Действие | Тип операндов | Тип результата |
not | Отрицание | Логический | Логический |
not | То же | Любой целый | Тип операнда |
@ | Адрес | Любой | Указатель |
* | Умножение | Любой целый | Наименьший целый |
* | То же | Любой вещественный | Extended |
* | Пересечение множеств | Множественный | Множественный |
/ | Деление | Любой вещественный | Extended |
div | Цело численное деление | Любой целый | Наименьший целый |
mod | Остаток | То же | То же |
and | Логическое И | Логический | Логический |
and | То же | Любой целый | Наименьший целый |
shl | Левый сдвиг | То же | То же |
shr | Правый сдвиг | '' | '' |
+ | Сложение | Любой целый | Наименьший целый |
+ | То же | Любой вещественный | Extended |
+ | Объединение множеств | Множественный | Множественный |
+ | Объединение строк | Строковый | Строковый |
- | Вычитание | Любой целый | Наименьший целый |
or | Логическое ИЛИ | Логический | Логический |
or | То же | Любой целый | Наименьший целый |
= | Равно | Любой простой или строковый | Логический |
<> | Не равно | То же | То же |
< | Меньше | Логический | Логический |
<= | Меньше или равно | То же | То же |
> | Больше | '' | '' |
>= | Больше или равно | '' | '' |
операнд1 | операнд2 | not | and | or | xor | |
1 | ---- | 0 | --- | --- | --- | |
0 | ---- | 1 | --- | --- | --- | |
0 | 0 | --- | 0 | 0 | 0 | |
0 | 1 | --- | 0 | 1 | 1 | |
1 | 0 | --- | 0 | 1 | 1 | |
1 | 1 | --- | 1 | 1 | 0 |
{Программа
вводит два целых числа и печатает результат
применения к ним логических операций. Для
выхода из программы ввести Ctrl-2
и нажать ввод}
var
m,n : integer;
Begin
While not EOF do
Begin
Write(‘n,m=’);
Readln(n,m);
Writeln(‘not=’ not n,’ ’ ,not );
Writeln (‘ and= ‘,n and
m);
Writeln (‘ or = ‘ ,n or m);
Writeln (' xor= ' , n xor m);
Writeln (' shl=' , n shjm);
Writeln(' shr= ' , n shr m);
end;
end.
В
программе организуются ввод двух
произвольных целых чисел печать результата
применения к ним всех логических операций.
Для выхода из программы следует нажать CTRL-Z
и «Ввод».
Логические операции над
логическими данными дают результат
логического типа по правилам, указанным в
табл. 4.
Операция отношения IN применяется к
двум операндам. Первый (левым) операндом
должно быть выражение любого порядкового
типа вторым - множество, состоящее из
элементов того же типа, или идентификатор
множественного типа. Операция дает TRUE, если
левый операнд принадлежит множеству,
например:
var
с : char;
type
digit = jet of 'О’.. '9’;
if с in digit then ........
Таблица 4
Логические операции над данными типа BOOLEAN
операнд1 | операнд2 | not | and | or | xor |
false | --- | true | --- | --- | --- |
true | --- | false | --- | --- | --- |
false | false | --- | false | false | false |
false | true | --- | false | true | true |
true | false | --- | false | true | true |
true | true | --- | true | true | false |
3.6. СТРУКТУРА ПРОГРАММЫ