Встроенные процедуры и функции, применимые к целым типам
Перечень процедур и функций, применимых к целочисленным типам, приведен в табл. 2. Буквами b, s, w, i, l обозначены выражения соответственно типа BYTE, SHORTINT, WORD, INTEGER и LONGINT, x - выражение любого из этих типов; буквы vb, vs, vw, vi, vl, vx обозначают переменные соответствующих типов. В квадратных скобках указывается необязательный параметр.
Таблица 2
Стандартные процедуры и функции, применимые к целым типам | ||
Обращение | Тип результата | Действие |
abs (x) | x | Возвращает модуль х |
chr(b) | Char | Возвращает символ по его коду |
dec (vx[, i] ) | процедура | Уменьшает значение vx на i, а при отсутствии i -на 1 |
inc(vx[, i] ) | Процедура | Увеличивает значение vx на i, а при отсутствии i - на 1 |
Hi(i) | Byte | Возвращает старший байт аргумента |
Lo(i) | " | Возвращает младший байт аргумента |
odd(l) | Boolean | Возвращает True, если аргумент - нечетное число |
Random (w) | Как у параметра | Возвращает псевдослучайное число, равномерно распределенное в диапазоне 0...(w-l) |
sgr (x) | X | Возвращает квадрат аргумента |
swap ( i ) | Integer | Меняет местами байты в слове |
Логический тип.
Значениями логического типа может быть одна из предварительно объявленных констант FALSE (ложь) или TRUE (истина). Для них справедливы правила:
ord(False) = 0;
ord(True) = 1;
False < True;
succ(False)= True; {Стандартная функция определения последующего элемента}
pred(True) = False. {Стандартная функция определения предыдущего элемента }
Поскольку логический тип относится к порядковым типам, его можно использовать в операторе счетного типа, например:
var
i : Boolean;
begin
for i:= False to True do ....
Символьный тип.
Значением символьного типа является множество всех символов ПК. Каждому символу приписывается целое число в диапазоне 0...255. Это код внутреннего представления символов. Его возвращает функция ORD.
Символы с кодами 0...31 относятся к служебным кодам. Если эти коды используются в символьном тексте программы, они считаются пробелами.
К типу CHAR применимы операции отношения, а также встроенные функции: СНR(В) - функция типа CHAR; преобразует выражение В типа BYTE в символ и возвращает его своим значением;
‘A’<’B’
ORD(‘B’)=66
ORD(‘a’)=97
ORD(‘0’)=48
СНR(48)=’0’
PRED(‘B’)=65
SUCC(‘д’)=’г’
UpCase(‘n’)=’N’
При выполнении операций сравнения сравниваются коды символов как обычные целые числа. При этом получается, что любая заглавная буква меньше соответствующей, та как в кодовой таблице сначала располагаются все заглавные буквы, а затем строчные.
UPCASE(CH) - функция типа CHAR; возвращает прописную букву, если СН -строчная латинская буква, в противном случае возвращает сам символ СН
Перечисляемый тип.
Перечисляемый тип задается перечислением тех значений, которые он может получать. Каждое значение именуется некоторым идентификатором и располагается в списке, обрамленном круглыми скобками, например:
typе
colors =(red, white, blue,green);
var
animals:(cat,dog,cow);
Поскольку перечисляемый тип относится к порядковым типам, между значениями перечисляемого типа и его порядковыми номерами устанавливается соответствие:первое значение получает порядковый номер 0, второе 1 и т.д.до 65535.
ORD(red)=0; ORD(green)=3
Blue>red
Достоинства- 1. Улучшает смысловую читабельность программы
2. Более четко проводится контроль значений
3. имеет очень компактное машинное представления.
Недостатки – Не могут быть явно выведены с клавиатуры и выведены на пример.
Тип-диапазон (интервальный тип).
Тип-диапазон есть подмножество своего базового типа, в качестве которого может выступать любой порядковый тип, кроме типа-диапазона. Тип-диапазон задается границами своих значений внутри базового типа:
<мин.знач.>..<макс.знач.>
Тип-диапазон может производить такие же действия, которые определены для базового типа. Для каждой операции с переменной интервального типа автоматически выполняется проверка: остается ли значение переменной внутри установленного для нее диапазона. Автоматическая проверка объявленных границ позволяет программисту не отвлекаться на организацию собственного контроля. В этом и есть смысл применения типа-диапазона.
Пример В хороша написанных программах вы скорее увидите
Var
Score : 2..12; чем
Score :i nteger;
Выход за границы вызовет программное прерывание.
Правила определения тип-диапазона:
· Два символа ..рассматриваются как один, пробелы недопустимы
· Необходимо, чтобы левая граница интервала не превышала правую.
Вещественные типы
Вещественные типы: очень большие или очень маленькие числа удобно представлять в экспоненциальной форме число представляется в виде множества называемое мантиссой умноженного на 10 в какой либо степени [число=мантисса*10 в степени k] число=мантисса*10 k
2700=2.7*103 ~2.7e+03
2,108*10-10=2.108e-10
Нельзя:
6. .564 e3 6.e2 5.0e { ошибка}
s | e | m |
Целые числа представляются абсолютно точно а числа вещественные представляются с конечной точностью, которая зависит от внутреннего формата. Вещественные числа занимают от 4 до 8 смежных байт и имеют следящую структуру:
Длина, байт | Название | Количество значащих цифр | Диапазон десятичного порядка |
Single (с одинарной точностью) | 7 - 8 | -45 - +38 | |
Real (вещественный) | 11. . .12 | -39. ..+38 | |
Double (с двойной точностью) | 15. ..16 | -324. . .+308 | |
extended (с повышенной точностью) | 19. . .20 | -4951. . .+4932 | |
Comp (сложный) | 19. . .20 | -2*1063+1. . .+2*63-1 |
Здесь s - знаковый разряд числа; е - экспоненциальная часть; содержит двоичный порядок; m - мантисса числа.
Десятичная точка подразумевается перед левым (старшим) разрядом мантиссы, но при действиях с числом ее положении сдвигается влево или вправо в соответствии с порядком числа. Поэтому действия над вещественными числами называют арифметикой с плавающей точкой (запятой).
Как видим, Турбо Паскаль характеризуется богатой гаммой вещественных типов, однако доступ к типам SINGLE, DOUBLE и EXTENDED возможен только при особых режимах компиляции. Дело в том, что эти типы рассчитаны на аппаратную поддержку арифметики с плавающей точкой и для их эффективного использования в состав ПК должен входить арифметический сопроцессор Компилятор Турбо Паскаля. {$N+}.
Директива обеспечивает доступ к четырем дополнительным вещественным типам.
Стандартные математические функции над вещественными типами Таблица3
Стандартные математические функции Турбо Паскаля | |||
Обращение | Тип параметра | Тип результата | Примечание |
abs (x) | Real, Integer | Тип аргумента | Модуль аргумента |
АrсТаn (х) | Real | Real | Арктангенс ( значение в радианах) |
cos (х) | To же | То же | Косинус, угол в радианах |
ехр (х) | " | " | Экспонента |
frас (х) | " | " | Дробная часть числа |
int(x) | " | " | Целая часть числа |
ln(x) | " | " | Логарифм натуральный |
Pi | - | " | л = 3.141592653... |
Random | - | " | Псевдослучайное число, равномерно распределенное в диапазоне 0...[1] |
random(x) | Integer | Integer | Псевдослучайное целое число, равномерно распределенное в диапазоне 0...(х-1) |
Randomize | - | - | Инициация генератора псевдослучайных чисел |
Round(х) | Real | longint | Округление до ближайшего целого |
sin(x) | Real | Real | Синус, угол в радианах |
sqr (x) | To же | То же | Квадрат аргумента |
sqrt (x) | To же | То же | Корень квадратный |
Trunc(x) | To же | longint | Целая часть числа |
3.3. Константы и переменные
Константы-это неизменяемые в процессии программы величины
Const
Ch_=’A’;
1=50;
Имеются две разновидности констант:
· Обычные константы, тип которых определяется их значением.
· Типизированные константы, тип которых определяется их значением и типом.
Заранее определены const:
MAXINT=32767
MAXLONGINT=2147483647
TRUE, FALSE
NIL – пустой указатель
[]- пустое множество.
При изображении шестнадцатеричного целого числа используется $: $A0, $FFF.
Для изображения символов, не имеющих физ. изображения используется код с символ :
#7,#10.#13.
Для типизированных const задается ее тип и начальное значение.
Пример
Const
Y:real=0.5;
Ch:char=#7;
Основными объектами Турбо Паскаль явл. Переменная (var) и обращения к функциям с помощью знаков операции и скобок можно составить выражения. Операция имеющая более высокий приоритет выполняется первой Операции имеющие одинаковый приоритет выполняются с лева на право. В ТР нет возведения в степень но оно выполняется с помощью алгоритма а* ~ ехр (ln (a)*x)
Преобразование типов
В Турбо – Паскале почти невозможны неявные ( автоматические ) преобразования типов. Исключение сделано в отношении констант и переменных типа INTEGER, которые разрешается использовать в выражениях типа REAL.
Пример
Var
X:integer;
Y:real;
y:=x+2;{правильно}
x:=2.5;{не правильно}
Для преобразования REAL к INTEGER имеются две встроенные функции: Round(х) и Trunc(x). В 1-ом случае происходит округление до ближайшего целого, во 2-ом усекается число путем отбрасывания дробной части.
Пример
X:=y/x; {непр}
X:=trunc(y/x); {пр}
Просто осуществляется преобразование типов данных, если переменные имеют один и тот же размер. Для этого надо указать идентификатор типа, а за ним в скобках переменную исходного типа.