русс | укр

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

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

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

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


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

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


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


Порядковыми (ordinal) называются типы, которым соответствуют данные, поддерживающие понятия «предшествующее значение» и «последующее значение». Например, для целого числа 5 можно определенно сказать, что ему предшествует число 4, а следующее за ним - число 6. С другой стороны невозможно сказать, какое число непосредственно предшествует вещественному числу 5.0.

В Object Pascal определены следующие порядковые типы:

– целые типы;

– символьные типы;

– булевы типы;

– ограниченные типы.

Для порядковых типов определен ряд функций, которые отражают специфику этих данных. Перечень этих функций приведен в таблице 6.1.

Таблица 6.1 – Функции для порядковых типов данных

Функция Возвращаемое значение Пример
Succ(<значение >) Возвращает следующее значение Succ(123) = 124 Succ(false) = true Succ(‘я’) = #0
Pred(<значение >) Возвращает предыдущее значение Pred(‘я’) = ‘ю‘ Pred(#0) = ‘я’
Ord(<значение>) Возвращает целое число, соответствующее номеру <значения> во множестве возможных значений типа. Ord(123) = 123 Ord(-123) = -123 Ord(‘я’) = 255 Ord(#0) = 0
High(<имя переменной>) High(<значение>) High(<тип>) Возвращает максимальное значение для данных типа High(‘x’)= ‘я’ High(char)= ‘я’ High(integer) =2147483647

Продолжение таблицы 6.1

Low(<имя переменной>) Low(<значение>) Low(<тип>) Возвращает минимальное значение для данных типа Low(‘x’)= #0 Low(integer)= ‑2147483648

 

6.1.1.1 Целые типы данных

Целые типы данных используются для представления целых чисел. Типами, обеспечивающими максимальную производительность, являются Integer и Cardinal. Оба типа занимают в памяти 4 байта и принимают значения в дапазоне: для Integer -2147483648..2147483647, для Cardinal 0..4294967295. В тех случаях, когда нужен больший диапазон чисел, можно использовать тип int64.



Следует помнить, что арифметические операции с целыми числами имеют свои особенности. Для деления используется операция div, которая выполняет целочисленное деление. Остаток от целочисленного деления на некоторое целое число можно найти с помощью операции mod.

Для целочисленных данных можно использовать и логические операции, такие как and, or, xor. Результат будет определяться применением соответствующей операции к каждой паре соответствующих бит двоичного представления чисел. При выполнении таких операций часто используют 16-ричное представление чисел. Признаком 16-ричного числа является знак $ перед числом, например $FF соответствует десятичному числу 255, а $100 соответствует десятичному числу 256.

Можно применять и операции сдвигов двоичных кодов числа влево (shl) или вправо (shr) на заданное число разрядов. Сдвиг вправо на один разряд соответствует целочисленному делению числа на 2. Сдвиг влево на один разряд соответствует умножению на 2. Например, в результате выполнения инструкции $FF shr 4, получим результат $0F.

6.1.1.2 Символьные типы данных

Символьные типы предназначены для представления символов. В Object Pascal можно использовать две разновидности символов:

– Типу Char соответствует множество из 256 символов, в котором символы упорядочены в соответствии с таблицей кодировки ANSI (American National Standard Code for Information Interchange). Каждый символ этого типа занимает 1 байт. Соответствие между кодом и соответствующим ему символом задается так называемой таблицей кодировки символов. Первая половина таблицы (коды от 0 до 127) используется для управляющих символов, цифр, латинских букв и наиболее распространенных символов, таких, как знаки препинания, знаки математических операций и т.п. Вторая половина таблицы (коды от 128 до 255) используется для национальных алфавитов и других символов.

– Типу WideChar соответствует множество символов Unicode, в котором каждый символ занимает 2 байта, и естественно, эта таблица символов может содержать очень большой список символов. Им соответствуют коды в диапазоне от 0 до 65535. Первые 256 символов в этом множестве соответствуют символам ANSI с соответствующими кодами.

В наших лабораторных работах мы будем использовать только типChar. Фрагмент таблицы кодировки символов представлен ниже, в таблице 6.2.

Таблица 6.2 – Кодировка некоторых символов ANSI

Символ Код Двоичное представление 16-ричное представление
Отсутствие символа 0000 0000 $00
Пробел 0010 0000 $20
! 0010 0001 $21
     
0011 0000 $30
0011 0001 $31
0011 0010 $32
0011 0011 $33
     
A 0100 0001 $41
B 0100 0010 $42
C 0100 0011 $43
       
a 0110 0001 $61
b 0110 0010 $62
     
А $C0
Б $C1
     
а 1110 0000 $E0
б 1110 0001 $E1
     
я 1111 1111 $FF

 

Обратите внимание на порядок расположения символов в таблице. Такой порядок позволяет упорядочивать слова и идентификаторы в алфавитном порядке с помощью кода символа.

Символьные константы можно записывать разными способами. Для большинства символов можно использовать изображение этого символа, заключенное в одинарные кавычки. Например, ‘1’, ‘z’, ‘*’. Специальные символы удобно представлять с помощью их кода, в виде целого числа, которому предшествует знак #. Например, #0, #8, #13. Кроме того, любой символ может быть получен с помощью функции chr(), которой в качестве аргумента передается код символа. Например, chr(65) возвращает прописную латинскую букву ‘A’, а chr(255) – строчную букву ‘я’ кириллицы.

Обратное преобразование, то есть преобразование символа в код можно выполнить с помощью функции ord(). Например, ord(‘0’) вернет 48.

При вводе отдельных символов из компонентов класса TEdit, необходимо иметь в виду, что свойство text этих компонентов возвращает не символ, а строку символов. Чтобы получить отдельный символ этой строки следует использовать порядковый номер символа в строке, записывая его в квадратных скобках после имени строки символов. Например, Edit1.text[1].

Для символов применимы все операции сравнения. При этом сравниваются коды символов. Поэтому ‘б’ > ’Б’, и ‘а’ кириллицы больше, чем латинское ’a’.

Группы символов, которые соответствуют буквам, расположены таким образом, чтобы упростить преобразование больших букв в маленькие и наоборот. Разница в кодировке больших и маленьких букв и латинского и русского алфавита равна $20 или 32. Следовательно, чтобы превратить строчную букву в прописную, достаточно из ее кода вычесть 32. Число 32 можно и не помнить, так как его можно получить в результате вычитания кода прописной буквы из кода соответствующей строчной. Например, ord(z) – ord(Z), или оrd(a) – ord(A).

Особенность кодировки цифр состоит в том, что младший полубайт символа цифры соответствует ее числовому значению в двоичном представлении. Это позволяет легко преобразовывать код символа цифр в соответствующие числа с помощью логической операции and и маски $0F. Например, в результате операции ord(‘5’) and $0F получится число 5.

Для преобразования символов цифр в соответствующие числа можно использовать тот факт, что символы цифр следуют в таблице кодировки друг за другом в порядке возрастания значений этих цифр.

Ниже приведено два варианта такого преобразования.

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

var c : char; n : integer;

n := ord(c)- 48; // что равносильно ord(c) –ord(‘0’);

Второй вариант такого преобразования использует операцию and $0F с маской $0F.

 

const maska = $0F; // константа равная двоичному числу 00001111

var c : char; n : integer;

n := ord(c) andmaska; // маска удаляет старший полубайт

6.1.1.3 Ограниченный тип данных.

Для порядковых типов можно задать поддиапазон их возможных значений – это и будет ограниченный тип.

Диапазон значений ограниченного типа задается выражением вида: <минимальное значение>..<максимальное значение>.

Например:

type TCaps = ‘A’..‘Z’;

var bigLetter : TCaps; month : 1..12;

В этих примерах переменная bigLetterможет принимать только символы латинских букв в верхнем регистре, а переменная month значения от 1 до 12.

Ограниченные типы используются, например, при объявлении массивов.

В компиляторе Object Pascal имеется опция, позволяющая включить проверку диапазона при присваивании значения переменной ограниченного типа – {$R+}. Её можно включить в том месте вашей программы, где нужно начать проверку диапазона, и выключить в любом месте опцией {$R-}. При попытке присвоить переменной ограниченного типа значение, выходящее за пределы заданного поддиапазона, сгенерируется исключение с сообщением “Range check error”.

Интервальный тип можно использовать для задания множества данных этого типа путем заключения интервала в квадратные скобки. Например, множество сточных русских букв можно задать таким образом ['а'..'я']. Для определения принадлежности некоторого символа к определенному таким образом множеству можно использовать операцию in, которая возвращает true, если символ принадлежит множеству и false – если не принадлежит. Например, результатом вычисления выражения ‘5’ in[‘0’..’9’], будет true.



<== предыдущая лекция | следующая лекция ==>
Создание процедур и функций | Применение инструкции цикла FOR


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


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

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

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


 


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

 
 

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

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