Вещественные типы ТР
Вещественное число, не равное нулю, можно представить в виде r= , где а -мантисса, удовлетворяющая условию1£а<10 при r¹0, а n - порядок (nÎZ). Значения вещественных типов хранятся в памяти в виде мантиссы и порядка.
Имя типа | Название | Объем памяти | Цифр в мантиссе | Порядок (nÎ Z) |
single | вещественный одинарной точности | 7-8 | nÎ[-39; 38] | |
real | вещественный | 11-12 | nÎ[-39; 38] | |
double | вещественный двойной точности | 15-16 | nÎ[-324; 308] | |
extended | вещественный расширенный | 19-20 | nÎ[-4932; 4932] | |
comp | сложный | 19-20 | nÎ[0; 18] |
Вещественный тип, ввиду приближённого представления чисел, не является в Паскале упорядоченным.
Операция сравнения на равенство данных вещественного типа считается некорректной, равенство r1=r2 будем заменять неравенством ½r1-r2½< e, где e - точность.
В стандартном Паскале определен один вещественный тип real. В ТР типы single, double и extended, comp можно использовать только при наличии сопроцессора.
7.3. Арифметические операции, определенные над числовыми
Типами
Название операции | Знак операции | Запись на Паскале | Типы операндов | Тип результата |
унарный плюс | + | +а | целый | целый |
вещественный | вещественный | |||
унарный минус | - | -а | целый | целый |
вещественный | вещественный | |||
оба целые | целый | |||
сложение | + | a+b | хотя бы один | |
вещественный | вещественный | |||
вычитание | - | a-b | как при сложении | как при сложении |
умножение | * | a*b | как при сложении | как при сложении |
Название операции | Знак операции | Запись на Паскале | Типы операндов | Тип результата |
деление | / | a/b | любые числовые | вещественный |
целочислен-ное деление | div | a div b | целые | целые |
нахождение остатка от деления | mod | a mod b | целые | целые |
Правило выполнения операции div и mod:
a div b=sign(a*b)*[½a/b½] ([х] - целая часть х);
a mod b=a - (a div b)*b.
Например, -15 div 7= -2; -15 mod 7= -1.
Выражение определяет правила вычисления значения, оно представляет собой последовательность, состоящую из констант, переменных, вызовов функций, соединенных знаками операций и, возможно, круглыми скобками. При вычислении значений выражений вначале выполняются операции более высокого приоритета. Операции одинакового приоритета выполняются слева направо по порядку. Для изменения естественного порядка действий используются круглые скобки.
Выражения, типы которых числовые, будем называть арифметическими.
На Паскале выражения записываются в строку. Например, выражение
на Паскале имеет вид (a+b)/(a-b). В выражениях не допускаются подряд два знака операций. Например, недопустима запись a*-b; правильное выражение a*(-b).
Приоритеты операций в арифметических выражениях (в порядке убывания):
1. Унарные (+ и -).
2. Умножение, деление, деление нацело, нахождение остатка от деления.
3. Сложение, вычитание.
Некоторые стандартные функции Паскаля:
Обращение | Математическое обозначение | Тип аргумента | Тип результата |
sin(x) | sin x | числовой | вещественный |
cos(x) | cos x | числовой | вещественный |
arctan(x) | Arctg x | числовой | вещественный |
ln(x) | ln x | числовой | вещественный |
exp(x) | eх | числовой | вещественный |
abs(x) | | x | | целый вещественный | целый вещественный |
sqr(x) | x*x | как для abs(x) | как для abs(x) |
Pi | p | нет | вещественный |
round(x) | округление до ближайшего целого | вещественный | целый |
trunc(x) | отбрасывание дробной части | вещественный | целый |
Так как в Паскале нет операции возведения в степень, для возведения в степень х для хÏZ воспользуемся основным логарифмическим тождеством при а>0, получим exp(x*ln(a)).
Для вычисления logax используем формулу перехода к основанию е. Функции Arcsin(x) и Arccos(x) выражаем через Arctg(x).
8. ОПЕРАТОР ПРИСВАИВАНИЯ
Действие оператора присваивания заключается в вычислении значения выражения и присваивании этого значения переменной. Например, после выполнения операторов i:=5; i:=i+3 значение переменной i будет равно 8.
Тип переменной в левой части оператора присваивания должен быть совместим по присваиванию с типом выражения в правой части. Для разных типов требования совместимости по присваиванию различны. Любой целый тип совместим по присваиванию только с целым. Вещественный совместим по присваиванию и с целым, и с вещественным. После описания var j:integer; оператор j:=6/2 недопустим, так как операция деления формирует результат вещественного типа, который не может быть присвоен целому.
Оператор присваивания используется как для инициализации переменных, так и для изменения их значений.
9. СИМВОЛЬНЫЙ ТИП
Имя символьного типа - char. Значениями символьного типа являются символы из определенного набора символов, который зависит от конкретной реализации языка. В этот набор входят некоторые символы алфавита и, возможно, другие символы. Среди них могут быть символы, не имеющие графических изображений (например, символ перехода к новой строке). Все символы пронумерованы. Их номера - коды. Множество значений символьного типа является упорядоченным множеством (чем больше код, тем больше символ). В различных реализациях символы могут быть упорядочены по-разному, но обязательно выполнение следующих условий:
1. Коды цифр - последовательные числа и '0' < '1'< '2' < ...< '9'.
2. Прописные и строчные буквы должны быть упорядочены по алфавиту, но не требуется, чтобы коды были последовательными числами.
В ТР множеством значений символьного типа является множество символов из расширенной таблицы ASCII, состоящей из 256 символов. Первая половина таблицы (с кодами от 0 до 127) - неизменяемая, вторая (с кодами от 128 до 255) - альтернативная. Символы с кодами меньше 32 являются управляющими, пробел имеет код 32. Цифры, латинские буквы, некоторые знаки операций, разделители находятся в первой половине таблицы. Важная особенность: строчные латинские и прописные латинские буквы имеют последовательные коды. Альтернативная часть таблицы содержит буквы русского алфавита, символы псевдографики.
Над данными символьного типа не определены никакие операции, кроме операций сравнения. Поэтому выражениями символьного типа являются константы, переменные и функции, возвращающие значения типа char.
Стандартные функции, используемые при работе с символами:
chr(i)возвращаетсимвол по его коду i
ord(c)возвращает код символа с
Примеры:
1. Значением выражения ord(‘7’)-ord(‘0’) является число 7.
2. Значением выражения chr(ord(‘A’)+5) является шестая буква латинского алфавита.
10. ЛОГИЧЕСКИЙ ТИП
Имя логического типа - boolean. Множество значений: false и true. Значение логического типа занимает 1 байт. False (ложь) и true (истина) хранятся в памяти как 0 и 1 соответственно. Тип упорядочен: false<true.
10.1. Логические операции
Название | Знак операции | Запись на Паскале | Приоритет операции |
Отрицание | not | not a | |
Конъюнкция | and | a and b | |
Дизъюнкция | or | a or b | |
Исключающее или (сложение по модулю 2) | xor | a xor b |
Типы операндов и тип результата - boolean.
Результат логической операции определяется в соответствии с таблицей истинности (1 - true, 0 - false).
Таблица истинности
x | y | not x | x and y | x or y | x xor y |
Два выражения, соединенные одним из знаков сравнения, образуют логическое выражение, которое называется отношением. Все шесть операций сравнения (>, <, >=, <=, =, <>) определены над числовыми, символьным, логическим, перечисляемым, строковым типами.
Если операндами логических операций являются отношения, то в Паскале они должны быть заключены в круглые скобки, так как операции сравнения имеют более низкий приоритет, чем логические операции.
Примеры логических выражений на Паскале:
1. Неравенство -2£x<5 имеет вид (-2<=x) and (x<5).
2. Условие xÏ[-2; 5) имеет вид (x<-2) or (x>=5).
3. Высказывание «с - латинская буква» имеет вид
(с>=’A’) and (c<=’Z’) or (с>=’a’) and (c<=’z’).
В ТР по умолчанию, то есть если не указано иначе, при вычислении логического выражения операнды вычисляются до тех пор, пока значение логического выражения не станет определенным. Например, если значение первого операнда дизъюнкции - истина, то значение второго операнда вычисляться не будет. Если значение первого операнда конъюнкции - ложь, то значение второго операнда вычисляться не будет. С учетом сказанного, несмотря на то, что бинарные логические операции коммутативны, следует обращать внимание на последовательность операндов в логических выражениях.
Значение выражения (b<>0) and (a/b>10) определено при любых b, при перестановке операндов этого выражения значение не может быть вычислено при b=0, и при выполнении программы произойдет аварийный останов.
11. ПРОСТЫЕ ТИПЫ, ОПРЕДЕЛЯЕМЫЕ ПОЛЬЗОВАТЕЛЕМ
Любой тип, вводимый в рассмотрение пользователем, можно описать непосредственно при описании переменных или этому типу можно присвоить имя в разделе описания типов, а затем использовать имя типа при описании переменных. Для того чтобы отличать имена типов от имен других программных объектов, можно начинать имя типа с префикса t_.
Раздел описания типов:
Идентификатор - имя типа. Описание типа определяется правилами языка для каждого вида типов.
Из простых типов, определяемых пользователем, рассмотрим интервальные и перечисляемые. Указательный тип будет рассмотрен ниже.