Перечисляемый и диапазонный типы данных
Описание перечислений в различных языках. Перечисляемый тип как набор идентификаторов играющих ту же роль, что и именованные константы. Определение диапазонного типа данных в разделах type или var. Использование констант в объявлении интервального типа.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | реферат |
Язык | русский |
Дата добавления | 03.12.2018 |
Размер файла | 18,6 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
[Введите текст]
ПЛАН
1. Перечисляемый типы данных
2. Описание и использование
3. Диапазонный (интервальный) тип данных
4. Описание перечислений в различных языках
5. Реализация
6. Критика
1. ПЕРЕЧИСЛЯЕМЫЕ ТИПЫ ДАННЫХ
Перечисляемый тип (сокращённо перечисление, англ. enumeration, enumerated type) -- в программировании тип данных, чьё множество значений представляет собой ограниченный список идентификаторов.
Перечисляемый тип определяется в виде упорядоченного списка констант, заданных их перечислением. Определение типа может быть в разделе type или var.
• Формат:
Type имя типа = (список значений-констант);
Перечисляемый тип определяется в виде упорядоченного списка констант, заданных их перечислением. Определение типа может быть в разделе type или var.
Формат:
Type имя типа = (список значений-констант);
• Перечисляемый тип определяется как набор идентификаторов, с точки зрения языка играющих ту же роль, что и обычные именованные константы, но связанные с этим типом. Классическое описание типа-перечисления в языке Паскаль выглядит следующим образом:
• type Cardsuit = (clubs, diamonds, hearts, spades);
• Здесь производится объявление типа данных Cardsuit (карточная масть), значениями которого может быть любая из четырёх перечисленных констант. Переменная типа Cardsuit может принимать одно из значений clubs, diamonds, hearts, spades, допускается сравнение значений типа перечисление на равенство или неравенство, а также использование их в операторах выбора (в Паскале -- case) в качестве значений, идентифицирующих варианты.
ПРИМЕР:
Type zvet = (kr, org, gel, zel, gol, sin, fiol);
Var A: zvet;
EFG: (E, F, G); {переменная перечисляемого типа}
Описание типа упорядоченной переменой одновременно упорядочивает ее значение (т.е. kr<org<gel<zel<gol<sin<fiol), поэтому к переменным и константам перечисляемого типа могут применяться операции сравнения: =, <=, >=, <, >, <>.
• К перечисляемым значениям применимы процедуры и функции для работы с порядковыми типами:
Ord, Pred, Succ,
а также некоторые функции преобразования типов:
High, Low, Ord.
2. ОПИСАНИЕ И ИСПОЛЬЗОВАНИЕ
Перечисляемый тип определяется как набор идентификаторов, с точки зрения языка играющих ту же роль, что и обычные именованные константы, но связанные с этим типом. Классическое описание типа-перечисления в языке Паскаль выглядит следующим образом:
type Cardsuit = (clubs, diamonds, hearts, spades);
Здесь производится объявление типа данных Cardsuit (карточная масть), значениями которого может быть любая из четырёх перечисленных констант. Переменная типа Cardsuit может принимать одно из значений clubs, diamonds, hearts, spades, допускается сравнение значений типа перечисление на равенство или неравенство, а также использование их в операторах выбора (в Паскале -- case) в качестве значений, идентифицирующих варианты.
Использование перечислений позволяет сделать исходные коды программ более читаемыми, так как позволяют заменить «магические числа», кодирующие определённые значения, на читаемые имена.
На базе перечислений в некоторых языках могут создаваться типы-множества. В таких случаях множество понимается (и описывается) как неупорядоченный набор уникальных значений типа-перечисления.
Перечисляемый тип может использоваться в объявлениях переменных и формальных параметров функций (процедур, методов). Значения перечислимого типа могут присваиваться соответствующим переменным и передаваться через параметры соответствующих типов в функции. Кроме того, всегда поддерживается сравнение значений перечислимого типа на равенство и неравенство. Некоторые языки поддерживают также другие операции сравнения для значений перечислимых типов. Результат сравнения двух перечислимых значений в таких случаях определяется, как правило, порядком следования этих значений в объявлении типов -- значение, которое в объявлении типа встречается раньше, считается «меньше» значения, встречающегося позже. Иногда перечислимый тип или некоторый диапазон значений перечислимого типа также может быть использован в качестве типа индекса для массива. В этом случае для каждого значения выбранного диапазона в массиве имеется один элемент, а реальный порядок следования элементов соответствует порядку следования значений в объявлении типа.
3. ДИАПАЗОННЫЙ (ИНТЕРВАЛЬНЫЙ) ТИП ДАННЫХ
Представляет собой подмножество значений другого порядкового типа, который называют базовым типом. Позволяет задавать 3 константы, определяющие границы диапазона значений для данной переменной. Диапазонный тип данных может быть задан как интервал ранее определенного перечисляемого или стандартного типа, кроме REAL. Для него применимы все операции и функции исходного (базового) типа.
Диапазонный тип данных можно определить в разделах type или var.
• При объявлении интервального типа указываются нижняя и верхняя границы интервала, т. е. наименьшее и наибольшее значение, которое может принимать переменная объявляемого типа. В общем виде объявление интервального типа выглядит так:
• Тип = Нижняя Граница..Верхняя Граница;
• где:
• тип -- имя объявляемого интервального типа данных;
• Нижняя Граница -- наименьшее значение, которое может принимать переменная объявляемого типа;
• Верхняя Граница -- наибольшее значение, которое может принимать переменная объявляемого типа.
• Формат:
Type имя типа = <const1>..<const2>;
• ПРИМЕР:
Type {определения в разделе Type}
Vrgoda = (vesna, leto, osen, zima);
Sezon = vesna.. osen;
Bukva = `A'..'I';
DlMes = 28..31;
Var Vrem: Sezon;
Sim1,Sim2: Bukva;
L: DlMes;
Var {определения в разделе Var}
X,Y,Z: 1..20;
Sim1,Sim2: `A'..'I';
ПРИМЕРЫ:
TIndex = 0 .. 100; TRusChar = 'А' .. 'я';
В объявлении интервального типа можно использовать именованные константы. В следующем примере в объявлении интервального типа TIndex использована именованная константа HBOUND:
const
HBOUND=100;
type
TIndex=l..HBOUND;
Интервальный тип удобно использовать при объявлении массивов, например, так: идентификатор константа интервальный перечисление
type
TIndex =1 .. 100;
var
tab1 : array[TIndex] of integer; i:TIndex;
Если на одном базовом типе определено несколько интервальных типов, то переменные этих типов можно использовать в одном выражении.
4. ОПИСАНИЕ ПЕРЕЧИСЛЕНИЙ В РАЗЛИЧНЫХ ЯЗЫКАХ
Ada
В языке Ada перечисления задаются с помощью ключевого слова is и последующего списка значений через запятую:
type Cardsuit is (clubs, diamonds, hearts, spades);
C и языки с C-подобным синтаксисомПравить
Первоначальный K&R-диалект C не имел перечисляемых типов, однако они были добавлены в стандарте ANSI C.
enum cardsuit
{
CLUBS,
DIAMONDS,
HEARTS,
SPADES
};
Динамические языки слабой типизации с C-подобным синтаксисом (например perl или JavaScript), как правило, не имеют перечислений.
C++
Перечисления в языке C++ прямо наследуют поведение перечислений языка C, за исключением того, что перечисляемый тип в C++ -- настоящий тип, и ключевое слово enum используется только при объявлении такого типа. Если при обработке параметра являющегося перечислением, какое-либо значение из перечисления не обрабатывается (например один из элементов перечисления забыли обработать в конструкции switch), то компилятор может выдать предупреждение о забытом значении.[2]
C#
enum Cardsuit { Clubs, Diamonds, Spades, Hearts }
Java
В первоначальной Java перечислений не было, вместо них предлагалось использовать классы со статическими константами. Начиная с версии 5 (1.5) перечисления были введены в язык, они представляют собой полноценный класс, в который можно добавлять произвольное количество полей и методов. Перечисления были введены для улучшенного контроля за типобезопасностью.[3]
enum Cardsuit { Clubs, Diamonds, Spades, Hearts }
KotlinПравить
enum class Direction {
NORTH, SOUTH, WEST, EAST
}
Pascall
В некоторых языках программирования (например, в языке Pascall) при помощи Алгебраических типов можно эмулировать перечисления. Например, так кодируется булевский тип, содержащий два идентификатора для представления значений истинности:
data Bool = False
| True
NimПравить
type
enumType = enum
one, two, three
var a: enumType = three
var b = two
echo a > b
ПримечанияПравить
^ Н. Вирт. От Модулы к Оберону
^ Перечисления в C++ (c++ enum types)
^ Enums
Интервальный тип
Интервальный тип является отрезком или частью другого типа, называемого базовым. В качестве базового обычно используют целый тип данных (integer).
При объявлении интервального типа указываются нижняя и верхняя границы интервала, т. е. наименьшее и наибольшее значение, которое может принимать переменная объявляемого типа. В общем виде объявление интервального типа выглядит так:
Тип = НижняяГраница..ВерхняяГраница;
где:
тип -- имя объявляемого интервального типа данных;
НижняяГраница -- наименьшее значение, которое может принимать переменная объявляемого типа;
верхняяГраница -- наибольшее значение, которое может принимать переменная объявляемого типа.
Примеры:
TIndex = 0 .. 100; TRusChar = 'А' .. 'я';
В объявлении интервального типа можно использовать именованные константы. В следующем примере в объявлении интервального типа TIndex использована именованная константа HBOUND:
const
HBOUND=100;
type
TIndex=l..HBOUND;
Интервальный тип удобно использовать при объявлении массивов, например, так:
type
TIndex =1 .. 100;
var
tab1 : array[TIndex] of integer; i:TIndex;
Помимо целого типа в качестве базового можно использовать перечисляемый тип, созданный программистом. В следующем фрагменте на основе типа TMonth объявлен интервальный тип TSammer:
type
TMonth = (Jan, Feb, Mar, Apr, May, Jun,
Jul, Aug, Sep, Oct, Nov, Dec);
TSammer = Jun.. Aug;
5. РЕАЛИЗАЦИЯ
Обычно в процессе компиляции значения перечислений представляются при помощи целых чисел. В зависимости от конкретного языка программирования такое представление может быть либо полностью скрыто от программиста, либо доступно ему с помощью тех или иных «обходных манёвров» (например, принудительного преобразования значения типа перечисление к значению типа «целое число»), либо даже управляемо программистом (в таких случаях программист имеет возможность явно указать, какими числами будут кодироваться все или некоторые значения типа-перечисления). У всех вариантов есть свои положительные и отрицательные стороны. С одной стороны, возможность использования числовых значений констант, составляющих тип-перечисление, особенно при злоупотреблении ею, лишает смысла использование этих типов и создаёт опасность появления ошибок (когда используются числовые значения, для которых в типе нет соответствующих констант). С другой стороны, явное управление значениями даёт некоторые дополнительные возможности. Например, позволяет использовать типы-перечисления при организации интерфейса с модулями, написанными на других языках, если они используют или возвращают кодированные целыми числами значения из некоторого предопределённого набора.
Ещё одна возможность, которую дают перечислимые типы на уровне реализации языка -- экономия памяти. При небольшом объёме типа-перечисления для хранения значения этого типа достаточно нескольких битов (вышеприведённый тип Cardsuit требует всего два бита на значение, в то время как стандартное целое число на большинстве используемых архитектур занимает 32 бита -- в 16 раз больше), и компилятор может использовать этот факт для уплотнения хранения данных в памяти. Это может быть особенно важно, если несколько значений типов-перечислений хранятся в одной записи -- уплотнение записей при обработке больших их количеств может освободить много памяти. Правда, необходимо отметить, что компиляторы обычно не реализуют эту возможность, по крайней мере, в последнее время, когда компьютерная память существенно подешевела.
6. КРИТИКА
Тип перечисление является традиционным для развитых языков программирования, используется достаточно широко и часто воспринимается как нечто само собой разумеющееся. Тем не менее, этот тип также не обходится без критики со стороны теоретиков и практиков программирования. Так, при разработке языка программирования Оберон перечислимые типы попали в список возможностей, которые были удалены из языка. Никлаус Вирт, разработчик языка, назвал следующие причины:
«во всё возрастающем числе программ непродуманное использование перечислений … приводит к демографическому взрыву среди типов, что, в свою очередь, ведёт не к ясности программ, а к многословию»[1];
когда тип перечисление экспортируется модулем (то есть становится частью интерфейса) нарушается общее правило -- команда экспорта типа экспортирует одновременно все его элементы, тогда как для всех остальных типов экспорт типа скрывает его внутреннюю структуру;
с точки зрения обеспечения удобочитаемости программ ничто не мешает вместо перечислимого типа использовать просто группу совместно определённых именованных констант, особенно при наличии таких языковых механизмов, как модули или классы.
С другой стороны, например, в Java, первоначально не содержащей перечислимого типа, этот тип был впоследствии введён из соображений не только удобства, но и надёжности: проблема использования вместо перечислений групп именованных констант в том, что отсутствует контроль со стороны компилятора как за уникальностью значений констант, так и за возможностью случайного присваивания переменным значений, не соответствующих ни одной из этих констант.
Размещено на Allbest.ru
Подобные документы
Вычисление значения функции с помощью программирования. Рабочий набор исходных данных. Таблица идентификаторов, текст программы, контрольный расчет. Подключение модуля, объявление константы и переменных вещественного типа. Шаг изменения аргумента.
контрольная работа [118,4 K], добавлен 28.09.2012Основные принципы концепции типа данных в языках программирования. Разновидности структур данных. Дискретные и непрерывные скалярные типы. Файл, последовательность, множество. Линейный список. Сложность алгоритмов. Построение рекурсивных подпрограмм.
презентация [2,5 M], добавлен 14.10.2013Сущность понятия "тип данных". Объектно-ориентированный стиль программирования. Простые типы данных в языке Паскаль: порядковые, вещественные, дата-время. Булевский (логический) тип. Синтаксис определения ограниченного типа. Регулярные типы (массивы).
реферат [24,1 K], добавлен 01.12.2009Иерархия типов данных. Определение понятий "указатель", "массив". Получение количества машинных слов, отведенных под каждый тип данных. Проверка программы на переполнение типа int. Анализ заданных выражений на предмет из синтаксической корректности.
лабораторная работа [176,6 K], добавлен 07.06.2014Создание базы данных, содержащей сведения о напильниках. Вывод данных об инструменте, номер насечки которых равен 2.Использование переменных типа "запись" при работе с базами данных. Решение задачи с использованием Microsoft Excel. Алгоритм программы.
курсовая работа [33,3 K], добавлен 08.03.2013Изучение существующих методов и программного обеспечения для извлечения числовых данных из графической информации. Программное обеспечение "graphtrace", его структура и методы обработки данных. Использование этой системы для данных различного типа.
дипломная работа [3,9 M], добавлен 06.03.2013Создание базы данных и СУБД. Структура простейшей базы данных. Особенности языка программирования Турбо Паскаль. Описание типов, констант, переменных, процедур и функций. Описание алгоритма базы данных (для сотрудников ГИБДД), листинг программы.
курсовая работа [26,3 K], добавлен 26.01.2012Разработка информационной системы, выбор языка программирования, физическое описание базы данных, выбор типа и описание таблиц базы данных. Техническое проектирование, ограничения и значения по умолчанию, представления, хранимые процедуры и триггеры.
курсовая работа [519,8 K], добавлен 25.05.2010Организация деятельности туристического оператора. Описание фирмы и учётной системы. Введение единого учёта данных. Разработка констант, перечислений, справочников, документов, регистров накопления, отчётов, интерфейса. Формирование новых туров.
курсовая работа [1,5 M], добавлен 13.01.2015Понятие и особенности технологий распределенных и параллельных систем управления базами данных, их отличительные черты, схожие признаки. Уникальная роль системы каждого типа и их взаимодополняемость при использовании для решения задач управления данными.
курсовая работа [839,2 K], добавлен 24.05.2012