Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Действия над порядковыми типами




END.

BEGIN

END.

BEGIN

Otpravlenie:=22;

Pribitie:=Otpravlenie+10;

WriteLn(Pribitie)

Эта программа вместо ответа “8” напечатает ответ “32” и ошибки не заметит. Паскаль не знает, что имеют смысл только те значения переменной Pribitie, которые находятся в диапазоне от 0 до 24. Это должен был знать программист, но он тоже не обратил на это внимания. Хотелось бы, чтобы Паскаль вместо выдачи неправильного ответа напоминал забывчивым программистам, что переменная вышла из имеющего смысл диапазона. Для этого программист должен иметь возможность этот диапазон Паскалю указать. Такую возможность дает применение диапазонов(ограниченных типов).

Вот программа, обнаруживающая собственную ошибку:

VAR Otpravlenie, Pribitie: 0..24;

Otpravlenie:=22;

Pribitie:=Otpravlenie+10;

WriteLn(Pribitie)

Конструкция VAR Otpravlenie, Pribitie: 0..24 означает, что переменные Otpravlenie и Pribitie имеют право принимать значения целых чисел в диапазоне от 0 до 24.

Паскаль будет обнаруживать выход за диапазон только в том случае, когда вы установите флажок (крестик) в Options ®Compiler…®Compiler Options®Runtime Errors в положение Range Checking (см. часть IV – «Обзор популярных команд меню»).

Диапазон можно задавать для любого порядкового типа, например:

VAR Month:(january, february, march, april, may, june, july, august, september, october, november, december);

Spring:march..may;

Autumn:september..november;

tsifra:0..9;

Zaglavnie:’А’..’Я’

Диапазон является одним из видов порядковых типов.

Задание 108: Известны дата и время (месяц, день, час, минута) отплытия теплохода летом этого года из Москвы в Астрахань. Известно время в пути (в днях, часах и минутах). Оно не превышает 20 суток. Определить дату и время прибытия теплохода в Астрахань. Использовать диапазоны.

Вариант 1: Для простоты предположим, что путешествие начинается между 1 и 10 июня.

Вариант 2. Путешествие начинается в любой день лета. Определите еще и дни недели отправления и прибытия, если известно, какой день недели был 1 июня.

Напомню, что порядковыми типамиданных в Паскале называются следующие типы: целочисленные типы, Boolean, Char, перечислимый тип и диапазон.

Как видите, сюда не входят вещественные типы и String.

Порядковый тип - это такой тип, все значения которого можно перечислить, посчитать с начала до конца. Например, в тип Byte входит всего 256 различных значений, а именно все целые числа от 0 до 255. В тип Integer входит 65536 значений - целые числа от -32768 до 32767. Тип Char тоже порядковый, так как количество различных символов в Паскале ограничено числом 256.

Любой порядковый тип имеет внутреннюю нумерацию. Пусть мы задали тип TYPE weekday = (mon,tu,we,th,fr). Внутри компьютера mon будет иметь номер 0, tu - номер 1, we - 2, th - 3, fr - 4. Пусть мы задали переменную VAR a: array[mon..fr] of Real. Теперь для компьютера запись a[we] означает то же, что и запись a[2], если заранее была бы задана переменная VAR a: array[0..4] of Real.

Тип Char имеет нумерацию от 0 до 255. Внутренний номер символа есть его код по таблице кодировки ASCII. Например, буква Б имеет номер (код) 129.

У целочисленных типов (Byte, ShortInt, Word, Integer, LongInt) внутренний номер совпадает с самим числом. Так, число -58 в типе ShortInt имеет номер -58.

Внутренний номер элемента диапазона равен внутреннему номеру элемента типа, для которого создан диапазон. Пусть мы для типа weekday создали диапазон TYPE days = we.. fr. Здесь we будет иметь номер 2, а не 0.

 

Операции над порядковыми типами:

1. ORD. Эта функция выдает (или, как еще говорят - возвращает) внутренний номер значения любого порядкового типа. Например:

Ord('Б') возвращает 129

Ord (we) возвращает 2

Ord(-58) возвращает -58

2. В любом порядковом типе выполняются операции сравнения > < >= <= = <>. Например, справедливы неравенства 'ю' < 'я', we > tu. Это возможно потому, что операции сравнения выполняются фактически не над самими значениями, а над их внутренними номерами.

3. SUCC - сокращение от successor (следующий по порядку). Эта функция возвращает следующий по порядку элемент любого порядкового типа. Например:

Succ (8) возвращает 9

Succ('Ю') возвращает 'Я'

Succ (we) возвращает th

4. PRED - сокращение от predecessor - это successor "наоборот". PRED возвращает предыдущий элемент любого порядкового типа. Например:

Pred (25) возвращает 24

Pred('д') возвращает 'г'

Pred (tu) возвращает mo

 

Эти функции, как и любые другие, можно применять в выражениях. Например, оператор y:=10+Ord(we)+Succ(8) присвоит переменной y значение 21.

В операторе for переменная цикла может быть любого порядкового типа, например:

for ch:= 'd' to 'h' do...

 

Задание 109: Подсчитать, сколько заглавных букв в диапазоне от Б до Ф.

Задание 110: Правда ли, что сентябрь наступает позже июля?

Задание 111: В кондитерском магазине стоит очередь за Сникерсами. В очереди - Nina, Olga, Alex, Marianna, Ester, Misha, Tolik, Lena, Oleg, Anton, Pankrat, Robocop, Dima, Donatello, Zina, Sveta, Artur, Ramona, Vera, Igor, Ira. Известно, сколько у каждого денег. Спрашивается:

1) Хватит ли у них всех вместе денег на Сникерс (3 рубля)?

2) Какой по порядку в очереди стоит Лена?

3) Правда ли, что у Панкрата денег больше, чем у Миши?

Указание: для хранения денег организовать массив.

 




Поделиться с друзьями:


Дата добавления: 2014-12-27; Просмотров: 355; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.017 сек.