|
Переменные и константы. Типы данных
Для объявления переменных и констант в программе выделены особые синтаксические разделы. Раздел объявления констант начинается со служебного слова const и содержит перечень всех используемых в программе констант, например, описание константы Radius, принимающей значение 4, в программе выглядит следующим образом:
Const
Radius = 4;
Раздел объявления переменных начинается со служебного слова var и содержит описание всех переменных:
Var
Radius: integer
Типы данных. С понятием данных тесно связано понятие типа данных. Тип — это такая характеристика данных, которая, с одной стороны, задает границы изменения данных, а с другой — определяет множество операций над ними.
Типы данных принято делить на простые (или базовые) и структурированные.
К простым (базовым) типам в языке Pascal относятся:
• целый;
• вещественный;
• логический;
• символьный;
• перечисляемый;
• тип-диапазон.
Структурированные типы описывают наборы однотипных или разнотипных данных. Типы данных, образующих набор, в свою очередь могут быть как простыми, так и структурированными. Если тип компонент набора является структурным, то говорят, что получаемый в результате структурированный тип имеет более одного уровня структурирования. Структурированный тип может иметь неограниченное количество уровней структурирования.
К стандартным структурированным типам относятся:
• массив;
• запись;
• строка;
• множество;
• файл.
Целый тип данных
Целый тип присваивается данным (переменным и константам), которые во время работы программы могут принимать лишь целочисленные значения.
Например, программа вычисления функции факториал для натурального числа N(f=1*2*3*…*n) оперирует с целыми числовыми значениями: n и f— натуральные числа.
В стандарте языка Pascal определен единственный целый тип данных Integer. В современных реализациях языка целый тип данных представлен множеством типов:
Название типа | Область изменения данных | Занимаемый размер в байтах | Знак числа |
Integer | -32768..32767(-231...23l-1) | 2(4) | Целое со знаком |
Shortint | -128..127 | Целое со знаком | |
Srnallint | -32768..32767 | Целое со знаком | |
Longint | -231..23l-l | Целое со знаком | |
Byte | 0..255 | Целое без знака | |
Word | 0..216- 1 | Целое без знака | |
Long word | 0..4294967295 | Целое без знака |
Например, для переменных X, Y, Z, описанных в разделе объявления переменных, как
var
X: byte;
Y: smallint;
Z: word;
операторы X:= 2000; Y:= -40000; Z:= -2 будут некорректными, так как переменная X не может принимать значение, большее чем 255, Y не может быть меньше чем -32768, Z должно быть положительным.
Логический тип данных
Данные логического типа (Boolean) в стандарте языка могут принимать одно из двух значений: True или False. Переменная или константа логического типа занимает 1 байт, в который записывается 1, если переменная или константа имеет значение True, и 0 в противном случае.
Например, для переменной Flag, описанной в разделе объявления переменных как
Var
Flag: Boolean;
корректны операторы:
Flag:= true;
Flag:= false;
В современных реализациях языка (Turbo Pascal V 7.0, Object Pascal) добавлено еще три логических типа (для совместимости с другими языками программирования и со средой Windows). Основные отличия этих типов от стандартного заключаются, во-первых, в фактическом размере (в байтах), а во-вторых — в величине, соответствующей значению True. Для всех логических типов значению False соответствует число 0. записанное в соответствующее количество байтов. Значению же True в случае стандартного типа соответствует только 1, записанная в байт, а в случае других логических типов — любое число, отличное от 1.
Название типа | Область изменения данных | Занимаемый размер в байтах |
Boolean | True.. False | |
ByteBool | True..False | |
WordBool | True..False | |
LongBool | True..False | |
Между значениями True и False имеют место следующие отношения:
| ||
Boolean | ByteBool, WordBool, LongBool | |
False < True | False о True | |
Ord(False) = 0 | Ord(False) = 0 | |
Ord(True) = 1 | Ord(True) о 0 | |
Succ(False) = True | Succ(False) = True | |
Pred(True) = False | Pred(False) = True |
Символьный тип данных
Данные стандартного символьного типа представляют собой символы раскладки ASCII. Переменная или константа символьного типа занимает 1 байт памяти. В соответствии с синтаксисом языка значение символа заключается в одинарные кавычки: 'Р', 'а', V, 'с', 'а', Т.
При вызове функции Ord(Ch), где Ch — значение типа Char, возвращается порядковый номер Ch. Любое значение символьного типа можно получить с помощью стандартной функции Chr(X), где X — значение типа byte (или используя знак «#» перед числом, например #30 = Chr(30)).
Для следующих объявлений переменных
var
С:Char;
В: byte;
справедливы операторы:
С:= #3; В:= Ord(C);
В:= 125; С:= Chr(B);
Перечисляемый тип
Перечисляемый тип данных задается упорядоченным набором идентификаторов, с которыми могут совпадать значения переменной (или константы) этого типа. Список идентификаторов указывается в круглых скобках, а сами идентификаторы разделяются запятыми:
<Перечисляемый тип>:= -(Идентификатор типа> =
(<Список идентификаторов^-); <Идентификатор типа >:= < Идентификатор>
<Список идентификаторов>:= <Идентификатор>|<Идентификатор>,
<Список идентификаторов>
Упорядочение наборов выполняется в соответствии с последовательностью, в которой перечисляются идентификаторы. Порядковый номер перечисляемой константы определяется ее позицией в списке идентификаторов при объявлении. Первый идентификатор в списке имеет порядковый номер 0, второй — порядковый номер 1 и т.д. Один и тот же идентификатор можно использовать в объявлении только одного перечисляемого типа.
Приведем примеры перечисляемого типа:
Туре
Color = (Red, Green, Blue, Black);
Operator = (Plus, Minus, Multiply, Divide);
Порядковые типы
Типы данных логический, символьный, целый и перечисляемый относятся к так называемым порядковым типам, т.е. представляют собой множества значений, для которых определен порядок следования.
Для величин порядкового типа существуют стандартные процедуры и функции, позволяющие выполнить ряд действий. В таблице, приведенной ниже, перечислены эти процедуры и функции.
Название | Действие | Тип аргумента (параметра) | Тип результата | Примеры |
Pred(X) | Возвращает предыдущее значение X. При применении к первому элементу возникает ошибка | Логический, символьный, целый, перечисляемый | Тот же, что и у аргумента | Pred(true) = false; Pred(0) = -1; Pred(Minus) = Plus Pred(Plus) — error! |
Succ(X) | Возвращает последующее значение X. При применении к последнему элементу возникает ошибка | Логический, символьный, целый, перечисляемый | Тот же, что и у аргумента | Succ(false) = true; Succ(‘1’) = ‘2’; Succ(0) = 1; |
Odd(X) | Проверка аргумента на нечетность: возвращает true, если аргумент нечетный, и false, если аргумент четный | Longint | Boolean | Odd(3) = true; Odd(6) = false; |
Inc(X [,N]) | Процедура. Увеличивает значение переменной X на 1 (если второй параметр отсутствует) или на N | Тип X — целый, логический, символьный, перечисляемый; Тип N — Longint |
| Inc(X) аналогично X:=X+ 1, если X — целое; Succ(X), если X — перечисляемое |
Dec(X [,N]) | Процедура. Уменьшает значение переменной X на 1 (если второй параметр отсутствует) или на N | Тип X — целый, логический, символьный, перечисляемый; Тип N — Longint |
| Dec(X) аналогично X:=X—1, если X — целое; Pred(X), если X — перечисляемое |
Ord(X) | Возвращает целое число, которое показывает, какое положение занимает значение X по отношению к другим значениям. | Логический, символьный, целый, перечисляемый | Longint | Ord(false) = 0; Ord(‘1’) = 34; Ord(Club) = 0 |
Тип-диапазон
Тип-диапазон представляет собой диапазон значений из порядкового типа, называемого главным типом. Определение типа-диапазона задает все значения из главного типа, находящиеся между наименьшим и наибольшим значением, включая сами границы, и имеет следующий синтаксис:
<Тип-диапазон>:= <Имя типа> = <Мин. значение>..<Макс. значение>; <Имя типа>:= <Идентификатор> <Мин. значение>:= <Константа> <Макс. значение>:= <Константа>
Обе константы должны быть одного порядкового типа, при этом минимальное значение не должно превышать максимального. Приведем примеры типов-диапазонов:
О.. 999
-100.. 100
Red.. Blue
Переменная типа диапазон имеет все свойства переменных главного типа, но ее значение на этапе выполнения должно принадлежать указанному интервалу.
Для задания границ диапазона разрешается использовать константные выражения, в связи с чем может возникнуть синтаксическая неопределенность. Рассмотрим следующие объявления:
const
X = 5;
Y = 10;
type
Operator = (Plus, Minus, Multiply, Divide);
Height = (X - Y) * 2.. (X + Y) * 2;
В соответствии с правилами синтаксиса языка любое определение типа, начинающееся с круглой скобки, воспринимается, как определение перечисляемого типа (см. определение типа Operator). Однако целью объявления Height является задание типа-диапазона. Решением этой проблемы является либо преобразование первого выражения, задающего минимальное значение, так, чтобы оно не начиналось с круглой скобки, либо задание другой константы, равной значению этого выражения, и затем использование этой константы в определении типа, например:
type
Height = 2 * (X - Y).. (X + Y) * 2;
Вещественный тип данных
Данные вещественного типа — это вещественные значения, записанные в памяти в виде чисел с плавающей точкой. Область возможного изменения значений определяется размером (в байтах), отводимым под конкретную реализацию типа.
Вещественный тип в стандарте языка Pascal называется Real. Помимо типа Real в современных реализациях Pascal определены еще шесть стандартных вещественных типов. Каждый тип характеризуется своей областью изменения возможных значений.
Тип Comp фактически является целым типом расширенного диапазона, но при этом на считается порядковым (т.е. к переменным типа Comp нельзя применять процедуры и функции, определенные только для порядковых типов — Inc, Dec и т.п.).
Выбор конкретного типа для переменной связан с требуемой точностью вычислений.
Название типа | Область изменения данных | Занимаемый размер в байтах | Кол-во значащих цифр |
Real | 5.0-lO"324.. 1.7-10308 | 15-16 | |
Real48 | 2.9-10"39.. 1.7 1 038 | 11-12 | |
Single | 1.5-10-*5..3.4-1038 | 7-8 | |
Double | 5.0-10"324.. 1.7-10308 | 15-16 | |
Extended | 3.6-10-495,..1.1-104932 | 19-20 | |
Comp | -263+ 1..263 - 1 | 19-20 | |
Currency | -922337203685477.5808..922337203685477.5807 | 19-20 |
Для переменных вещественного типа определены 2 функции, позволяющие преобразовать переменную вещественного типа в переменную целого типа. В качестве аргументов функций выступают значения вещественного типа, а результат принадлежит целому типу. Названия и результат действия этих функций приведены в таблице:
Название | Назначение | Примеры |
Round(X) | Округление вещественного числа до целого | Round(3.456) = 3; Round(5.678) = 6; |
Trunc(X) | Выделение целой части числа | Trunc(3.456) = 3; Trunc(5.678) = 5; |
Типизованные константы
Типизованные константы можно использовать точно так же, как переменные того же самого типа, и они могут появляться в левой части оператора присваивания. Отметим, что типизированные константы задаются только один раз — в начале выполнения программы. Таким образом, при каждом новом входе в процедуру или функцию локально объявленные типизированные константы заново не инициализируются.
Синтаксис объявления типизированной константы следующий:
-«Типизированная константа>::= <Идентификатор>:<Тип данных> =
<3начение>;
Константы простого типа
Объявление типизированной константы простого типа содержит в своем описании указание на простой тип данных (например, Integer, Real или Char):
const
Maximum: Integer = 999;
Factor: Real = -0.1;
Breakchar: Char = #3;
Поскольку типизированная константа фактически представляет собой переменную с константным значением, она не может заменять обычную константу. Например, она не может использоваться в объявлении других констант или типов.
const
Min: Integer = 1,
Мах: Integer = 1000;
type
Vector = array [Min..Max] of Integer;
Объявление Vector является недопустимым, поскольку Min и Max являются типизированными константами.
Дата добавления: 2015-10-21; просмотров: 24 | Нарушение авторских прав
<== предыдущая лекция | | | следующая лекция ==> |
Выражение — это синтаксическая единица языка, задающая порядок и способ вычисления некоторого значения. | | | Целью данной курсовой работы является разработка cструктурированной кабельной системы (СКС) локальной вычислительной сети административного здания. Сетевые технологии на протяжении своего развития |