3. Арифметические типы данных. Числовые константы и переменные. Оператор присваивания. Выражения

В языке Паскаль определены следующие арифметические типы данных: це­лочисленные типы - Byte, ShortInt, Word, Integer и LongInt; вещественные ти­пы - Single, Real, Double и Extended; и не совсем вещественный тип Comp. Ха­рактеристики этих типов приведены в таблице 1 (запись 1.5e-45 означает 1.5, ум­ноженное на 10 в степени -45, это общепринятое в языках программирования обозначение для вещественных чисел - константа с плавающей точкой).

Таблица 1

Арифметические типы данных

Название типа

Диапазон допустимых значений

Количество

Размер

 

 

верных цифр

в байтах

Byte

0...255

-

1

ShortInt

-128...127

-

1

Word

0..65535

-

2

Integer

-32768...32767

-

2

LongInt

-2147483648...2147483647

-

4

Single

±1.5e-45... ±3.4e+38

7-8

4

Real

±2.9e-39... ±1.7e+38

11-12

6

Double

±5.0e-324... ±1.7e+308

15-16

8

Extended

±3.4e-4932... ±1.1e+4932

19-20

10

Comp

-9.2e18...9.2e18

8

8

Типы Byte и Word используются для целых величин без знака, типы ShortInt, Integer и LongInt - для целых со знаком, типы Single, Real, Double и Extended - для вещественных величин. Тип Comp может содержать только це­лые числа от -2 63 +1 до +263-1, но эти числа хранятся в вещественном формате, поэтому тип Comp считается вещественным. С данными типа Comp можно об­ращаться так же, как с данными других вещественных типов, но дробная часть числа при этом автоматически отбрасывается.

Целые числовые константы записываются в языке Паскаль в десятичном ви­де или в 16-ричном виде, 16-ричная константа начинается с символа $ и содер­жит 16-ричные цифры : 0-9, A-F. Например, число 255 можно записать как $FF. Числовые константы по умолчанию имеют тип Integer или LongInt. Веществен­ные константы записываются либо с фиксированной точкой, например, -1.234, либо с плавающей точкой, например, -1.234E-5 или 555е12.

В программе, как правило, приходится использовать переменные арифмети­ческих типов. Каждая такая переменная (и переменная любого другого типа) в языке Паскаль должна быть обязательно описана, т.е. должен быть явно указан ее тип. Описание переменных в общем случае имеет вид:

VAR имя , ... , имя : тип ; имя , ... , имя : тип ; ...

Здесь имя - имена переменных (идентификаторы), тип - типы переменных, VAR - ключевое слово, означающее, что после него следуют описания перемен­ных. Переменные одного типа можно описать совместно, разделив их имена за­пятыми, а можно описывать и каждую переменную отдельно. Точка с запятойозначает окончание описания переменных данного типа. Слово VAR может по­вторяться в программе сколько угодно раз. Выбор типа для той или иной пере­менной определяется назначением этой переменной. Пусть, например, перемен­ная i служит счетчиком (индексом) элементов некоторой последовательности, причем известно, что количество элементов не может превосходить 100. Мы мо­жем описать переменную i любым целочисленным типом, но правильный выбор - Byte или ShortInt, любой другой тип будет избыточным. Всегда следует выби­рать типы переменных осознанно; если вы не понимаете, какой тип должна иметь ваша переменная, вероятнее всего, эта переменная в программе не нужна. Для вещественных переменных чаще всего используется тип Real, являющийся основным вещественным типом в Паскале, поэтому мы везде будем писать Real для вещественных переменных, хотя это может быть и другой вещественный тип.

Пусть в программе нам необходимы переменные b1,b2,b3,b4 типа Byte, пе­ременные i,j,k типа Integer и переменные r1,r2 типа Real. Их можно описать, например, так:

VAR b1,b2,b3,b4 : Byte;

i,j,k : Integer;

r1,r2 : Real;

или так :

VAR b1      : Byte;

i,j,k     : Integer; VAR r1       : Real;

VAR b2,b3,b4 : Byte;

r2       : Real;

Эти описания эквивалентны.

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

Каким же образом определить значение переменной ? Для этого использует­ся оператор присваивания:

имя:= выражение;

Здесь мы встречаемся с двумя новыми понятиями - оператор и выражение. Оператор - это минимальная осмысленная конструкция в языке Паскаль, вся программа - это последовательность операторов. Оператор всегда заканчивается символом ";", кроме одного единственного оператора END. Допускаются пустые операторы ";" , не выполняющие никаких действий. Выражение - это конструк­ция, состоящая из одного или нескольких операндов и, возможно, знаков опера­ций, и имеющая некоторое значение. Операндами могут быть константы, пере­менные и другие выражения, т.е. вы можете строить сколь угодно сложные вы­ражения. Мы не знаем пока никаких знаков операций, но предположим, что знак + означает операцию сложения (это так и есть). Запишем несколько выражений:

1 (константа есть частный случай выражения);

b1 (переменная есть частный случай выражения);

25+1E3 b1+4.25+r2

Теперь мы можем присвоить переменной ее значение:

i:=-11; j:=22+i; k:=i+j+177; Наряду с переменными в Паскале есть и другие именованные объекты - это константы (отличайте их от числовых констант, которые не имеют имени, а лишь значение). Константы бывают двух видов - нетипизированные и типизиро­ванные. Нетипизированные константы описываются, так же, как и переменные в разделе описаний, в виде :

CONST имя=значение; имя=значение; ... Здесь имя - идентификатор, значение - вообще говоря, некоторое выражение, ко­торое может включать и именованные константы, описанные выше, но только не переменные. Запишем несколько примеров: CONST C=-155;

D=C+100; E=1E2+C+D; CONST F=D+1; CONST G=C+F;

Нетипизированные константы, описанные в разделе описаний, вы можете за­тем использовать в разделе операторов в выражениях, но изменить их значения невозможно. Не совсем удачное название "нетипизированные" означает не от­сутствие у констант типа - любая константа имеет совершенно определенный тип, который определяется ее значением, - а лишь то обстоятельство, что при описании таких констант тип не указывается явно. В нашем примере константы C,D,F и G имеют тип Integer, а константа E - тип Real. Второй класс именован­ных констант - типизированные константы, описание которых имеет вид:

CONST имя:тип=значение; имя:тип=значение; ... Эти константы вы можете использовать так же, как и нетипизированные, но мо­жете и изменять их значения (например, с помощью оператора присваивания) подобно переменным. Типизированные константы можно, с небольшими ого­ворками, рассматривать как переменные, которым присвоено начальное значе­ние. Приведем пример :

CONST t:Word = $FFFF;    b:Byte    = 11;   r:Real    = 1.23E-16;   z:Integer = 0;

BEGIN t:=t-1; END.