Чтение онлайн

на главную - закладки

Жанры

Шрифт:

Функция SUCC (от слова SUCCESS – «ряд», «последовательность») принимает значение порядкового типа и возвращает следующее значение того же самого типа, например:

Writeln ( Succ(20) ); { 21 }

Writeln ( Succ(’D’) ); { ’E’ }

Writeln ( Succ(False) ); { True }

m:= Succ(Feb); { переменной m присвоено Mar }

Функция PRED (от PREDECESSOR – «предшественник») возвращает предыдущее значение порядкового типа:

Writeln ( Pred(20) ); { 19 }

Writeln ( Pred(’D’) ); { ’C’ }

Writeln ( Pred(True) ); { False }

m:= Pred(Feb); {

переменной m присвоено Jan }

Функции SUCC и PRED подчиняются директиве контроля диапазонов $R+. Например, следующие операторы вызовут аварийное прекращение программы:

{ $R+ }

m:= Succ(Dcb); { превышение верхнего предела }

m:= Pred(Jan); { выход за нижний предел }

В Borland Pascal есть одна тонкость: директива $R+ не действует, если функции SUCC и PRED вызываются для чисел, например:

{ $R+ }

var B : byte;

...

B:=255; B:= Succ(B); { нет реакции на переполнение }

B:=0; B:= Pred(B); { нет реакции на антипереполнение }

В таких случаях в Borland Pascal имеет силу директива проверки переполнения $Q+, которая соответствует флажку «Overflow Checking» в окне опций компилятора (рис. 74). Директивы $R+ и $Q+ можно применять совместно, например:

{ $R+, Q+ }

var B : byte; { допустимые значения для байта от 0 до 255 }

C : ’a’..’z’; { это ограниченный диапазон символов }

...

C:=’z’; C:= Succ(C); { сработает R+ }

B:=255; B:= Succ(B); { сработает Q+ }

Счетчики циклов

В операторе FOR-TO-DO для счетчика цикла мы применяли числовые переменные. Теперь разнообразим меню: ведь для этого годятся переменные любого порядкового типа, например:

var m : (Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dcb);

...

for m:= Jan to Dcb do...

А вот так вычисляется сумма кодов для символов от «a» до «z», здесь счетчиком цикла является символьная переменная:

var Sum : word; Chr : char;

...

Sum:=0;

for Chr:= ’a’ to ’z’ do Sum:= Sum + Ord(Chr);

Метки в операторе выбора

Вот ещё одно следствие числового кодирования: любой порядковый тип может служить меткой в операторе CASE-OF-ELSE-END:

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

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

...

Case m of

Jan, Feb, Dcb : Writeln(’Зима’);

Mar..May : Writeln(’Весна’);

Jul..Aug : Writeln(’Лето’);

Sep..Nov : Writeln(’Осень’);

end;

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

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

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

Итоги

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

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

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

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

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

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

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

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

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

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

А слабо?

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

Writeln( SizeOf( LongInt ) ); { 4 }

Writeln( SizeOf( M1 ) ); { 1 }

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

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

Поделиться:
Популярные книги

Город Богов 3

Парсиев Дмитрий
3. Профсоюз водителей грузовых драконов
Фантастика:
юмористическое фэнтези
городское фэнтези
попаданцы
5.00
рейтинг книги
Город Богов 3

Вернуть Боярство

Мамаев Максим
1. Пепел
Фантастика:
фэнтези
попаданцы
5.40
рейтинг книги
Вернуть Боярство

Газлайтер. Том 5

Володин Григорий
5. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 5

Маршал Советского Союза. Трилогия

Ланцов Михаил Алексеевич
Маршал Советского Союза
Фантастика:
альтернативная история
8.37
рейтинг книги
Маршал Советского Союза. Трилогия

Стеллар. Заклинатель

Прокофьев Роман Юрьевич
3. Стеллар
Фантастика:
боевая фантастика
8.40
рейтинг книги
Стеллар. Заклинатель

Неверный

Тоцка Тала
Любовные романы:
современные любовные романы
5.50
рейтинг книги
Неверный

Убивать чтобы жить 9

Бор Жорж
9. УЧЖ
Фантастика:
героическая фантастика
боевая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 9

Адвокат вольного города 3

Кулабухов Тимофей
3. Адвокат
Фантастика:
городское фэнтези
альтернативная история
аниме
5.00
рейтинг книги
Адвокат вольного города 3

Шериф

Астахов Евгений Евгеньевич
2. Сопряжение
Фантастика:
боевая фантастика
постапокалипсис
рпг
6.25
рейтинг книги
Шериф

Архил...?

Кожевников Павел
1. Архил...?
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Архил...?

Охотник за головами

Вайс Александр
1. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
5.00
рейтинг книги
Охотник за головами

Надуй щеки! Том 5

Вишневский Сергей Викторович
5. Чеболь за партой
Фантастика:
попаданцы
дорама
7.50
рейтинг книги
Надуй щеки! Том 5

Неудержимый. Книга IV

Боярский Андрей
4. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга IV

Идеальный мир для Лекаря 6

Сапфир Олег
6. Лекарь
Фантастика:
фэнтези
юмористическая фантастика
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 6