Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование лекции.doc
Скачиваний:
49
Добавлен:
12.11.2019
Размер:
5.53 Mб
Скачать

3.2. Понятие типа данных

Фундаментальным понятием программирования является тип данных. Тип данных – множество значений, которое может принимать константа, переменная, выражение, функция. Существуют языки со строгой типизацией (С, Pascal, Delphi) и без нее (VisualBASIC, Clipper, FoxPro, LISP). В языках со строгой типизацией программист явно описывает множество значений, которые может принимать каждая переменная. Транслятор языка следит за тем, чтобы "стулья не складывались с помидорами", то есть отслеживает правильность выполняемых действий по типу данных. Если неопытный программист напишет следующее:

VAR a:REAL; b:STRING;

BEGIN

a:=10.0;

b:='20.0';

Label1.Caption:=a+b;

END;

то еще до запуска программы транслятор выдаст сообщение об ошибке "Type mismatch". Строгая типизация заметно повышает надежность программ и оберегает программиста от многих трудноуловимых ошибок.

Очевидно, понятие типа данных неразрывно связано с понятием переменной. Именно переменная обладает тем или иным типом. А что же такое "переменная"? Можно рассматривать переменную как "коробочку" в оперативной памяти компьютера (Рис. 4 .3), у которой есть:

  • имя или адрес;

  • размер;

  • тип данных;

  • текущее значение.

Рис. 4.3. Понятие переменной.

Размер "коробочки" измеряется в байтах. Если мы сделали переменную для хранения целых чисел в диапазоне от 0 до 255, на это понадобится ровно один байт. Почему? Потому что байт состоит из восьми бит. Каждый бит может принимать два значения: 0 и 1. Если мы переберем все комбинации битов в байте (от 00000000 до 11111111), то их число будет равно 28=256. Ноль - такое же равноправное число, из-за этого 256 значений представляют диапазон от 0 до 255. В Delphi описание такой переменной будет выглядеть примерно так:

VAR x:BYTE;

Тип данных можно сравнить с "формой коробочки". Если нам нужно хранить не целые числа, а символ (букву, цифру, знак препинания…), то размер коробочки останется точно таким же – один байт, и в нее поместится один из 256 символов, определенных кодовой таблицей компьютера. Но программа должна знать, что в данной коробочке лежат не числа, а коды символов. Для этого-то и нужен тип данных. Опишем нашу переменную следующим образом:

VAR x:CHAR;

Такое описание резервирует в памяти один байт и говорит компьютеру: "В этом байте лежат коды символов. С ними нельзя делать арифметические операции". Если мы по ошибке напишем

a:=b+x;

транслятор Паскаля тут же укажет на возникновение ошибки "Несоответствие типов".

Некоторые переменные занимают много места в памяти. Если нам нужно хранить текстовые строки, под каждую букву отводится один байт и еще один – для хранения длины строки. Еще большими бывают сложные типы данных – массивы, записи, объекты.

Рис. 4.4. Проф. Н. Вирт, создатель языка Паскаль.

Создатель языка Паскаль швейцарский ученый Никлаус Вирт (Рис. 4 .4) в своей книге [1] дает следующее определение строгой типизации данных:

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

  2. Тип любой величины, обозначаемой константой, переменной или выражением, может быть выведен по ее виду или по ее описанию; для этого нет необходимости проводить какие-либо вычисления.

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

Именно на таких принципах и построены языки Паскаль, Модула-2, Delphi.