Выбрать главу

Целочисленные значения записываются в программе привычным способом:

123 4 -5 -63333 +10000

Число должно быть записано без всяких преобразований. Будет ошибкой задать целое число следующим образом:

1Е+2 (в смысле 100), или 123.0

Знак «+» перед числом может опускаться. Турбо Паскаль разрешает записывать целые значения в шестнадцатеричном формате, используя префикс $:

$FF $9 $FFFFAB0D

Регистр букв A, B, ..., F значения не имеет. Разрешается непосредственно приписывать знак числа, если значения (со знаком или без) не превышают допустимый для данного типа диапазон: от -$80 до +$7F для типа ShortInt, и от -$8000 до +$7FFF для типа Integer. Отрицательные значения для переменных типа LongInt могут быть записаны аналогичным способом. Но здесь есть особенность. Для этого типа отрицательные значения могут записываться и как целые величины без знака. При этом запись отрицательных значений в

- 63 -

шестнадцатеричном формате должна соответствовать обратному отсчету от максимального для размера LongInt положительного числа. Например, число $FFFFFFFF (условное максимальное положительное значение, размещающееся в четырех байтах) трактуется как значение типа LongInt, равное -1. Число $FFFFFFFE (это $FFFFFFFF-l) будет соответствовать уже -2 и т.д. Следуя этой схеме, значение, например -65, в шестнадцатеричном формате для типа LongInt вычислится так: от числа $FFFFFFFF, соответствующего значению -1, нужно «вычесть» еще 64:

$FFFFFFFF - 64 = $FFFFFFFF - $40 = $FFFFFFBF.

Мы специально рассмотрели запись отрицательных чисел в шестнадцатеричном формате, потому что встроенный отладчик Турбо Паскаля при выводе отрицательных целых значений в формате H приводит их к длине LongInt и выводит в обратном отсчете. Здесь необходимо сделать небольшое техническое замечание. Целые значения типов Word, Integer и LongInt хранятся в памяти в «перевернутом» виде: первым идет наименее значащий байт, а последним — наиболее значащий. Так, если мы запишем в переменную W типа Word значение $0102, то оно будет храниться как два байта $02 и $01. Аналогично, если переменной L типа LongInt присвоить значение $01020304, то оно расположится в памяти как четыре байта : $04, $03, $02, $01. Эта машинная «кухня» не важна при работе с переменными — они позволяют вообще не знать механизмов хранения данных. Но при прямом доступе в память или преобразовании данных (что разрешается языком Турбо Паскаль) эти технические подробности становятся необходимыми.

4.1.2. Вещественные числа

Вещественные значения (значения типа Real) могут записываться несколькими способами:

 

-1.456

 0.00239

-120.00

.09

66777

0

-10

+123

123E+2

-1.4E-19

5E4

0.1234E+31

Как видно, они могут быть представлены: обычным способом с десятичной точкой; как целые, если дробная часть равна 0; в экспоненциальном формате. Экспоненциальный формат соответствует умножению на заданную степень 10. Так,

-1.4E-19 = -1.4 * (10 в степени -19).

Написание буквы E может быть как прописным, так и строчным. Без

- 64 -

использования типов повышенной точности, работающих с математическим сопроцессором 80Х87, степень может иметь не более двух цифр (в диапазоне (-38) ... (+38)), но при использования этих типов — уже до четырех цифр:

1.23456789+0120

Знак числа + может опускаться, в том числе и в экспоненте. В вещественную переменную можно записать шестнадцатеричную константу. При этом она преобразуется в вещественную форму.

4.1.3. Логический тип

Логический тип Boolean состоит из двух значений: False (ложно) и True (истинно). Слова False и True определены в языке и являются, по сути, логическими константами. Регистр букв в их написании несущественен: FALSE = false. Значения этого типа участвуют во всевозможных условных операторах языка. С логическим типом связан ряд операций языка, реализующий Булеву алгебру (логические НЕ, И, ИЛИ и др.)

4.1.4. Символьный тип

Символьный тип Char — это тип данных, состоящих из одного символа (знака, буквы, кода). Традиционная запись символьного значения представляет собой собственно символ, заключенных в одиночные кавычки: 'ж', 'z' '.' ' ' (пробел) и т.п. В Турбо Паскале имеются альтернативные способы представления символов. Все они будут рассмотрены в гл. 8 «Обработка символов и строк». Значением типа Char может быть любой символ из набора ASCII — однако на каждый из них можно «написать» на клавиатуре.

4.1.5. Строковый тип

Очень важным и полезным является тип динамических строк String. (здесь «динамические» означает переменной длины). Можно задать, например, тип String[126] — и переменные такого типа смогут иметь в себе строки длиной от 0 до 126 символов. В Турбо Паскале строки — это больше, чем просто массив символов. К ним прилагается библиотека средств, позволяющих делать со строками буквально все, что угодно. Значения типа «строка» в простейшем случае записываются как обычные текстовые строчки, заключенные в одиночные кавычки:

- 65 -

'строчка '

'строка из цифр 12345'

'В кавычках может стоять любой символ, кроме кода 13'

's'

'' (пустая строка)

'Это - '' - одиночная кавычка в строке'

4.1.6. Адресный тип

Язык Турбо Паскаль объявляет специальный адресный тип — Pointer. Значением этого типа является адрес ячейки памяти, представленный по правилом MS-DOS. Тип Pointer — сугубо внутренний. Его значения нельзя вывести на печати или записать в переменную, как мы записываем числовые значения. Вместо этого всегда приходится использовать специальные функции для преобразования условной общепринятой записи адресов памяти в формат типа Pointer и наоборот.

Мы рассмотрели типы, вводимые языком. Кроме них, есть категории типов данных, вводимых программистом, которые мы далее рассмотрим подробно. К ним относятся в первую очередь перечислимые типы.

4.1.7. Перечислимые типы

Перечислимый тип — это такой тип данных, при котором количество всех возможных значений ограничено (конечно). Например, тип Word соответствует этому определению. В нем 65536 значений — от 0 до 65535. И уж точно перечислимыми являются типы: Byte — 256 значений от 0 до 255 и Char — в нем 256 символов с кодами от 0 до 255. Можно перечислить и все значения типов ShortInt, Integer и даже LongInt. Только перечисление начнется не с нуля, а с отрицательного целого значения.

Есть и еще один предопределенный перечислимый тип — Boolean. У него всего два значения — False и True. Принято, что номер False внутри языка равен 0, а номер True равен 1. Перечислимый тип можно расписать в ряд по значениям. Тип Char можно было расписать в синтаксисе Паскаля как

TYPE

Char = ( симв0, симв1..., симв64, 'A', 'B', 'C', ...симв255);

тип Byte выглядел бы так:

Byte = (0, 1, 2,...,254, 255);

- 66 -

а логический тип — как

Boolean = ( False, True );

Но такие определения проделаны еще во время написания самого компилятора языка, осталось только пользоваться ими. Зато мы можем вводить новые перечислимые типы, придумывая им имена и перечисляя через запятую в круглых скобках названия элементов-значений этого типа: