Концепции типа данных

Элементарные конструкции языка

Конструкции языков программирования

Основные символы языка-буквы, цифры и специальные символы составляют его алфавит. ТУРБО ПАСКАЛЬ включает следующий набор основных символов:

1) 26 латинских строчных и 26 латинских прописных букв;

2) подчеркивание;

3) 10 цифр;

4) знаки операций;

5) ограничители;

6) спецификаторы;

7) служебные (зарезервированные) слова.

Кроме перечисленных, в набор основных символов входит пробел. Пробелы нельзя использовать внутри сдвоенных символов и зарезервированных слов.

 

 

Элементарные конструкции языков ПАСКАЛЬ и Си включают в себя имена, числа и строки. Имена (идентификаторы) называют элементы языка - константы, метки, типы, переменные, процедуры, функции, модули, объекты. Имя - это последовательность букв и цифр, начинающаяся с буквы. В именах может использоваться символ подчеркивание. Имя может содержать произвольное количество символов, но значащими являются 63 символа.

Не разрешается в языках ПАСКАЛЬ и Си использовать в качестве имен служебные слова и стандартные имена, которыми названы стандартные константы, типы, процедуры, функции и файлы. Для улучшения наглядности программы в нее могут вставляться пробелы. По крайней мере, один пробел требуется вставить между двумя последовательными именами, числами или служебными и стандартными именами. Пробелы нельзя использовать внутри имен и чисел.

Примеры имен языков ПАСКАЛЬ и Си:

 

A, b12, r1m, SIGMA, gamma, I80_86

 

Числа в языке ПАСКАЛЬ обычно записываются в десятичной системе счисления. Они могут быть целыми и действительными. Положительный знак числа может быть опущен. Целые числа записываются в форме без десятичной точки, например:

 

217, -45, 8954, +483.

 

Действительные числа записываются в форме с десятичной точкой или в форме с использованием десятичного порядка, который изображается буквой Е:

 

28.6, 0.65, -0.018, 4.0, 5Е12, -1.72Е9, 73.1Е-16.

 

ПАСКАЛЬ и Си допускают запись целых чисел и фрагментов действительных чисел в форме с порядком в шестнадцатеричной системе счисления:

 

$7F, $40, $ABC0.

 

Строки в языках ПАСКАЛЬ и Си - это последовательность символов, записанная между апострофами (в Си кавычками). Если в строке в качестве содержательного символа необходимо употребить сам апостроф, то следует записать два апострофа. Примеры строк:

 

'СТРОКА', 'STRING', 'ПРОГРАММА', 'АД''ЮТАНТ'.

 

 

В математике принято классифицировать переменные в соответствии с некоторыми важными характеристиками. Производится строгое разграничение между вещественными, комплексными и логическими переменными, между переменными, представляющими отдельные значения и множество значений и так далее. При обработке данных на ЭВМ такая классификация еще более важна. В любом алгоритмическом языке каждая константа, переменная, выражение или функция бывают определенного типа. В языке ПАСКАЛЬ существует правило: тип явно задается в описании переменной или функции, которое предшествует их использованию. Концепция типа языков ПАСКАЛЬ и Си имеет следующие основные свойства:

§ любой тип данных определяет множество значений, к которому принадлежит константа, которые может принимать переменная или выражение, или вырабатывать операция или функция;

§ тип значения, задаваемого константой, переменной или выражением, можно определить по их виду или описанию;

§ каждая операция или функция требует аргументов фиксированного типа и выдает результат фиксированного типа.

Отсюда следует, что транслятор может использовать информацию о типах для проверки вычислимости и правильности различных конструкций. Тип определяет:

§ возможные значения переменных, констант, функций, выражений, принадлежащих к данному типу;

§ внутреннюю форму представления данных в ЭВМ;

§ операции и функции, которые могут выполняться над величинами, принадлежащими к данному типу.

Обязательное описание типа приводит к избыточности в тексте программ, но такая избыточность является важным вспомогательным средством разработки программ и рассматривается как необходимое свойство современных алгоритмических языков высокого уровня. В языках ПАСКАЛЬ и Си существуют скалярные и структурированные типы данных. К скалярным типам относятся стандартные типы и типы, определяемые пользователем.

Стандартные типы включают целые, действительные, символьный, логические и адресный типы. Типы, определяемые пользователем, - перечисляемый и интервальный. Структурированные типы имеют четыре разновидности: массивы, множества, записи и файлы. Кроме перечисленных, TURBO PASCAL включает еще два типа - процедурный и объектный.

Из группы скалярных типов можно выделить порядковые типы, которые характеризуются следующими свойствами:

§ все возможные значения порядкового типа представляют собой ограниченное упорядоченное множество;

§ к любому порядковому типу может быть применена стандартная функция Ord, которая в качестве результата возвращает порядковый номер конкретного значения в данном типе;

§ к любому порядковому типу могут быть применены стандартные функции Pred и Succ, которые возвращают предыдущее и последующее значения соответственно;

§ к любому порядковому типу могут быть применены стандартные функции Low и High, которые возвращают наименьшее и наибольшее значения величин данного типа.

В языке ПАСКАЛЬ введены понятия эквивалентности и совместимости типов. Два типа Т1 и Т2 являются эквивалентными (идентичными), если выполняется одно из двух условий:

Т1 и Т2 представляют собой одно и то же имя типа;

тип Т2 описан с использованием типа Т1 с помощью равенства или последовательности равенств. Например:

 

type

T1 = Integer;

T2 = T1;

T3 = T2;

 

Менее строгие ограничения определены совместимостью типов. Например, типы являются совместимыми, если:

§ они эквивалентны;

§ являются оба либо целыми, либо действительными;

§ один тип - интервальный, другой - его базовый;

§ оба интервальные с общим базовым;

§ один тип - строковый, другой - символьный.

В ТУРБО ПАСКАЛЬ и Си ограничения на совместимость типов можно обойти с помощью приведения типов. Приведение типов позволяет рассматривать одну и ту же величину в памяти ЭВМ как принадлежащую разным типам. Для этого используется конструкция:

 

Имя_Типа(переменная или значение).

 

Например, Integer('Z') представляет собой значение кода символа 'Z' в двухбайтном представлении целого числа, а Byte(534) даст значение 22, поскольку целое число 534 имеет тип Word и занимает два байта, а тип Byte занимает один байт, и в процессе приведения старший байт будет отброшен.