IPB

> Лекция №2.1: Типы данных и операции
Чат
Форум
Загрузка...
 

страницы: 1 2 3

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

Содержание

Типы данных языка Pascal

Компиляторы языка Pascal требуют, чтобы сведения об объёме памяти, необходимой для работы программы, были предоставлены до начала её работы. Для этого в разделе описания переменных (var) нужно перечислить все переменные, используемые в программе. Кроме того, необходимо также сообщить компилятору, сколько памяти каждая из этих переменных будет занимать. А ещё было бы неплохо заранее условиться о различных операциях, применимых к тем или иным переменным...

Всё это можно сообщить программе, просто указав тип будущей переменной. Имея информацию о типе переменной, компилятор «понимает», сколько байт необходимо отвести под неё, какие действия с ней можно производить и в каких конструкциях она может участвовать.

Для удобства программистов в языке Pascal существует множество стандартных типов данных и плюс к тому возможность создавать новые типы.

Конструируя новые типы данных на основе уже имеющихся (стандартных или опять–таки определённых самим программистом), нужно помнить, что любое здание должно строиться на хорошем фундаменте. Поэтому сейчас мы и поговорим об этом «фундаменте».

На основании базовых типов данных строятся все остальные типы языка Pascal, которые так и называются: конструируемые.

Разделение на базовые и конструируемые типы данных в языке Pascal показано в таблице:

Типы данных, конструируемые программистом, описываются в разделе type по следующему шаблону:

type <имя_типа> = <описание_типа>;

Например:

type Lat_Bukvy = 'a' .. 'z', 'A' .. 'Z';

Базовые типы данных являются стандартными, поэтому нет нужды описывать их в разделе type. Однако при желании это тоже можно сделать, например, дав длинным определениям короткие имена. Скажем, введя новый тип данных

type Int = Integer;

можно немного сократить текст программы.

Стандартные конструируемые типы также можно не описывать в разделе type. Однако в некоторых случаях это всё равно приходится делать из–за требований синтаксиса. Например, в списке параметров процедур или функций конструкторы типов использовать нельзя (см. лекцию 8).

Порядковые типы данных

Среди базовых типов данных особо выделяются порядковые типы. Такое название можно обосновать двояко:

  1. Каждому элементу порядкового типа может быть сопоставлен уникальный (порядковый) номер. Нумерация значений начинается с нуля. Исключение — типы данных ShortInt, Integer и LongInt. Их нумерация совпадает со значениями элементов.
  2. Кроме того, на элементах любого порядкового типа определён порядок (в математическом смысле этого слова), который напрямую зависит от нумерации. Таким образом, для любых двух элементов порядкового типа можно точно сказать, который из них меньше, а который — больше2.
Стандартные подпрограммы, обрабатывающие порядковые типы данных

Только для величин порядковых типов определены следующие функции и процедуры:

  1. Функция Ord(x) возвращает порядковый номер значения переменной x (относительно того типа, к которому принадлежит переменная х).
  2. Функция Pred(x) возвращает значение, предшествующее х (к первому элементу типа неприменима).
  3. Функция Succ(x) возвращает значение, следующее за х (к последнему элементу типа неприменима).
  4. Процедура Inc(x) возвращает значение, следующее за х (для арифметических типов данных это эквивалентно оператору x := x + 1).
  5. Процедура Inc(x, k) возвращает k–е значение, следующее за х (для арифметических типов данных это эквивалентно оператору x := x + k).
  6. Процедура Dec(x) возвращает значение, предшествующее х (для арифметических типов данных это эквивалентно оператору x := x - 1).
  7. Процедура Dec(x, k) возвращает k–e значение, предшествующее х (для арифметических типов данных это эквивалентно оператору x := x - k).

На первый взгляд кажется, будто результат применения процедуры Inc(x) полностью совпадает с результатом применения функции Succ(x). Однако разница между ними проявляется на границах допустимого диапазона. Функция Succ(x) не применима к максимальному элементу типа, а вот процедура Inc(x) не выдаст никакой ошибки, но, действуя по правилам машинного сложения, прибавит очередную единицу к номеру элемента. Номер, конечно же, выйдет за пределы диапазона и за счёт усечения превратится в номер минимального значения диапазона. Получается, что процедуры Inc() и Dec() воспринимают любой порядковый тип словно бы «замкнутым в кольцо»: сразу после последнего вновь идёт первое значение.

