Назад Домой! Дальше Глава 4 ВЫРАЖЕНИЯ Часть 1


Выражение - это синтаксическая единица языка, определяющая способ вычисления 
некоторого значения. Выражения в языке Паскаль формируются в соответствии с 
рядом правил (см. [1]) из констант (в том числе и конструкторов множеств - 
см. п. 6.5), переменных (в том числе и компонент массивов - см. п. 6.1, полей 
записей - см. п. 6.4 - и полей объектов - см. п. 14), функций (стандартных и 
написанных самостоятельно), знаков операций и круглых скобок. В этом разделе 
будут рассмотрены все элементы выражений.

4.1. Переменные
Переменными называются параметры программы, значения которых могут изменяться 
в процессе ее выполнения.
Все используемые в программе переменные должны быть определены с указанием их 
типов. Переменные определяются:
 - в разделе объявления переменных программы;
 - в разделе объявления переменных подпрограммы;
 - в разделе объявления переменных модуля; 
 - в заголовке подпрограммы.

Раздел объявления переменных начинается зарезервированным словом var, за 
которым следуют объявления конкретных переменных, состоящие из имени переменной 
(имен переменных, перечисленных через запятую, если они одного типа), двоеточия 
и типа переменной (переменных). Каждое объявление завершается точкой с запятой:
 
var
<список переменных 1>:   <тип  1>; 
<список переменных 2>:   <тип  2>;
 . . .
<список переменных N>:   <тип N>;

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

Пример.
type
Operat = (Plus,Minus, mult, Divide);

var
 X, Y, Z: Real;          {предопределенный тип}
 I, J , К: Integer;      {предопределенный тип}
 Operator: Operat;       {ранее определенный тип}
 Digit; 0..9;            {объявление нового типа}

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

Переменные, объявленные в подпрограмме, называются локальными, т. к. доступны 
только этой подпрограмме, и размещаются в стековом сегменте. По умолчанию 
стековый сегмент имеет размер в 16384 байта, однако с помощью ключа компилятора 
{$М} его можно изменять от 1024 до 65520 байтов.

Глобальные переменные постоянно находятся в памяти, локальные размещаются 
в стеке лишь на время выполнения подпрограммы, затем область стека освобождается.
В Turbo Pascal можно использовать абсолютные переменные, располагаемые в 
определенной области памяти.
Абсолютные переменные снабжаются директивой absolute и указанием на место 
размещения этой переменной. При этом возможны два варианта:
 - указание абсолютного адреса в оперативной памяти заданием через двоеточие 
адреса сегмента и смещения; 
 - "привязка" переменной к адресу начала другой переменной.

Пример.
var
Str: string[32];	                {тип-строка,   см,   п.   6.2}
StrLen: Byte  absolute Str;	        {привязка к  началу строки}
CrtMode:   Byte absolute  $0040:$0049;	{указание   абсолютного
                                         адреса}

4.2. Константы

Константами называются параметры программы, значения которых не меняются в 
процессе ее выполнения.
В языке Паскаль возможно двоякое использование констант: 
 - непосредственное использование значения константы; 
 - использование идентификатора константы.

Задание констант идентификаторами осуществляется в разделе объявления констант, 
начинающемся зарезервированным словом const. 
В Turbo Pascal имеется две разновидности констант, заданных идентификаторами:
 - обычные константы, тип которых определяется их значением; 
 - типизированные константы, для которых в явном виде указывается их тип.

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

const
<имя константы 1> = <значение 1>;
<имя константы 2> = <значение 2>;
<имя константы N> = <значение N>;

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

4.2.1.	Целые константы
В изображении целых констант присутствуют лишь знак и цифры (знак + можно 
не указывать). Предполагается десятичная система счисления, однако можно 
использовать и шестнадцатеричную. В этом случае перед константой следует 
поставить знак $. Диапазон целых десятичных чисел - от -2147483648 до 
2147483647, а шестнадцатеричных - от $00000000 до $FFFFFFFF.  В Turbo Pascal 
заданы два предопределенных целых числа:
Maxlnt = 32767
MaxLonglnt  = 2147483647

4.2.2.	Вещественные константы
Вещественные константы в своем изображении содержат десятичную точку или/и 
показатель степени (символ Е или е), например:
var
X = -0.5;
Y = 1.0; 
Z = -1Е-5; 
W =  7.5e+15;

4.2.3. Строковые и символьные константы
Строка символов - это последовательность любого, в том числе и равного нулю, 
количества символов из набора ASCII, расположенных на одной строке и заключенных в 
апострофы. Ограничением здесь может быть максимальный размер строки, воспринимаемый 
компилятором, - не более 126 символов.
Строка, состоящая из одного символа, называется символьной константой.
Если между апострофами нет ни одного символа, то такая строка называется нулевой 
строкой (пустой строкой).
При необходимости поместить в строку символ "апостроф", его следует записать дважды, 
например:

'Язык   ''Turbo Pascal'''

Для включения в строку символов, не имеющих физического изображения, используется 
их ASCII-код с символом # перед ним. Для изображения управляющих символов (коды от 
0 до 31) можно использовать символ ^ и соответствующую букву, код которой равен 
коду управляющего символа плюс 64.
 
