Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Темы 3, 5 + массивы ИиП.docx
Скачиваний:
7
Добавлен:
09.06.2015
Размер:
81.78 Кб
Скачать

2. Характеристика простых типов данных

1. Целые типы.

Это целые числа со знаком или без него, записанные явно в десятичной или шестнадцатеричной системах счисления. В последнем случае перед значением обязательно ставится знак $ или ¤.

Пример:

+6312

-2

$AD

$4FC

¤B9EF

Целые числа определяют конкретные числовые значения в максимальном диапазоне:

от -2 147 483 648 до +2 147 483 647 в десятичном

представлении или

от $00000000 до $FFFFFFFF в шестнадцатеричном.

Всего в языке используется 5 целых типов:

Таблица 2.

Характеристики целых типов данных

Имя

типа

Название

типа

Длина в байтах

Диапазон значений

SHORTINT

целый с коротким интервалом значений

1

-128 .. +127

BYTE

байтовый

1

0 .. 255

WORD

слово

2

0 .. 65535

INTEGER

целый

2

-32768 .. +32767

LONGINT

целый с длинным интервалом значений

4

-2 147 483 648 ..

+2 147 483 647

Замечания: 1. следует следить за возможным переполнением

результатов арифметических операций при работе с тем

или иным целым типом, т.к. может произойти

искажение или усечение этих результатов.

2. при использовании различных типов операндов

арифметических операций тип результата будет

сориентирован на тип операнда с большим диапазоном

значений.

2. Вещественные типы.

Для них характерна требуемая (а не абсолютная, как для целых) точность представляемого числа. Это достигается тем, что значения вещественного типа хранятся в формате числа с плавающей точкой:

<мантисса> Е[±]<порядок>

где: мантисса – целое число или число с фиксированной точкой со

знаком или без;

порядок – показатель степени (целое число);

Е – экспонента («умножить на 10 в степени …»).

В результате читается:

«мантисса, умноженная на 10 в степени, равной порядку».

Примеры:

28Е4 => 280 000

405.25E-3 => 0.40525

-879E-2 => - 8.79

В следующей таблице представлены 5 разновидностей вещественных типов данных:

Таблица 3.

Характеристики вещественных типов данных

Имя

типа

Разрядность мантиссы

(кол-во значащих цифр)

Длина в байтах

Диапазон десятичного порядка

SINGLE

7..8

4

-45 .. +38

REAL

11 .. 12

6

-39 .. + 38

DOUBLE

15 .. 16

8

-324 .. +308

EXTENDED

19 .. 20

10

-4932 .. +4932

COMP

19 .. 20

8

-2**63+1 .. +2**63-1

Чтобы сделать доступными типы SINGLE, DOUBLE, EXTENDED, необходимо соответствующим образом настроить компилятор ( с помощью директивы {$N+}).

Тип COMP воспринимается как вещественное число без экспоненциальной и дробной частей, т.е. фактически как целое с большим количеством значащих цифр. Это делает весьма эффективным использование данного типа в денежных (бухгалтерских) расчетах, требующих высокой точности.

Кроме числа с плавающей точкой, вещественный тип может представляться и в удобной для восприятия форме числа с фиксированной точкой. В нем выделяются целая и, обязательно, дробная части, разделенные точкой. Числа с фиксированной точкой могут быть положительными или отрицательными.

Примеры:

75.05 -231.2 0.00789 -0.955

100.0

Но не 100 (!), т.к. это уже будет целый тип.

3. Логический тип - BOOLEAN.

В оперативной памяти занимает 1 байт и задается одним из значений:

TRUE – истина;

FALSE – ложь.

Причем TRUE> FALSE (порядковый номер TRUE=1, а FALSE=0).

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

Его значением может быть один из символов расширенного

кодового набора ASCII (American Standard Code for Information Interchange), заключенный в апострофы. Сам апостроф удваивается при записи.

Примеры:

`T` `*` `!` `t` `+` ````

Отдельные символы набора ASCII имеют порядковые номера и упорядочены по ним от 0 до 255. Поэтому `A` < `B`, `D`<`F` и т.д.

В оперативной памяти значению символьного типа отводится 1 байт.

  1. Перечисляемый и интервальный типы.

Язык Турбо-Паскаль дает возможность программисту работать с ограниченным множеством однородных данных, используя т.н. перечисляемый и интервальный типы данных. Число элементов в них – не > 256, каждому элементу отводится 1 байт памяти.

а). Перечисляемый тип.

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

Объявление перечисляемых типов данных приводится до описания переменных (в VAR) по следующему синтаксису:

TYPE <имя типа>=(<идентификатор>[,<идентификатор> …]);

где: <имя типа>::=<идентификатор>

Например:

TYPE PTK=(EIE,ET,ETB,ES);

GRUP=(EIS_111, EIS_112, EIS_211, EIS_212, EIS_311,

EIS_312, EIS_411, EIS_412, EIS_511, EIS_512);

