русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

П Е Р Е Ч И С Л Я Е М Ы Й Т И П Д А Н Н Ы Х


Дата добавления: 2014-11-27; просмотров: 560; Нарушение авторских прав


 

Прежде чем описывать перечисляемый тип данных, рассмотрим способы задания допустимых значений для ординальных типов byte, char и boolean.

В типе byte допустимыми значениями являются числа 0, 1, ..., 255; в типе char - символы таблицы ASCII с номерами #0, #1, ..., #255. Внутримашинным представлением типа char являются однобайтные числа от 0 до 255, т.е. на машинном уровне значения типов byte и char ничем друг от друга не отличаются.

Допустимыми значениями типа boolean являются предописанные слова false и true, причем считается, что false < true. Внутримашинным представлением этих слов являются числа 0 и 1 длиной один байт.

Следовательно, значениями типа byte на уровне Паскаль-программы являются числовые константы, типа char - символьные константы, а типа boolean - имена логических констант. Другими словами, типу boolean ставятся в соответствие имена констант, а типам byte и char - значения констант. На машинном уровне всем им соответствуют однобайтные числа.

Способ, аналогичный по отношению к типу boolean, когда допустимый набор значений определяется путем перечисления имен констант, используется в перечисляемом типе данных для объявления новых ординальных типов.

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

Синтаксическая диаграмма:

 

 
 

 


Пример 1.

Type Color = (White,Red,Blue,Yellow,Green,Gray,

Orange,Brown,Black);

Operator = (Plus,Minus,Times,Divide);

Metall = (Fe,Cu,Al,Sn,Pb,Ni,Mo,Zn,Ag,Au,Pt,Na);

 

На машинном уровне константы White, Red, ..., Black имеют значения 0, 1, ... , 8, константы Plus .. Divide - значения 0 .. 3, константы Fe .. Na - значения 0 .. 11 .

 

Если мы объявим

Var R,C : Color;



то переменные R и C могут принимать в программе лишь одно из перечисленных в разделе Typeзначений. Например:

C:=Blue; R:=Black.

 

Это в основном аналогично следующему:

 

Const White = 0; Red = 1;

Blue = 2; Yellow = 3;

Green = 4; Gray = 5;

Orange = 6; Brown = 7;

Black = 8;

VarR,C : byte;

Begin C:=Blue; R:=Black .

 

Другими словами, значения перечисляемого типа - это синонимы констант.

 

В последнем примере можно было бы написать

C:=2; R:=8.

В предыдущем примере это считалось бы ошибкой.

 

Неверные определения:

TypeWeek = (Mon,Tue,Wed,Thu,Fri,Sat,Sun);

FreeDay = (Sat,Sun);

Здесь одна и та же константа с именем Sat должна иметь в программе различные значения (на машинном уровне 5 и 0); такое же замечание относится к константе Sun.

Это аналогично тому, что было бы в разделе констант при таком объявлении:

Const Sat = 5;

Sat = 0;

 

Тип boolean также можно объявить перечисляемым:

Type boolean = (false,true) .

Следовательно, false и true - это имена констант, но они предопределены в Паскаль-программе.

 

Ко всем перечисляемым типам применимы операции отношения, а также предописанные функции pred, succ, ord.

 

Пример 2.

false < true

Plus >= Minus

pred(Blue) = Red

ord(Blue) = 2

 

Могут быть операторы вида

For c:=White to Black do S .

 

Это эквивалентно операторам

For i:=ord(White) to ord(Black) do S

 

или

Fori:=0 to6 do S .

 

Здесь S - произвольный оператор.

 

Как уже было отмечено, между значениями перечисляемого типа и порядковыми номерами этих значений установлено однозначное соответствие: первое значение в списке получает порядковый номер 0, второе - 1 и т.д. Максимальная мощность перечисляемого типа - 256 значений, поэтому фактически перечисляемый тип задает некоторое подмножество целого типа byte.

 

Пусть нам заданы следующие типы:

TypeColors = (Black,Red,White);

Ordinal =(One,Two,Three);

Days = (Monday,Tuesday,Wednesday);

 

С точки зрения мощности и внутреннего представления все три типа эквивалентны:

ord(Black)=0; ord(Red)=1; ord(White)=2;

ord(One)=0; ord(Two)=1; ord(Three)=2;

ord(Monday)=0; ord(Tuesday)=1; ord(Wednesday)=2.

 

Однако, если определены переменные

VarCol : Colors;

Num : Ordinal;

Day : Days;

 

то допустимы операторы

Col:=Black; Num:=Two; Day:=Wednesday;

 

но недопустимы

Col:=One; Num:=Tuesday; Day:=White.

 

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

 

Непосредственно вводить и выводить значения переменных перечисляемого типа нельзя. Это связано с тем, что в машинной программе отсутствует связь между именем перечисляемой константы и ее численным значением (в машинной программе значения перечисляемых переменных - это числа, в Паскаль-программе - имена констант). Однако ввод указанного типа переменных возможен, если использовать аппарат приведения типов переменных. Вывод также можно организовать косвенным образом.

 

Пример 3.

TypeColors = (Black,Blue,Green,Red,Brown,Yellow,White);

Var k : byte;

Col : Colors;

Begin

Readln(k);

Col:=Colors(k);

CaseCol of

Black : Writeln('Black');

Blue : Writeln('Blue');

Green : Writeln('Green');

Red : Writeln('Red');

Brown : Writeln('Brown');

Yellow : Writeln('Yellow');

White : Writeln('White');

end;

End.

Значение переменной k, вводимой в программе, не должно превышать мощность типа Colors, т.е. это значение должно быть в диапазоне от 0 до 6.

 

 



<== предыдущая лекция | следующая лекция ==>
ОПРЕДЕЛЕНИЕ БИТОВОЙ СТРУКТУРЫ ПОЛЯ ПАМЯТИ | З А П И С И


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

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