Чтобы сделать доступными типы 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 байт.
2. Перечисляемый и интервальный типы.
Язык Турбо-Паскаль дает возможность программисту работать с ограниченным множеством однородных данных, используя т.н. перечисляемый и интервальный типы данных. Число элементов в них – не > 256, каждому элементу отводится 1 байт памяти.
а). Перечисляемый тип.
Он относится к скалярным типам и определяет возможные значения некоторой переменной, задаваемой в виде упорядоченной последовательности идентификаторов, обозначающих эти значения.
Объявление перечисляемых типов данных приводится до описания переменных (в VAR) по следующему синтаксису:
Отдельные элементы (значения) рассматриваемого типа являются самостоятельными объектами (не путать с константами), составляющими упорядоченный список в порядке перечисления. При этом первый элемент имеет номер 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=1THEN …
Что здесь понимать под 1? Ясно, что предыдущая форма записи точнее!
б). Интервальный тип (иначе, тип-диапазон, ограниченный тип, отрезки типов).
Такой тип задаетсядвумя константами, разделенными двумя горизонтальными точками и определяющими допустимый интервал (диапазон) значений от минимального до максимального.
В качестве констант можно использовать значения любого простого порядкового типа, кроме интервального. Тип, на котором строится этот интервал, называется базовым. Фактически интервальный тип задает подмножество внутри допустимых значений базового типа и поэтому сохраняет все его свойства при проведении тех или иных операций.
«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).