NEDEL =(PND,VTR,SRD,CTV,PTN,SBT,VSK);

Отдельные элементы (значения) рассматриваемого типа являются самостоятельными объектами (не путать с константами), составляющими упорядоченный список в порядке перечисления. При этом первый элемент имеет номер 0, второй – 1 и т.д. Поэтому справедливо:

EIE < ET < ETB < ES

Замечание: каждый элемент из списка перечисляемого типа является

значением своего типа и не может принадлежать другому

типу в программе. Т.е , например, EIE из типа PTK не

может быть включен в тип GRUP.

Переменные, принадлежащие к типам, объявленным в разделе TYPE c помощью имен типов, должны быть описаны в разделе VAR:

VAR POTOK: PTK;

ST_GR: GRUP;

DAY: NEDEL;

Это означает, что скалярная переменная РОТОК может принимать одно, любое из перечисленных значений в объявлении типа РТК, т.е. EIE,ET,ETB,ES (и только!). Аналогично для ST_GR и ST_GR.

Т.е. допустимы присваивания:

POTOK:=EIE;

ST_GR:=EIE_111;

DAY := VSK;

Но недопустимо:

POTOK:=EIE_111; (разные типы!)

Переменные перечисляемого типа можно описывать и непосредственно в VAR:

VAR POTOK: (EIE,ET,ETB,ES);

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

FOR ST_GR:=EIE_111 TO EIE_312 DO …

WHILE DAY <> SBT AND DAY <> VSK DO …

IF POTOK=EIS THEN …

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

IF POTOK=1 THEN …

Что здесь понимать под 1? Ясно, что предыдущая форма записи точнее!

б). Интервальный тип (иначе, тип-диапазон, ограниченный тип, отрезки типов).

Такой тип задается двумя константами, разделенными двумя горизонтальными точками и определяющими допустимый интервал (диапазон) значений от минимального до максимального.

В качестве констант можно использовать значения любого простого порядкового типа, кроме интервального. Тип, на котором строится этот интервал, называется базовым. Фактически интервальный тип задает подмножество внутри допустимых значений базового типа и поэтому сохраняет все его свойства при проведении тех или иных операций.

Синтаксис объявления:

TYPE <имя типа>=<1-ая константа>..<2-ая константа>;

где: <имя типа>::=<идентификатор>;

«1-ая константа» задает нижнюю границу допустимых значений интервала, а «2-ая константа» - верхнюю. Причем «2-ая » > «1-ой»

Примеры:

TYPE SP1=1..100; {базовый тип BYTE }

SP2=-10000..+10000; { - « - « - INTEGER}

SP3=`A`..`Z`; { - « - « - CHAR }

RDN=PND..PTN; { - « - « - перечисляемый}

Переменные интервального типа должны быть объявлены в VAR:

VAR INT: SP1;

DIAP: SP2;

ALF: SP3;

RAB_DNI: RDN;

Допускается короткое описание переменных интервального типа, без TYPE:

VAR INT: 1..100;

DIAP: -10000..+10000;

ALF: `A`..`Z`;

RAB_DNI: PND..PTN;

Можно и так:

CONST MIN=-10000;

MAX=10000;

VAR DIAP: MIN..MAX;

В целом использование перечисляемых и интервальных типов:

- повышает восприятие программ;

- позволяет программными средствами контролировать данные на

допустимость их значений;

- облегчает отладку программ.

6. Строчный тип – STRING[(N)].

Он определяет строку из N символов (1<N<255), заключенных в апострофы. Если N опущено, то предполагается, что N=255. Полезные апострофы в строке удваиваются.

Например:

`группа ЭИЭ-112`, `кафедра ``ИСЭК`` МИИТа`,

`ОТЧЕТ ф.ЦО-12`

Объявляется строчный тип обычным образом:

TYPE GR=STRING(14);

KF=STRING(20);

VAR N_GR, OTCH: GR;

KAFDR: KF;

Или непосредственно в VAR:

VAR N_GR, OTCH: STRING(14);

KAFDR: STRING(20);

Строго говоря, строку можно воспринимать как единое целое, И тогда это простой тип. Однако фактически строка представляется цепочкой символов, каждый из которых имеет свой индекс от 1 до 255 с добавлением 0-ого (самый первый байт), где постоянно хранится текущая длина строки. Поэтому ее можно трактовать как массив (сложный, структурированный тип) и, соответственно, манипулировать отдельными ее элементами, обращаясь к ним путем точного указания индекса:

IF N_GR[14]=`2` THEN …

На каждый символ строки в оперативной памяти отводится 1 байт. «Плюс» 1 байт на текущую длину. Поэтому на строку `поезд` будет отведено 6 байт памяти (5 + 1).

Строки можно сцеплять с помощью знака «+»:

Например,

пусть А:=`компания `;

Тогда С:=А+`I`+`B`+M`;

или С:=А+`IBM`; дадут текст: `компания IBM`