Поясним всё сказанное на примере. Для типа данных

type Sixteen = 0 .. 15;

попытка прибавить 1 к числу 15 приведёт к следующему результату:

+ 1 1 1 1
        1
1 0 0 0 0

Начальная единица будет отсечена, и потому получится, что Inc(15)=0.

Аналогичная ситуация на нижней границе допустимого диапазона произвольного порядкового типа данных наблюдается для процедуры Dec(x) и функции Pred(x):

Dec(min_element) = max_element

Типы данных, относящиеся к порядковым

Опишем теперь порядковые типы данных более подробно.

  1. Логический тип Boolean имеет два значения: False и True, и для них выполняются следующие равенства:

    Ord(False) = 0, Ord(True) = 1, False < True,
    Pred(True) = False, Succ(False) = True,
    Inc(True) = False, Inc(False) = True,
    Dec(True) = False, Dec(False) = True.

  2. В символьный тип Char входит 256 символов расширенной таблицы ASCII (например, 'a', 'b', 'я', '7', '#'). Номер символа, возвращаемый функцией Ord(), совпадает с номером этого символа в таблице ASCII.
  3. Целочисленные типы данных сведём в таблицу:
    Тип данныхКоличествоДиапазон
    байтовбитов

    1

    8

    -128 .. 127

    -27 .. 27-1

    1

    8

    0 .. 255

    0 .. 28-1

    2

    16

    -32768 .. 32767

    -215 .. 215-1

    2

    16

    0 .. 65535

    0 .. 216-1

    4

    32

    -2147483648 .. 2147483647

    -231 .. 231-1

  4. Перечисляемые3 типы данных задаются в разделе type явным перечислением их элементов. Например:
    type Week = (sun, mon, tue, wed, thu, fri, sat);
                 0    1    2    3    4    5    6
    Напомним, что для этого типа данных:

    Inc(Sat) = Sun, Dec(Sun) = Sat.

  5. Интервальные типы данных задаются только границами своего диапазона. Например:
    type Month = 1 .. 12;
      Budni = Mon .. Fri;
  6. Программист может создавать и собственные типы данных, являющиеся комбинацией нескольких стандартных типов. Например:
    type Valid_For_Identifiers = 'a' .. 'z', 'A' .. 'Z', '_', '0' .. '9';

Этот тип состоит из объединения нескольких интервалов, причём в данном случае изменён порядок латинских букв: если в стандартном типе Char 'A' < 'a', то здесь, наоборот, 'a' < 'A'. Для величин этого типа выполняются следующие равенства:

Inc('z') = 'A'; Dec('0') = '_', Pred('9') = '8'; Ord('b') = 2.

Вещественные типы данных

Напомним, что эти типы данных являются арифметическими, но не порядковыми.

ТипКоличество байтовДиапазон (абсолютной величины)

4

1.5*10-45 .. 3.4*1038

6

2.9*10-39 .. 1.7*1038

8

5.0*10-324 .. 1.7*10308

10

3.4*10-4932 .. 1.1*104932

0

1 .. 263-1

Конструируемые типы данных

Эти типы данных (вместе с определёнными для них операциями) мы будем рассматривать далее на протяжении нескольких лекций:

Лекция 3. Массивы

Лекция 5. Строки и множества

Лекции 6 и 7. Файлы

Лекция 7. Записи

Лекция 8. Процедурный тип данных

Лекция 10. Указатели

страницы: 1 2 3

Примечания

  1. ^ Появляется в Turbo Pascal начиная с версии 7.0.
  2. ^ Математический порядок определён и на вещественных числах. Однако в программировании вещественные типы данных противопоставлены порядковым: возможность нумерации доминирует над возможностью упорядочивания.
  3. ^ Не путать с перечислимыми, то есть порядковыми.
 
 К началу страницы 
 

Код для вставки: :: :: :: ГОСТ ::
Поделиться: //
 



-
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"