Пример.  Строковые константы
const
Symbols = 'TURBO';
Apostroph = '''' ;
TwoLines = 'Linel'#13#10'Line2';
Return = ^M^J;	{Коды управляющих символов 13 и 10}

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

Пример.  Константные выражения.

$А00	{выражение,   состоящее из  константы}
'А'	{выражение,   состоящее из  символьной константы}
Pi/4	{выражение  с  использованием функции Pi и  знака операции }
' TURBO'  +  ' - '  +  ' PASCAL '       { конкатенация   (объединение)   строк }

Использование константного выражения приведено также в п. 16.3.21.
В константных выражениях можно использовать следующие функции: Abs, Chr, Hi, High, 
Length, Lo, Low, Odd, Ord, Pi, Pred, Ptr, Round, SizeOf, Succ, Swap, Trunc.

4.2.5.	Типизированные константы
Типизированные константы фактически представляют собой инициализированные переменные 
и могут использоваться наравне с обычными переменными, в том числе и в левой части 
операции присваивания.
Для каждой такой константы задается ее имя, тип и начальное значение. Тип от имени 
отделяется двоеточием, начальное значение от типа - знаком равенства:

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

Пример.

const
Maximum:   Integer  =  9999;  Rea:   Real = -0.5;  Bell:   Char = #7;

Правила задания значений типизированным константам структурированных типов 
рассмотрены при описании соответствующих типов (пп. 6.1, 6.4, 6.5).
Следует иметь в виду, что типизированные константы (в том числе и константы 
процедур и функций) инициализируются только раз - в начале работы программы.
Независимо от места объявления типизированных констант в программе все они 
размещаются в сегменте данных программы.

4.3. Стандартные функции
В языке Паскаль существует ряд заранее разработанных подпрограмм-функций, которые 
можно использовать как готовые объекты. В Turbo Pascal их количество увеличено по 
сравнению со стандартом языка, и все они объединены в стандартные модули 
(см. п. 16). 
В данном разделе рассмотрены наиболее часто используемые стандартные функции. 
Стандартные функции ввода-вывода н ди¬намического распределения памяти описаны в 
пп. 11 и 7 соответственно. Другие стандартные функции (работы со строками, 
указателями и адресами и т. д.), а также более подробное рассмотрение всех упомянутых 
выше функций, приведены в п. 16.

4.3.1.        Арифметические функции
Арифметические функции можно использовать только с величинами целого и вещественного 
типа. Их перечень приведен в табл. 4. 

Таблица 4. Арифметические функции
Функция		Назначение		Тип результата

Abs(X)   Абсолютное значение аргумента	Совпадает с типом X
Arctan(X)  Арктангенс аргумента		Вещественный
Cos(X)  Косинус аргумента		Вещественный
Exp(X)  ех			Вещественный
Frac(X) Дробная часть числа		Вещественный
Int(X) 	Целая часть числа		Вещественный
Ln(X)  	Натуральный логарифм		Вещественный
Pi	Значение величины Pi		Вещественный
Sin(X)	Синус аргумента			Вещественный
Sqr(X)	Квадрат аргумента		Совпадает с типом X
Sqrt(X)	Квадратный корень аргумента	Вещественный

Примечание. Если функция используется с ключом компилятора f$N+}, то вместо 
величины типа Real она вычисляет величину типа Extended.

Пример.
{$N-} begin
Р   := Pi	{3.1415926536E+00}
end.
{$N+} begin
Р   :=  Pi	(3.1415926535897932385E+0000
end.

4.3.2. Функции преобразования типа
Эти функции предназначены для преобразования типов величин, например символа 
в целое число, вещественного числа в целое и т. д. К ним относятся следующие 
функции:

 - Chr(X) - преобразование ASCII-кода в символ.
Аргумент функции должен быть целого типа в диапазоне (0..255). Результатом 
является символ, соответствующий данному коду. 

 - High(X) - получение максимального значения величины.
Аргумент функции - параметр или идентификатор порядкового типа, типа-массива 
(см. п. 6.1), типа-строки (см. п. 6.2) или открытый массив (см. п. 10-3.5).
Результат функции для величины порядкового типа - максимальное значение этой 
величины, для типа-массива - максимальное значение индекса, для типа-строки 
-объявленный размер строки, открытого массива - количество компонент массива 
минус 1 (максимальный индекс, при начале нумерации с нуля).

Low(X) - получение минимального значения величины.
Аргумент функции - параметр или идентификатор порядкового типа, типа-массива 
(см. п, 6.1), типа-строки (см. п. 6.2) или открытый массив {см. п. 10.3.5). 
Результат функции для величины порядкового типа - минимальное значение этой величины, 
для типа-массива - минимальное значение индекса, для типа-строки или открытого 
массива - 0.

Ord(X) - преобразование любого порядкового типа в целый тип. Аргументом функции 
может быть величина любого порядкового типа  (логи¬ческий,  символьный,  
перечисляемый). Результатом является величина типа Longint.

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

 - Trunc(X) - получение целой части вещественного числа.
Аргумент функции - величина вещественного типа, а результат - целая часть этого 
числа. Тип результата - Longint. Если результат выходит за диапазон значений Longint, 
то во время выполнения программы возникает ошибка.

4.3.3. Функции для величин порядкового типа
Эти функции позволяют выполнить ряд действий над величинами порядкового типа 
(найти предыдущий или последующий элемент, проверить число на нечет¬ность). 
К этим функциям относятся следующие: 

 - Odd(X) - проверка величины X на нечетность.
Аргументом функции является величина типа Longint, результат равен True, если 
аргумент нечетный, и False - если четный. 

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

 - Succ (X) - определение последующего значения величины X. Аргументом функция 
является величина любого порядкового типа, результатом -  последующее значение 
того же типа   (например,  Succ(2)   равно 3). При применении функции к последнему 
элементу последовательности возникает ошибка.
Rambler's Top100
Hosted by uCoz