Таблица порядковых типов

image052.gif

Встроенный порядковый тип

Встроенный порядковый тип определяет все порядковые типы, свойства которых (диапазон значений, определение и т.д.) четко зафиксированы и не могут быть изменены программистом.

Целочисленный тип

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

Таблица свойств целочисленных типов данных:

Целочисленный тип

Диапазон возможных значений

Объем занимаемой памяти

Целочисленные типы

Shortint

-128 .. 127

1 байт

Integer

-32768 .. 32768

2 байта

Longint

-2147483648 .. 2147483647

4 байта

Неотрицательные типы

Byte

0 .. 255

1 байт

Word

0 .. 65535

2 байта

С помощью функции ODD можно определить, является ли целочисленное значение четным или нет. Функция возвращает True, если значение, переданное ей, нечетно.

function Odd(X: Longint): Boolean;.

Например:

Begin

Writeln(odd(10));

Writeln(odd(15));

End.

В результате работы этой программы на экране появится:

FALSE

TRUE

Логический тип

Логический тип определяется зарезервированным словом boolean и имеет только 2 значения - TRUE(истина) и FALSE(ложь). Переменные логического типа - основа булевой алгебры, и все законы преобразований на основе логических операций (см. приложение и параграф 1.4.3.2) верны и в Турбо-Паскале. С их помощью можно легко, например, заменить цикл с предусловием на цикл с постусловием (если конечно предусловие не является определяющей причиной использования цикла While) и наоборот, сократить логическое выражение и т.д.

Например:

1) Используя правило де Моргана (см. приложение), цикл

while not(d>5)or not (x<d) do …;

можно заменить на цикл

repeat … until (d>5)and (x<d);

2) Значение логического выражения (x>5)or(x=5) and (not (x>=5)) равно false вне зависимости от значения x.

Переменным логического типа можно присваивать произвольные логические выражения.

Например:

var a, b: boolean;

x, y: integer;

begin

a:=(x>7)or not(y<x) and (y<>0);

b:=a or (x=y);

a:=b and a;

end.

При переводе логического значения в целочисленное, для false мы получим число 0, для true - 1. При обратном переводе значение 0 преобразуется в false, любое другое значение - в true. Для значений логического типа всегда верно условие: TRUE>FALSE.

Например: процедура writeln(true<=false) выведет на экран слово FALSE.

Символьный тип

Любая переменная символьного типа может содержать в себе один из 256 символов набора ASCII. Объем памяти, занимаемый переменными этого типа, составляет 1 байт. Правила построения констант символьного типа соответствуют правилу построения строковых констант (см. параграф 1.3.2.7) с одним символом. Все операции, допустимые для строк, могут быть использованы и для типа Char.

Специально для символьного типа существует функция Chr, которая осуществляет перевод однобайтового значения в тип Char.

function Chr(X: Byte): Char;

Таким образом можно легко получить символьное представление любого числа.

Пример:

Var a:byte;

begin

repeat

readln(A);

writeln(chr(A));

until a=0;

end.

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

С помощью функции Ord можно создать программу, которая будет выводить на экран код введенного символа. При этом вместо процедуры Readln удобно воспользоваться функцией ReadKey (см. параграф 1.5.2).

Uses crt; {подключение модуля, который содержит

функцию readkey}

Var c:char;

begin

repeat

c:=readkey;

writeln(ord(c));

until c=#27;

end.

Выполнение программы закончится, когда пользователь нажмет на клавишу ESC (код 27). Запустив и немного поэкспериментировав с программой, можно заметить, что некоторые клавиши (например - клавиши курсора) имеют двухбайтовый код. Этот нюанс следует учитывать, разрабатывая программы, которые основаны на анализе вводимой с клавиатуры информации.

Перечислимый тип

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

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

Перечислимый_тип::= "(" ИД {"," ИД} ")"

Например: тип week (неделя) может быть описан с помощью семи значений: monday, tuesday, wednesday, thursday, friday, saturday, sunday.

Определяем тип Week:

