Глава 3 Более сложные элементы языка
____________________________________________________________________
|
|
|
Таблица 3.1 |
Тип |
Диапазон значений |
Размер памяти (байты) |
Формат |
Byte |
0..255 |
1 |
без знака |
ShortInt |
-128..+127 |
1 |
со знаком |
Word |
0..65535 |
2 |
без знака |
SmallInt |
-32768..+32767 |
2 |
со знаком |
Integer |
-2147483648..+2147483647 |
4 |
со знаком |
LongInt |
-2147483648..+2147483647 |
4 |
со знаком |
LongWord |
0..4294967295 |
4 |
без знака |
Cardinal |
0..4294967295 |
4 |
без знака |
Int64 |
-263..+263-1 |
8 |
со знаком |
Как видите, количество целочисленных типов достаточно велико, однако наиболее часто используемыми являются типы integer и cardinal. Эти два типа обеспечивают максимальную производительность на 32-битных платфор-
мах. Заметим, что указанный диапазон, соответствующий LongInt, верен только для режимов компиляции OBJFPC и DELPHI. В остальных случаях (в т.ч. и по умолчанию) Integer соответствует SmallInt (2 байта).
3.2.1.2. Интервальный тип
Интервальный тип определяется на основе порядкового типа и позволяет ограничить диапазон допустимых значений в виде некоторого интервала вида:
Минимальное значение..Максимальное значение
При этом символы ".." между минимальным и максимальным значениями считаются одним символом, т.е. пробелы между этими точками недопустимы.
Естественно, максимальное значение должно быть больше минимального. Опи-
сание переменной интервального типа имеет вид:
var <Переменная>: Минимальное значение..Максимальное значение;
Например:
var day: 1..31;
month: 1..12;
year: 2000..2008;
161
3.2 Еще раз о типах данных
____________________________________________________________________
3.2.1.3. Перечислимый тип
В этом типе, как следует из названия, значения задаются простым пере-
числением через запятую, причем весь список заключается в скобки, например:
var education: (student, bachelor, graduate, doctor);
course: (first, second, third, fourth, fifth);
Порядковый номер элемента списка начинается с 0, таким образом student имеет порядковый номер 0, bachelor порядковый номер 1, graduate
номер 2, doctor номер 3.
3.2.1.4. Множества
Множество в Object Pascal представляют собой группу элементов, с
которыми можно сравнивать другие элементы с целью определения входят эти элементы в состав множества или нет. Множества предоставляют программи-
сту возможность достаточно просто представить коллекцию символов, чисел или других перечислимых типов данных. Объявление множества имеет вид:
Set of <Базовый тип>
Например:
var
num: set of 1..10;
num1: set of 20..100;
Здесь num – множество, состоящее из десяти целых чисел.
num1 – множество состоящее из целых чисел от 20 до 100. Значением пе-
ременной типа множество является набор значений или интервалов порядково-
го типа, заключенных в квадратные скобки. Такая форма определения множе-
ства называется конструктором множества.
Присвоение значения переменным: num:=[1, 3, 5, 7, 9]; num1:=[21..75, 81, 82..95];
162
Глава 3 Более сложные элементы языка
____________________________________________________________________
Чтобы определить принадлежит ли переменная множеству, используется оператор in:
if 81 in num1 then
<Какие-то действия >
Можно множество заранее не определять, а сразу использовать конструк-
тор множества в операторе in:
if range in [1..50, 75..100] then
<Какие-то действия >
3.2.1.5. Логический тип
Логический тип имеет только два значения true (истина, да) и false
(ложь, нет). Причем, логическому true соответствует порядковое число 1, а false 0. Таким образом true "больше" false!
Возможные логические типы представлены в таблице 3.2.
|
Таблица 3.2 |
Тип |
Размер памяти (байты) |
|
|
Boolean |
1 |
|
|
ByteBool |
1 |
|
|
WordBool |
2 |
|
|
LongBool |
4 |
|
|
Рекомендуется использовать тип boolean, остальные типы введены для совместимости с другими языками.
3.2.1.6. Вещественный тип
Вещественные числа представляются в памяти компьютера в форме с пла-
вающей точкой и позволяют производить вычисления с большой точностью и значительно большим диапазоном значений чисел, в том числе и дробных.
163
3.2 Еще раз о типах данных
____________________________________________________________________
Основные вещественные типы представлены в таблице 3.3.
|
|
|
|
|
|
|
Таблица 3.3 |
Тип |
Диапазон значений |
Число значащих |
Размер |
памяти |
|||
|
|
|
|
|
разрядов |
(байты) |
|
Real48 |
2.9 |
10 39 .. |
1.7 |
1038 |
11 – 12 |
6 |
|
Real |
5.0 |
10 324 .. |
1.7 |
10308 |
15 – 16 |
8 |
|
Single |
1.5 10 45 .. |
3.4 |
1038 |
7 – 8 |
4 |
|
|
|
|
|
|
|
|
|
|
Double |
5.0 |
10 324 .. |
1.7 |
10308 |
15 – 16 |
8 |
|
Extended |
3.6 |
10 4932 .. |
1.1 104932 |
19 – 20 |
10 |
|
|
|
|
|
|
|
|
|
|
Comp |
-263 .. 263 |
|
|
19 – 20 |
8 |
|
|
Currency |
-922337203685477.5808 |
19 – 20 |
8 |
|
|||
|
+922337203685477.5807 |
|
|
|
|||
|
|
|
|
|
|
|
|
Максимальную производительность и точность обеспечивает тип
Extended. Тип Currency минимизирует ошибки округления и его целесооб-
разно применять для денежных расчетов. Тип Comp на самом деле целое 64-х
разрядное число, но оно обрабатывается так же как и вещественные типы, т.е. в
выражениях полностью совместим с вещественными типами.
3.2.1.7. Указатели
Указатель это переменная особенного типа, в которой содержатся не сами данные, а адрес памяти, где эти данные хранятся. Точнее адрес первого байта этих данных. Таким образом, указатель как бы ссылается на данные посредст-
вом своего значения (адреса). Примером указателя в обычной жизни может служить номер телефона. Само по себе это число ничего не значит, но если вы наберете этот номер в своем мобильном телефоне, вы "попадете" к нужному абоненту.
Указатели бывают типизированные и нетипизированные. При объявлении типизированного указателя всегда указывается тип данных, на которые ссыла-
ется указатель. Описание указателя имеет вид:
164
Глава 3 Более сложные элементы языка
____________________________________________________________________
var имя переменной: ^тип;
Например:
var px: ^integer; // указатель на данные целого типа py: ^real; // указатель на данные вещественного типа pname: ^string; // указатель на данные типа строка
pphone: ^string[7];
Компилятор строго следит за правильностью использования указателя и типом данных, на которые ссылается этот указатель.
Для нетипизированных указателей тип данных не указывается. В этом слу-
чае программист сам должен заботиться о правильном использовании указателя и типов данных. При его описании используется ключевое слово pointer.
Пример описания нетипизированного указателя:
var p: pointer;
Более подробно мы будем изучать указатели в главе 4.
В дальнейшем мы рассмотрим еще типы данных, в частности, в следую-
щем разделе познакомимся с типами данных, позволяющих обрабатывать сим-
вольную информацию.
3.3.Обработка символьной информации в Паскале
3.3.1Символьные и строковые типы данных.
Первые применения ЭВМ были в основном для решения так называемых вычислительных задач, т.е. задач возникающих в математике, в научно – тех-
нических задачах, где требуется решение различных уравнений, вычисление значений функций и т.д. Но применение компьютеров для вычислительных за-
дач составляет всего 20 – 25% по сравнению с их применением в других облас-
тях. К таким задачам относятся задачи, возникающие в лингвистике, логике,
165