Типы данных
Структура рассмотренной программы имеет следующий вид:
Program MyFirstProgram; {Раздел описаний} begin {Раздел операторов} end.
Слова Program, begin и end выделяют две части программы – раздел описаний и раздел операторов. Такая структура обязательна для любой программы, что является следствием жесткого требования языка: любой нестандартный идентификатор, используемый в исполняемых операторах, должен быть предварительно описан в разделе описаний. (Стандартные идентификаторы связаны с предварительно объявленными объектами и входят в стандартную библиотеку Турбо Паскаля. Таким, например, является идентификатор WriteLn. Стандартные идентификаторы, если они используются в программе, описывать не нужно).
Требование предварительного описания идентификаторов кажется чрезмерно строгим и делающим язык менее свободным. На самом деле в нем проявляется тенденция развития языков программирования в сторону повышения надежности создаваемых программ. Кто программировал на Фортране или Бэйсике (в этих языках не требуется предварительное описание идентификаторов), знает, как порой бывает трудно обнаружить в большой программе ошибочно введенный или пропущенный символ в идентификаторе. Если, например, всюду в программе используется переменная с именем EPSILON, а в одном месте ошибочно написано EPSLION, то программа может благополучно откомпилироваться и даже давать почти правдоподобный результат для некоторых наборов данных, но в какой-то момент начнет вести себя странно. Обязательное предварительное описание идентификаторов в Турбо Паскале защищает программы от такого рода ошибок и повышает их надежность.
Описать идентификатор – это значит указать тип связанного с ним объекта программы (константы или переменной). Понятие типа – одно из фундаментальных понятий Турбо Паскаля. В гл.4 подробно рассмотрены различные типы; чтобы пояснить описываемые ниже особенности языка и при этом не слишком забегать вперед, укажем, что тип определяет, во-первых, способ внутреннего для компьютера представления объекта и, во-вторых, действия, которые разрешается над ним выполнять.
В рассматриваемых далее в этой главе программах понадобятся следующие типы данных:
- INTEGER – целочисленные данные, во внутреннем представлении занимают 2 байта; диапазон возможных значений – от -32768 до +32767; данные представляются точно;
- REAL – вещественные данные, занимают 6 байт; диапазон возможных значений модуля – от 2.9Е-39 до 1.7Е+38; точность представления данных – 11…12 значащих цифр;
- CHAR – символ, занимает 1 байт;
- STRING – строка символов, занимает МАХ+1 байт, где МАХ – максимальное число символов в строке;
- BOOLEAN – логический тип, занимает 1 байт и имеет два значения: FALSE (ложь) и TRUE (истина).
Тип константы определяется способом записи ее значения. Например:
const c1 = 17; с2 = 3.14; с3 = 'А'; с4 = '3.14 '; с5 = False;
При анализе этого фрагмента программы компилятор отнесет первую константу к типу INTEGER, вторую – к типу REAL, третью – к CHAR, четвертую – к STRING и последнюю – к BOOLEAN. Признаком, позволяющим отнести константу к REAL или к INTEGER, является наличие или отсутствие десятичной точки в ее значении. Разумеется, константы С2 и С4 относятся к разным типам: С2 – к REAL (в константе есть десятичная точка), а С4 – к STRING (константа обрамлена апострофами). Константу С3 компилятор будет считать относящейся к типу CHAR: одиночный символ в апострофах относится к CHAR, в то время как несколько символов – к STRING.
В отличие от константы переменная именует объект программы, который может изменять свое значение в ходе счета. При описании переменных за идентификатором ставятся двоеточие и имя типа. Несколько однотипных переменных можно объединять в список, разделяя их запятыми. В начале раздела описания переменных должно стоять зарезервированное слово VAR (VARiables – переменные). Например:
var sigma:Real; а,b,с,d:Char; text1:String[15]; text2:String; flag:Boolean;.
Как уже говорилось, тип данных определяет длину внутреннего представления соответствующих переменных. В частности, длина внутреннего представления переменных типа STRING (строка символов) зависит от максимального числа символов, которые могут составлять строку. В приведенном выше примере переменная text 1 описана с указанием ее максимальной длины (15 символов), а в описании переменной text2 максимальная длина не указана и компилятор установит для нее предельно допустимую в Турбо Паскале длину – 255 символов.