Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
delphi / песни о паскале.pdf
Скачиваний:
63
Добавлен:
26.03.2016
Размер:
5.16 Mб
Скачать

Глава 32

Порядковые типы данных

var c : char;

. . .

Case c of

’0’..’9’: Writeln(’Цифра’);

’a’..’z’: Writeln(’Латинская строчная’); ’A’..’Z’: Writeln(’Латинская прописная’);

end;

А вот ещё пример:

type

TMonth = (Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec);

var

m : TMonth; { здесь хранится один из месяцев }

 

. . .

 

Case m of

Jan, Feb, Dec

: Writeln(’Зима’);

Mar..May

: Writeln(’Весна’);

Jul..Aug

: Writeln(’Лето’);

Sep..Nov

: Writeln(’Осень’);

end;

 

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

Разумный контроль

Директивы $R+ и $Q+ лучше использовать при отладке программы. В хорошо отлаженной программе таких ошибок возникать не должно, — за это отвечает программист. При компиляции окончательной версии эти директивы лучше отключить, чтобы не увеличивать размер программы и не замедлять её работу.

Итоги

Существуют три категории типов данных: простые, сложные и указатели.

Простые типы данных делятся на порядковые и вещественные.

К порядковым типам относятся целые числа, символы, перечисления и булевы данные.

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

Присвоение переменной порядкового типа значения, выходящего за допустимый диапазон, влечет ошибку нарушения диапазона.

При включенной директиве $R+ нарушение диапазона приводит к аварии программы, а при отключенной – к переполнению или антипереполнению.

228

Глава 32

Порядковые типы данных

Функцией ORD можно определить код любого значения порядкового типа.

Переход к следующему или предыдущему значению порядкового типа выполняется функциями SUCC и PRED.

Для быстрого прибавления и вычитания единицы предпочтительней применять процедуры INC и DEC.

Порядковые типы данных обладают рядом общих свойств, что позволяет применять их в счетчиках циклов и в метках оператора выбора.

Аслабо?

А) Напомню, что функция SizeOf возвращает объем памяти, занимаемый переменной, например:

Writeln(

SizeOf(

LongInt ) );

{

4

}

Writeln(

SizeOf(

M1 ) );

{

1

}

 

 

 

 

 

 

Воспользуйтесь ею для распечатки размеров всех известных вам порядковых типов данных.

Б) Перечислимые типы и диапазоны строятся на базе других типов данных (Byte, ShortInt и так далее). Какие типы данных, по вашему мнению, будут положены в основу следующих диапазонов:

var N : -10..10; M : -200..200; R : 0..40000; L : 0..400000; S : ’0’..’9’;

В) Процедура печати Writeln не способна распечатать название месяца, представленного в перечислении. Напишите для этого свою собственную процедуру (объявите тип TMonth и воспользуйтесь оператором CASE).

Г) «Не думай о секундах свысока…». Штирлицу подарили секундомер, который показывал секунды, прошедшие с начала суток. Пусть ваша программа переведет это число в привычные часы, минуты и секунды.

Подсказки: во-первых, примените операции DIV и MOD. Во-вторых, переменную для секунд объявите как LONGINT (а не INTEGER), поскольку количество секунд в сутках (86400) не поместится в типе INTEGER.

229

Соседние файлы в папке delphi