type Week=(monday, tuesday, wednesday, thursday, friday, saturday, sunday);

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

Согласно этому правилу monday является константой типа Week.

Размер памяти, отводимый для перечислимого типа, зависит от количества констант, определяющих данный тип, и может быть 1, 2 или (что совершенно невероятно!) 4 байта.

Создавая, например, на ТП компилятор или интерпретатор какого-либо алгоритмического языка, часто определяют перечислимый тип, в качестве имен констант которого служат аббревиатуры зарезервированных слов языка. Естественно, что таких слов может быть более 256, и тогда под переменную данного типа будет выделяться 2 байта оперативной памяти. Однако ситуация, когда количество констант начнет превышать число 65536 (то есть под переменную будет отведено не 2, а 4 байта) практически невозможна.

Тип поддиапазона

Тип поддиапазона используется, когда программисту для решения задачи требуется не весь диапазон значений какого-либо порядкового типа, а только его часть. Таким образом, тип поддиапазона определяется как диапазон значений некоторого порядкового типа (главного типа), причем определение поддиапазона включает наименьшее и наибольшее значения из этого типа.

Тип_поддиапазона::=константа .. константа.

Например:

0 .. 100

-139 .. 34

0 .. 24

Tuesday .. Saturday

Объем памяти, выделяемый для типа поддиапазона может быть 1, 2 или 4 байта в зависимости размера диапазона.

Чаще всего тип поддиапазона применяется при объявлении массивов (см. параграф 1.7.2.1).

Свойства порядковых типов

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

Получение порядкового номера

function Ord(X): Longint;

Значение порядкового типа характеризуется порядковым номером. Первое значение любого порядкового типа, кроме целочисленных, имеет порядковый номер 0, следующее - 1, и т.д. Порядковый номер значения целочисленного типа равен самому этому значению. Функция Ord осуществляет перевод значения любого порядкового типа в его порядковый номер.

Получение предыдущего и последующего значений
порядкового типа

function Pred(X: порядковый_тип): тот_же_тип;

Функция Pred возвращает предыдущее значение аргумента. Если X - первое значение порядкового типа (нижняя граница), то выдается сообщение об ошибке.

function Succ(X: порядковый_тип): тот_же_тип;

Функция Pred возвращает последующее значение аргумента. Если X - последнее значение порядкового типа (верхняя граница), то выдается сообщение об ошибке.

Увеличение и уменьшение значений переменных
порядкового типа

procedure Inc(var X [ ; N: Longint ]);

Процедура Inc увеличивает переданное ей значение X на N. Если N отсутствует, то X увеличивается на 1 (т.о. Inc(x,n) эквивалентно x:=x+n, а Inc(x) эквивалентно x:=x+1).

procedure Dec(var X [ ; N: Longint ]);

Процедура Dec уменьшает переданное ей значение X на N. Если N отсутствует, то X уменьшается на 1 (т.о. Dec(x,n) эквивалентно x:=x-n, а Dec(x) эквивалентно x:=x-1).

Пример использования функции Ord:

1) begin Writeln(ord(true),' ',ord(false)); End.

В результате выполнения программы на экране появятся числа 1 и 0.

2) При рассмотрении перечислимого типа мы определили тип Week:

type Week=(monday, tuesday, wednesday, thursday, friday, saturday, sunday);

Функция ord(monday) возвратит 0, ord(tuesday) - 1 и т.д.


Задача 23. Определить сумму цифр натурального числа.

var N,i,s:integer;

begin

readlnno;{вводим натуральное число}

s:=0; {первоначальное значение суммы}

while n<>0 do begin {пока число не обратилось в 0}

i:=n mod 10; {находим последнюю цифру числа}

inc(s,i);{увеличиваем сумму на эту цифру}

n:=n div 10; {уменьшаем число в 10 раз, чтобы добраться до следующей цифры}

end;

writeln(s);

readln;

end.

<- Предыдущая страница | Следующая страница ->
Последнее изменение: Вторник 1 Март 2011, 16:57