
КРАТКОЕ ОПИСАНИЕ ЯЗЫКА ОВШСТ РА8САЕ ПРИЛОЖЕНИЕ К ЛЕКЦИИ 7
П7.1. Типы данных
В языке ОЬjес1 Рascal! имеется огромный набор стандартных типов. Наиболее распространенные из них - числовые, булевский, символьный и строковый. Первые три относятся к стандартным скалярным типам, строковый - к регулярным.
Числовые типы подразделяются на целые и вещественные типы. Целые типы в языке ОЬ]ес1 Ра§са1 представлены в следующей таблице:
Идентификатор типа |
Диапазон допустимых значений |
Занимаемая память |
integer |
-2147483648..2147483647 |
81§пеё 32-Ы1 |
cardinal |
0..4294967295 |
шш§пес1 32-Ы1 |
shortint |
-128..127 |
зщпес! 8-Ы1 |
smallint |
-32768..32767 |
зщпеё 16-Ы1 |
Longint |
-2147483648..2147483647 |
з1§пес1 32-Ы1 |
int64 |
-263..263-1 |
§1§пес1 64-Ы1 |
byte |
0..255 |
ипз!§пе(1 8-Ы1; |
word |
0..65535 |
ипз1§пеё 16-Ы1 |
longword |
0..4294967295 |
ипз1§пе(1 32-Ы1 |
Константы целого типа представляются в виде обычных целых чисел, то есть так, как они записываются в обычной арифметике, с использованием арабских цифр. Знак"+", как правило, не ставится.
Над представителями целых типов допустимы следующие арифметические операции:
Операция |
Знак операции |
Ти1п результата |
Сложение |
+ |
целый |
Вычитание |
— |
целый |
Умножение |
* |
целый |
Деление |
/ |
вещественный |
Деление нацело |
01У |
целый |
Остаток от целочисленного деления |
МОО |
целый |
Тип результата операции "деление" всегда вещественный, даже если числитель делится на знаменатель нацело. Тип результата операций "деление нацело" и "остаток целочисленного деления" -
При условии, что все операнды, входящие в выражение, имеют целый тип.
всегда целый. Последние две операции допустимы только над целочисленными операндами.
Порядок выполнения операций такой же, как и в обычной арифметике: сначала вьшолняются умножение и деление, затем - сложение и вычитание. Операции 01V и МО О вьшолняются в последнюю очередь. Порядок выполнения может быть изменен с помощью круглых скобок. В сомнительных случаях рекомендуется также использовать скобки.
Вещественные типы отличаются от целых наличием дробной части в числе, отделенной от целой части точкой. Все они показаны в следующей таблице:
Идентификатор типа |
Диапазон допустимых значений |
Количество значащих цифр |
Занимаемая память, байт |
RеаL |
5.0-10'324..1.7-10308 |
15-16 |
8 |
Rеа148 |
2.9-1 0"39.. 1.7-1 038 |
11-12 |
6 |
Sig1е |
1.5-10'45.. 3.4-103* |
7-8 |
4 |
Double |
5.0-10-324..1.7-10308 |
15-16 |
8 |
Ехtеnded |
з.б-ю-^.лл-кГ32 |
19-20 |
10 |
Соmp |
-263+1 .. 263 -1 |
19-20 |
8 |
Сиggепсу |
-922337203685477.5808 ..922337203685477.5807 |
19-20 |
8 |
Вещественные константы могут быть представлены в одной из двух форм - с фиксированной точкой (обычный вид), с плавающей точкой (вид, в который входит мантисса и порядок, например, 0.2718е01; в форме с фиксированной точкой эта же константа запишется как 2.718).
Над операндами вещественных типов допустимы операции сложения, вычитания, умножения и деления. Тип результата - вещественный, если хотя бы один из операндов имеет вещественный тип.
Константы символьного типа (СйагасЪег) записываются, как правило, в виде символа, заключенного между апострофами: 'О', '5', '#' и т.д. Если символ не имеет графического представления, он может быть представлен в виде #<код_символа>, например, #13, #27 и т.д. Так же может быть представлен и любой из символов, имеющих графическое изображение (то есть буква, цифра и т.д.). Над операндами символьного типа допустимы операции сравнения (<, <=, >, >=, =, о). Результат этих операций (Тгие - "истина" или Еа1зе - "ложь") такой же, как и над числовыми кодами сравниваемых символов.
Булевский, или логический, тип (Воо1еап) представлен двумя константами (Тгие и Ра1зе). При этом считается Тгие>Еа1зе. Выражения булевского типа представляют собой либо обычные числовые или символьные неравенства, включающие знаки <, <=, >, >=, =, о, либо те же неравенства, соединенные знаками логических операций (N01, АШ, ОК, ХОК).
Результат выполнения операции ЫоЪ А всегда противоположен значению логического выражения А: если А=Тгие, то N01 А=Еа1зе и наоборот, если А=Еа1зе, то МОТ А=Тгие. Данная операция является унарной, то есть определенной над одним операндом. Остальные логические операции - бинарные, то есть определенные над двумя операндами.
Результат выполнения операции А АЫО В равен Тгие тогда и только тогда, когда оба операнда А и В равны Тгие одновременно.
Результат выполнения операции А ОК В равен Еа1зе тогда и только тогда, когда оба операнда А и В равны Еа1 зе одновременно.
Результат выполнения операции А ХОК В равен Еа1зе, когда оба операнда А и В равны (то есть либо оба одновременно равны Тгие или оба одновременно равны Еа1зе), и равен Тгие, когда оба операнда имеют разные значения (то есть, когда один из них равен Тгие, а другой- Ра1зе).
Неравенства, соединенные знаками логических операций, принято заключать в круглые скобки:
(х<2) АМО (у>=4*х).
Ниже, при описании некоторых операторов вместо логического выражения будет использоваться обозначение <условие>.
Целые типы, булевский и символьный типы составляют дискретные типы.
Все описанные выше типы данных относятся к простым типам языка ОЬ]ес1 Ра§са1.
Регулярные типы, или массивы, используются довольно часто. Массив - это упорядоченное множество переменных, имеющих одно и то же имя, обладающих одним и тем же типом и различающихся одним или более индексами, которые определяют порядок следования конкретного элемента в данном массиве. Ключевым словом для описания переменных такого типа является служебное
слово АККАУ. Далее в квадратных скобках следует перечислить диапазоны индексов; количество диапазонов определяет количество индексов и, соответственно, размерность массива (одномерный, двумерный и т.д.). После этого указывается тип элементов массива. Примеры описания массивов:
а,Ъ:АККАУ [1. .10] ОГКеа!;
с: АККАУ [-5. .5,2. .12] ОГ 1п^едег;.
Обращение к элементам массива может быть таким:
а[1]; Ь[Ы]; с[-2
Каждый диапазон индексов также представляет собой тип; он так и называется тип-диапазон, или ограниченный тип. Верхняя и нижняя границы индекса - это константы, которые могут быть заданы явно или предварительно описаны в разделе СОЫ5Т. Как правило, границами индекса служат целочисленные константы. Ими также могут служить символьные или булевские константы, указанные в порядке их возрастания.
Примером стандартного массива служит строковый тип 31г1пд, элементами которого являются представители символьного типа.
Помимо констант, меток, типов и переменных в программе могут быть использованы стандартные и нестандартные процедуры и функции. Каждая нестандартная процедура или функция должна быть описана.
Описание процедуры начинается с ее заголовка, в котором после служебного слова РКОСЕВ11КЕ указываются имя процедуры и в скобках перечень формальных параметров (если они есть). Далее могут следовать такие же подразделы, как и у головной программы (то есть константы, метки, типы, переменные, а также "свои", вложенные, процедуры и (или) функции). Завершается описание процедуры телом, которое начинается со слова ВЕСШ и заканчивается словом ЕЫВ. Пример описания процедуры:
РКОСЕОиКЕ Ргос! (а,Ъ,с:Кеа!;УАК х!,х2:Кеа1); УАК
с1:Кеа1; ВЕСШ
В приведенном примере параметры а, Ь и с описаны как параметры-значения. При вызове такой процедуры можно вместо них указать как переменные, так и константы. А параметры х! и х2 описаны как параметры-переменные (этот факт определяется служебным словом УАК). При обращении к данной процедуре вместо них можно указывать только переменные. Например:
Ргос!(1,2,з,р1,р2);
При этом значение переменной з должно быть известно заранее. Переменным р! и р2, как параметрам-переменным, будет присвоен результат выполнения данной процедуры.
Порядок следования параметров вызова процедуры (или фактических параметров)., а также соответствие их количества и типов количеству и типам формальных параметров является существенным.
Функция, в отличие от процедуры, предназначена для вычисления значения простого типа. Структура описания функции немногим отличается от описания процедуры, главным образом, заголовком и тем, что в теле функции последним оператором должен быть оператор присваивания имени функции окончательного результата.
Пример описания функции:
ГШСТЮК агсз!п (х:Кеа!) :Кеа1; ВЕСШ
ЕМ О;
Структура списка формальных параметров в принципе может быть такой же, как и у процедуры. При вызове функции указывается ее имя и список фактических параметров. Функции, как уже было сказано, используются при записи выражений.
Объектовый тип - тип, позволяющий описать некоторый объект, с которым можно работать "по частям", описав эти "части" как некоторые составляющие данного объекта. "Частями" могут быть переменные различных типов, процедуры или функции.
Пример:
ТУРЕ
Сотр1ех =
Ке,1т:Кеа1;
РКОСЕОШЕ СК;
РКОСЕ01ЖЕ СМ; ЕШ;
При таком описании типа сотр!ех необходимы еще описания процедур СК и СЭД, которые указаны при описании типа. Например:
РКОСЕОиКЕ Сотр1ех.СК; ВЕСШ
ЕШ;
РРчОСЕВОКЕ Сотр1ех.С№; ВЕСШ
ЕШ;
Вызов таких процедур и обращение к другим отдельным составляющим тип (компонентам) осуществляются несколько иначе. Если, скажем, переменная С описана как переменная типа сотр!ех, то указывать ее "части" можно так:
С.Ке; С. 1т; С.СК; С.СТй;
Как видно, имя переменной отделяется от ее -компонента точкой. Программирование с использованием переменных объектовых типов относится к объектно-ориентированному программированию специальному стилю программирования, основанному на представлении программы в виде совокупности объектов, каждый из которых является реализацией (или, как еще говорят, экземпляром) определенного класса, а классы образуют иерархию на принципах наследуемости.
Основы объектно-ориентированного программирования будут рассмотрены далее, в гл. 3.