ТИПЫ ДАННЫХ
Понятие типа данных является ключевым в языке Паскаль. Тип данных характеризует внутреннее представление, множество допустимых значений для этих данных, а также совокупность операций над ними. Среди типов данных различают стандартные (предопределенные разработчиками языка) и пользовательские (определяемые программистом в своей программе). Мы будем рассматривать следующие стандартные типы: целые числа, вещественные числа, логический тип, символьный и строковый типы. Программист может описать свой тип на основе этих базовых в разделе описания типов, который начинается словом Type. Затем для каждого типа следует конструкция вида:
идентификатор типа = определение типа;
Рассмотрим сначала простые типы данных, каждый из которых определяет упорядоченное множество значений: целые типы, логический тип, символьный тип, вещественные типы. Все эти типы, кроме вещественных являются порядковыми. Каждому значению порядкового типа функция Ord ставит в соответствие натуральное число — порядковый номер данного значения в множестве допустимых значений. К любым порядковым типам также можно применять функции Pred — возвращает предыдущее значение и Succ — следующее значение. Тип относится к упорядоченным, если для переменных и выражений этого типа определены операции отношения или сравнения: =, , , =. Любой порядковый тип является упорядоченным, но не наоборот. Так вещественные типы и тип string упорядоченные, но не порядковые.
Целые типы
В языке Турбо Паскаль определено 5 целых типов:
- Shortint (-128 … 127, 1 байт),
- Integer (-32767 … 32768, 2 байта),
- Longint (-2147483648 … 2147483647, 4 байта),
- Byte (0 … 255, 1 байт),
- Word (0 … 65535, 2 байта).
Для целых чисел определены такие операции. Унарные: +,-. Бинарные: сложение, вычитание, умножение, получение частного (div) и остатка (mod) при целочисленном делении и некоторые другие. Также с целыми числами можно производить операции, результаты которых не целые числа. Это обычное деление и операции отношения. Кроме того, имеется большое количество встроенных функций для работы с целыми числами: abs, sqr, sqrt, sin, cos, exp, ln и др.
Вещественные типы
В Турбо Паскале имеется 5 вещественных типов.
- Real (занимает 6 байт, диапазон от 2.9E-39 до 1.7E+38 по модулю, точность 11-12 значащих цифр)
- Single(занимает 4 байта, диапазон от 1.5E-45 до 3.4E+38 по модулю, точность 7-8 значащих цифр)
- Double(занимает 8 байт, диапазон от 5.0Е-324 до 1.7Е+308по модулю,точность 15-16 значащих цифр)
- Extended (занимает 10 байт, диапазон от 3.4E-4932 до 1.1E+4932 по модулю, точность19-20 значащих цифр).
- Comp(занимает 8 байт, диапазон от -9.2E-18 до 9.2E+18, хранятся точно, поскольку это целые числа)
Вещественные типы являются упорядоченными, но не порядковыми. Операции над вещественными числами: сложение ,вычитание, умножение, деление и операции отношения. Кроме того, имеется большое количество встроенных функций для работы с числами: abs, sqr, sqrt, sin, cos и т.п.
Вещественные числа хранятся неточно. Каждый из имеющихся вещественных типов гарантирует правильное хранение только определенного количества значащих цифр, их называют верными цифрами. С математической точки зрения, из за особенностей внутреннего представления речь идет об относительной погрешности.
Неточности в хранении вещественных чисел могут привести к тому, что при вычитании близких чисел может произойти потеря значимости. Это же объясняет, почему следует избегать сравнения вещественных величин на точное равенство.
Логический тип
Переменные логического типа Boolean занимают в памяти один байт и могут принимать одно из двух значений False — ложное или True — истинное. Этот тип является порядковым (Ord(False) = 0, Ord(True) = 1) и, следовательно, упорядоченным. Результат любых операций сравнения имеет логический тип и может быть присвоен логической переменной. Для операндов типа boolean определены следующие логические операции: NOT — отрицание (превращает false в true, а true в false), AND — логическое умножение и, OR – логическое сложение или, XOR — исключающее или (true если операнды разные). Принцип действия этих операций можно проиллюстрировать такими схемами:
AND | false | True | OR | false | true | XOR | false | true | ||
False | false | False | False | false | true | false | false | true | ||
True | false | True | True | true | true | true | true | false |
Символьный тип
Символьный тип Char также называют литерным. Он позволяет работать с символами, которые записываются двумя способами: в одинарных кавычках или по их коду, например ‘a’, ‘B’, ‘*’ или, что то же самое, #97, #130, #42. В отличие от текста программы на паскале, символы, соответствующие строчным и заглавным буквам различаются. Множество значений типа Char представляет собой полный набор ASCII — символов (американская стандартная кодировка). В компьютере хранятся шестнадцатеричные коды символов (1 байт), которые и используются в операциях отношения (сравнения). Функция Ord выдает код соответствующего символа, который может быть от 0 до 255. Обратной функцией, которая по коду выдает соответствующий символ, является функция Chr.
ВЫРАЖЕНИЯ
Выражение — это единица языка, которая определяет способ вычисления некоторого значения. Выражения формируются из констант, переменных, функций, знаков операций и круглых скобок по определенным синтаксическим правилам.
Константами называются параметры программы, значения которых не меняются в процессе ее выполнения. Они встречаются либо непосредственно в виде значения, либо в виде идентификатора константы, описанного в разделе, начинающемся со слова Const. Для каждой константы в разделе указывается конструкция вида:
идентификатор константы = значение;
Целые константы содержат лишь цифры и знак: -214, 23, вещественные могут содержать также десятичную точку, показатель степени и символ e, который заменяет основание 10 в записи числа: -0.5, -1e-5, 7.2e+15. Логические константы — это значения False или True. Символьная константа представляет собой символ ASCII, заключенный в апострофы. Если символ не имеет физического изображения, то пишется знак # и рядом ASCII-код символа без апострофов.
Переменными называются параметры программы, которые могут менять свое значение в процессе ее выполнения. Все без исключения переменные должны быть описаны в разделе программы, начинающемся со слова VAR. Затем следуют конструкции вида:
список идентификаторов переменных : тип1;
список идентификаторов переменных : тип2;
В списке имена переменных перечисляются через запятую. Кроме базовых типов Турбо Паскаля здесь можно использовать свои типы (описанные ранее в разделе Type). В Турбо Паскале имеется большое количество встроенных функций для работы с данными каждого типа. Имена (указатели) этих функций с аргументом в круглых скобках могут также встречаться в выражениях. Знаки операций зависят от типа используемых в выражении операндов и рассмотрены выше.
Круглые скобки используются для изменения порядка вычисления частей выражения. Выражения без скобок вычисляются в порядке, соответствующем приоритету операций. Приоритеты расставлены таким образом:
- вычисления в круглых скобках;
- вычисление значений функций;
- унарные операции ( not,+,- );
- операции типа умножения ( *,/,div,mod,and );
- операции типа сложения ( +,-, or, xor );
- операции отношения ( =, , , = ).
В логическом выражении 23 Паскаль выдаст ошибку, поскольку операция and будет выполнена раньше операций сравнения. Верная запись — (23).
СОВМЕСТИМОСТЬ ТИПОВ ДАННЫХ
Когда в операциях или операторах вашей программы присутствуют данные разных типов, то встает вопрос об их совместимости. В языке Турбо Паскаль этому вопросу уделяется очень большое внимание, разработаны строгие правила, определяющие идентичность, совместимость в общем случае и совместимость по присваиванию различных типов.
Нам в начале курса достаточно помнить следующее. Переменные или выражения одного типа являются полностью совместимыми. Другим понятием является совместимость по присваиванию. Присваивание переменной одного типа выражения другого типа допустимо в том случае, когда множество значений второго типа является подмножеством значений первого. Например, результат сложения двух целых переменных типа integer и word может присваиваться в целую переменную, тип которой только longint, поскольку только этот целый тип содержит в себе весь возможный диапазон значений как для типа integer, так и для типа word. Также, можно присваивать целое выражение в вещественную переменную или символьное выражение в строку.