Смекни!
smekni.com

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

.

С.А. Григорьев

В языке Паскаль определены следующие арифметические типы данных: целочисленные типы - 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.