Любые данные в Паскале характеризуются своими типами. Тип определяет множество допустимых значений, которые может иметь тот или иной объект, а также множество допустимых операций, которые применимы к нему. Кроме того, тип определяет формат внутреннего представления данных в памяти ЭВМ.
Рис. Структура типов данных
К простым типам относятся порядковые и вещественные.
Порядковые типы отличаются тем, что каждый из них имеет конечное число возможных значений. Эти значения можно определенным образом упорядочить (отсюда – название типов) и, следовательно, каждому из них можно сопоставить некоторое целое число – порядковый номер значения.
Вещественные типы, строго говоря, тоже имеют конечное число значений, которое определяется форматом внутреннего представления вещественного числа. Однако количество возможных значений вещественных типов настолько велико, что сопоставить с каждым из них целое число (его номер) не представляется возможным.
6.1.1. Порядковые типы
К порядковым типам относятся целые, логический, символьный, перечисляемый и тип-диапазон.
К любому значению порядкового типа можно применить встроенные функции:
Ord(x) – возвращает порядковый номер значения x;
Pred(x) – возвращает значение, предшествующее значению x. Если x – первое допустимое значение любого порядкового типа, кроме булевского, то возвращается порядковый номер последнего значения;
Succ(x) – возвращает значение, следующее за указанным x. Если x – последнее допустимое значение любого порядкового типа, кроме булевского, то возвращается порядковый номер первого значения.
Например, если в программе определена переменная
с : Char;
с := '5';
то функция PRED(C) вернет символ '4', а функция SUCC(C) - символ '6'.
Целые типы. Диапазон возможных значений целых типов зависит от их внутреннего представления, которое может занимать 1, 2 или 4 байта.
Длина, байт
Название типа
Диапазон значений
Byte
0…255
Shortint
-128…127
Word
0…65636
Integer
-32768…32767
Longint
-2147483648…2147483647
Замечание. При использовании процедур и функций с целочисленными параметрами следует руководствоваться «вложенностью» типов. Например, везде, где может использоваться тип Word, допускается использовать тип Byte (но не наоборот).
Рассмотрим основные встроенные процедуры и функции, применимые к целочисленным типам. В квадратных скобках будем указывать необязательный параметр.
Обращение
Тип параметров
Тип результата
Действие
Chr(x)
x – выражение типа byte
char
Функция возвращает символ по его коду
Dec(x[,j])
x, j –любого целого типа
–
Процедура уменьшает значение x на j, при отсутствии j – на 1.
Inc(x[,j])
x, j –любого целого типа
–
Процедура увеличивает значение x на j, при отсутствии j – на 1.
Odd(x)
x – любого целого типа
boolean
Функция возвращает true, если аргумент – нечетное число, False – если четное.
Random(x)
x – выражение типа word
Как у параметра
Функция возвращает псевдослучайное число, равномерно распределенное на интервале [0;x).
Логический тип (boolean).Значениями логического типа может быть одна из объявленных констант False (ложь) или True (истина).
Значению False соответствует число 0, а значению True – любое число отличное от 0. Справедливо соотношение: False<True.
Символьный тип (char). Значением символьного типа является множество всех символов персонального компьютера. Каждому символу приписывается целое число в диапазоне от 0 до 255. Это число служит кодом внутреннего представления символа. К типу Char применимы операции отношения, а также встроенные функции:
Ord(x) – функция, возвращает код внутреннего представления символа x;
UpCase(ch) - функция типа char; возвращает прописную букву, если ch – строчная латинская буква, в противном случае возвращает сам символ ch (для кириллицы возвращает исходный символ).
Перечисляемый тип. Перечисляемый тип задается перечислением тех значений, которые он может получать. Каждое значение именуется некоторым идентификатором и располагается в списке, обрамленном круглыми скобками, например:
colors = (red, white, blue);
Применение перечисляемых типов делает программы нагляднее. Если, например, в программе используются данные, связанные с месяцами года, то следующий фрагмент программы был бы наглядным (кириллицу нельзя использовать в идентификаторах):
Значения перечисляемого типа нумеруются в порядке перечисления, причем первое значение в списке имеет номер 0, второе – 1 и т. д.
Переменные любого перечисляемого типа можно объявлять без предварительного описания этого типа, например:
days:(Monday, Tuesday, Wednesday);
Для переменных этого типа:
1. Допустимы все процедуры и функции для работы с порядковыми типами.
2. Значения перечисляемых типов не могут быть аргументами процедур Read и Write.
3. С операндами данного типа допускаются только операции отношения.
4. Могут быть использованы в операторах :=, а также в качестве индексов массивов и границ оператора for.
Тип-диапазон (интервальный тип) представляет собой интервал значений какого-либо порядкового типа, называемого базовым. Тип-диапазон задается границами своих значений внутри базового типа:
<мин. знач.>..<макс. знач.>
Здесь <мин. знач. > – минимальное значение типа-диапазона; <макс. знач.> – максимальное его значение.
Например:
digit = '0'..'9'; {базовый тип – char}
n = 1..10; {базовый тип – integer}
Тип-диапазон не обязательно описывать в разделе type, а можно указывать непосредственно при объявлении переменной, например:
date : 1..31;
month: 1..12;
При определении типа-диапазона нужно руководствоваться следующими правилами:
· два символа “..” рассматриваются как один символ, поэтому между ними недопустимы пробелы;
· левая граница диапазона не должна превышать его правую границу.
Тип-диапазон наследует все свойства своего базового типа, но с ограничениями, связанными с его меньшей мощностью. В частности, если определена переменная
days = (mо, tu, we, th, fr, sa, su);
WeekEnd = sa .. su;
w : WeekEnd;
w := sa;
то ord(w) вернет значение 5, в то время как pred(w) приведет к ошибке.
Значением вещественных типов может быть произвольное число, заданное с некоторой конечной точностью, зависящей от внутреннего формата вещественного числа.
Для работы с вещественными данными могут использоваться встроенные математические функции, представленные в таблице. В этой таблице Real означает любой вещественный тип, Integer - любой целый тип.
Обращение
Тип результата
Примечание
Abs (x)
Real, Integer
Модуль аргумента
Pi
Real
π =3.141592653...
Sqr (x)
Real, Integer
Квадрат аргумента
Sqrt (x)
Real
Корень квадратный
Sin (x)
Real
Синус, угол в радианах
Cos (x)
Real
Косинус, угол в радианах
ArcTan (x)
Real
Арктангенс (значение в радианах)
Exp (x)
Real
Экспонента
Ln (x)
Real
Логарифм натуральный
Frac (x)
Real
Дробная часть числа
Int (x)
Real
Целая часть числа
Random
Real
Псевдослучайное число, равномерно распределенное в диапазоне 0..1
Замечание. Генератор псевдослучайных чисел (Random) представляет собой функцию, которая берет некоторое целое число, называемое базовым, изменяет его разряды по определенному алгоритму и выдает новое число-результат. Одновременно с этим новое число становится базовым при следующем обращении к функции и т. д. (Так как алгоритм процедуры не меняется в ходе ее работы, числа называются псевдослучайными.) Перед использованием процедуры Random необходимо обращение к процедуре Randomize (без параметров).