Дмитрий Поляков - Программирование в среде Турбо Паскаль стр 14.

Шрифт
Фон

4.1.1. Целочисленные типы

Обилие целочисленных типов позволяет эффективно использовать память ПЭВМ и более гибко вводить целочисленные переменные в программу. Целочисленные типы отличаются размером при хранении в памяти (Byte и ShortInt - 1 байт, Word и Integer - 2 байта, LongInt - 4 байта) и способом кодировки значений (с представлением знака или без него). Типы без знака переводят допустимый диапазон значений целиком в неотрицательную область.

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

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

-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 );

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

| TYPE

| Personages = ( NifNif, NufNuf, NafNaf );

| Test = ( Level0, Level1, Level2, Level4, Level5);

| MusicCard = ( IBM, Yamaha, ATARI, other, None);

| Boolean3 = (false_, Nolnfo_, true_);

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

Перечислимые данные (их можно называть атомами) должны иметь синтаксис идентификаторов, и поэтому не могут перечисляться цифры, символы, строки.

Идентификаторы не могут повторяться в одной программе. Заметьте, как введен тип Boolean3 для моделирования трехзначной логики: чтобы избежать использования уже задействованных имен True и False, они чуть-чуть видоизменены. Регистр написания идентификаторов по-прежнему не играет роли. Максимальное число элементов в одном вводимом перечислении равно 65535.

Применение вводимых перечислимых типов имеет ряд преимуществ:

1) улучшается смысловая читаемость программы;

2) более четко проводится контроль значений;

3) перечислимые типы имеют очень компактное машинное представление.

Ваша оценка очень важна

0
Шрифт
Фон

Помогите Вашим друзьям узнать о библиотеке