2.5. Целый тип
Диапазон представления данных целого типа:
-(maxint+1) .. maxint,
где maxint - заранее предопределенная константа, значение которой зави-сит от конкретной реализации. Так, например, в системах с двухбайтовым целым maxint = 32767. Имя maxint может использоваться в програм-мах без дополнительного описания в указанном выше смысле.
Для данных целого типа определены операции:
* - умножение,
DIV, MOD - деление,
+ - сложение,
- - вычитание.
Умножение и деление - старшие, сложение и вычитание - младшие операции.
Операция DIV дает целую часть от деления, например: 17 DIV 3 = 5 .
Операция MOD определяется следующим образом: a MOD b = a - ((a DIV b)*b), т.е. результат есть остаток от деления a на b.
Правила знаков для операций деления следующие. a DIV b : + , если знаки a и b одинаковые, - , если знаки a и b разные. a MOD b : совпадает со знаком а .
В текстах программ составные символы DIV , MOD следует выделять пробелами слева и справа.
К данным целого типа применима операция деления "/" (косая черта), однако результат будет уже вещественного типа.
Результат целого типа дают функции Trunc и Round при примене-нии их к данным вещественного типа. Функции Abs и Sqr также дают ре-зультат целого типа, но только в том случае, если их аргументы целого типа.
В языке Турбо Паскаль имеется группа целых типов, характеристики которых приведены в табл.2.2.
Таблица 2.2
Целые типы в Турбо Паскале
-
Обозначение типа
Диапазон значений
Размер памяти (байт)
shortint
-128 .. 127
1
integer
-32728 .. 32767
2
longint
-2147483648 .. 2147483647
4
byte
0 .. 255
1
word
0 .. 65535
2
Имеющийся тип comp с диапазоном -263..263-1 обрабатывается по правилам вещественного типа, но не может содержать дробной части.
Значения целых типов могут изображаться как в обычной (десятич-ной) форме, так и в шестнадцатеричной. В последнем случае шестнадцате-ричным цифрам 0,1..9,A,B,C,D,E,F должен предшествовать символ $ , например
$C1 = 12×161 + 1 = 193 .
Пример 2.5.1. Время, заданное целым количеством секунд, выразить в часах, минутах, секундах. PROGRAM Timer;
VAR tim,hour,min,sec,t : integer;
BEGIN
Write('Время в секундах = ? '); ReadLn(tim);
hour:=tim DIV 3600; { часы }
t:=tim MOD 3600;
min:=t DIV 60; { минуты }
sec:=t MOD 60; { секунды }
WriteLn('время = ', hour, ' час ', min,
' мин ', sec, ' сек')
END.
Пример 2.5.2. Определить, к какому значению: -1,0 или 1 ближе значение функции sinx . PROGRAM Sn;
VAR x : real;
k : integer;
BEGIN
Write('Значение x = '); ReadLn(x);
k:=Round(Sin(x));
WriteLn('Sin(x) ближе к ', k)
END.
Пример 2.5.3. Часовая стрелка показывает t1 часов. Сколько она будет показывать через t2 часов (t1,t2 - целые).
показание = (t1+t2) MOD 12. Если часы с цифровой индикацией, то
показание=(t1+t2) MOD 24.
Задачи
2.5.1. Минутная стрелка часов показывает tm минут. Сколько она будет показывать через dtm минут?
2.5.2. Часы показывают th часов, tm минут. Каково будет пока-зание часов через dth часов, dtm минут?
2.5.3. Ввести 2 целых числа. Определить количество нечетных.
2.5.4. Ввести 2 целых. Определить количество отрицательных.
2.5.5. Ввести трехзначное целое. Сформировать число, цифры в котором расположены в обратном порядке, например : 631 ® 136 .
2.5.6. Ввести 2 целых числа. Определить количество кратных 3.
2.5.7. Ввести 2 числа. Вычислить сумму положительных.