Домой / Основные настройки / Данные и их типы в паскале. Типы данных в паскале. Структурированные типы языка

Данные и их типы в паскале. Типы данных в паскале. Структурированные типы языка

Простейшим числовым типом данных в Паскале являются целые типы, предназначенные для хранения целых чисел. Целые числа в Паскале принято делить на два типа: со знаком и без знака. Числа со знаком – это целочисленный тип, в который входят как положительные, так и отрицательные числа, без знака – только положительные.

Ниже приведены две таблицы с целочисленными типами. Сначала выпишем типы целых чисел со знаком :


Тип Байт Диапазон значений
shortint 1 -128 ... 127
smallint 2 -32768 ... 32767
integer, longint 4 -2147483648 ... 2147483647
int64 8 -9223372036854775808 ... 9223372036854775807

А это целочисленные типы без знака :


Тип Байт Диапазон значений
byte 1 0 ... 255
word 2 0 ... 65535
longword, cardinal 4 0 ... 4294967295
uint64 8 0 ... 18446744073709551615

Как видно, в первой колонке стоит название типа, во второй – количество байт, занимаемое в памяти числами этого типа, в третьей – соответственно диапазон возможных значений. В числах со знаком есть два типа – integer и longint (буквально «целый» и «длинный целый»), которые являются синонимами. То есть вы можете в разделе описаний использовать как одно название, так и другое.

Аналогично во второй таблице (неотрицательные целые числа в Паскале) есть также два целочисленных типа-синонима размером 4 байта – longword и cardinal , поэтому используйте либо одно, либо другое.

Ещё можно заметить, что если числа первой таблицы условно перенести в правую часть относительно нуля (сдвинуть интервал вправо так, чтобы минимальным числом оказался 0), то мы получим интервалы целых чисел второй таблицы, лежащие в соответствующих строках. Так, если в 1-байтовом типе shortint к левой и правой границам прибавить 128, то получим тип byte (0..255); если в 2-байтовом типе smallint к границам прибавить 32768, то получим соответствующий 2-байтовый тип без знака word (0..65535) и т.д.

Всё это случается потому, что в целочисленных типах без знака числа могут быть разделены ровно надвое: половина чисел – в отрицательную часть, половина – в положительную. А почему тогда в числах со знаком левая граница по абсолютной величине на 1 больше за правую границу? – спросите вы. Например, в типе shortint минимум -128, тогда как максимум всего 127 (по модулю на 1 меньше). А это потому, что в правую часть входит также и 0, и об этом надо знать и помнить.

Так зачем же целые числа в Паскале делить на столько типов? Почему не обойтись, например, наибольшим из целочисленных типов в PascalABC.Net и Free Pascal – int64 – это почти 9 с половиной квинтиллионов (!) как с минусом, так и с плюсом? Да по простой банальной (?) причине – экономия памяти. Если вам надо сложить два небольших однобайтовых положительных числа (0..255), а вы эти числа описали как int64 (8 байт), то на это ушло в 8 раз больше памяти. А если программа большая и переменных много, то экономия памяти встает очень резко. Причем нет смысла использовать целые типы со знаком, если в задаче речь идет о таких величинах, как длина, масса, расстояние, время и т.п.

В разделе сайта Задачник Абрамяна (подраздел Integer) понаблюдайте за использованием различных целочисленных типов в Паскале.

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

Паскаль — это типизированный язык программирования. Это означает, что переменные, в которых хранятся данные, имеют определенный тип данных. Т.е. программе напрямую надо указать, какие данные могут храниться в той или иной переменной: текстовые данные, числовые данные, если числовые — то целочисленные или дробные, и т.п. Это необходимо в первую очередь для того чтобы компьютер «знал», какие операции можно выполнять с этими переменными и как правильно их выполнять.

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

Рассмотрим наиболее распространенные в Pascal типы данных.

Целочисленные типы данных в Паскаль

Тип Диапазон Требуемая память (байт)
byte 0..255 1
shortint -128..127 1
integer -32768.. 32767 2
word 0..65535 2
longint -2147483648..2147483647 4

Нужно иметь в виду, что при написании программ в паскале integer (в переводе с англ. целое) является наиболее часто используемым, так как диапазон значений наиболее востребуем. Если необходим более широкий диапазон, используется longint (long integer, в переводе с англ. длинное целое). Тип byte в Паскале используется, когда нет необходимости работать с отрицательными значениями, то же самое касается и типа word (только диапазон значений здесь значительно больше).

Примеры того, как описываются (объявляются) переменные в Паскале:

program a1; var x,y:integer; {целочисленный тип} myname:string; {строковый тип} begin x:=1; y:=x+16; myname:="Петр"; writeln ("имя: ",myname, ", возраст: ", y) end.

Результат:
имя: Петр, возраст: 17

Комментарии в Паскале

Обратите внимание на то, как используются комментарии в Паскале . В примере комментарии, т.е. служебный текст, который «не видим» для компилятора, заключаются в фигурные скобки. Обычно комментарии делаются программистами с целью пояснения фрагментов кода.

Задача 3. Население Москвы равняется а=9000000 жителей. Население Нью-Васюков равняется b=1000 жителей. Напишите программу, которая определяет разницу в числе жителей между двумя городами. Используйте переменные величины

Вещественные типы данных в Паскаль

Вещественные числа в Паскале и вообще в программировании — это название дробных чисел.

Тип Диапазон Требуемая память (байт)
real 2.9 * 10E-39 .. 1.7 * 10E38 6
single 1.5 * 10 E-45 .. 3.4 * 10E38 4
double 5 * 10E-324 .. 1.7 * 10E308 8
extended 1.9 * 10E-4951 .. 1.1 * 10E4932 10

Тип real в Паскале — наиболее часто используемый из вещественных типов.

Выше были представлены простые типы данных в Паскаль, к которым относятся:

  • Порядковые
  • Целые
  • Логические
  • Символьные
  • Перечисляемые
  • Интервальные
  • Вещественные

Для вывода значений переменных вещественного типа обычно используется форматированный вывод:

  • в формате используется либо одно число, означающее число позиций, отводимых на это число в экспоненциальной форме;
  • p:=1234.6789; Writeln(p:6:2); {1234.68}

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

    Константы в Паскале

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

    Объявление константы в Паскале происходит до объявления переменных (до служебного слова var) и выглядит следующим образом:

    Пример описания константы в Паскале:

    1 2 3 4 5 6 const x= 17 ; var myname: string ; begin myname: = "Петр" ; writeln ("имя: " , myname, ", возраст: " , х) end .

    const x=17; var myname:string; begin myname:="Петр"; writeln ("имя: ",myname, ", возраст: ", х) end.

    «Красивый» вывод целых и вещественных чисел

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


    Арифметические операции в Паскале

    Порядок выполнения операций

    1. вычисление выражений в скобках;
    2. умножение, деление, div, mod слева направо;
    3. сложение и вычитание слева направо.

    Стандартные арифметические процедуры и функции Pascal

    Здесь стоит более подробно остановиться на некоторых арифметических операциях.

    • Операция inc в Паскале, произносимая как инкремент, это стандартная процедура pascal, которая обозначает увеличение на единицу.
    • Пример операции inc:

      x:=1; inc(x); {Увеличивает x на 1, т.е. x=2} writeln (х)

      Более сложное использование процедуры inc:
      Inc(x,n) где x — порядкового типа, n — целого типа; процедура inc увеличивает x на n.

    • Аналогично работает процедура Dec в Паскале: Dec(x) — уменьшает x на 1 (декремент) или Dec(x,n) — уменьшает x на n.
    • Оператор abs представляет собой модуль числа. Работает следующим образом:
    • a: =- 9 ; b: = abs (a) ; { b = 9}

      a:=-9; b:=abs(a); { b = 9}

    • Оператор div в паскале является часто используемым, так как целый ряд задач связан с действием деление нацело.
    • Остаток от деления или оператор mod в pascal тоже незаменим при решении ряда задач.
    • Заслуживающей внимания является стандартная функция odd Паскаля, которая определяет, является ли целое число нечетным. Т. е. возвращает true (истина) для нечетных чисел, false (ложь) для четных чисел.
    • Пример использования функции odd:

      var x:integer; begin x:=3; writeln(sqr(x)); {ответ 9} end.

    • Операция возведение в степень в Паскале отсутствует как таковая. Но для того чтобы возвести в степень число можно использовать функцию exp .
    • Формула такая: exp(ln(a)*n) , где а — число, n — степень (а>0).

      Однако в компиляторе pascal abc возведение в степень осуществляется значительно проще:

      var x:integer; begin x:=9; writeln(sqrt(x)); {ответ 3} end.

    Задача 4. Известны размеры спичечной коробки: высота — 12.41 см., ширина — 8 см., толщина — 5 см. Вычислить площадь основания коробки и ее объем
    (S=ширина * толщина, V=площадь*высота)

    Задача 5. В зоопарке три слона и довольно много кроликов, причем количество кроликов часто меняется. Слону положено съедать в сутки сто морковок, а кролику — две. Каждое утро служитель зоопарка сообщает компьютеру количество кроликов. Компьютер в ответ на это должен сообщить служителю общее количество морковок, которые сегодня нужно скормить кроликам и слонам.

    Задача 6. Известно, что x кг конфет стоит a рублей. Определите, сколько стоит y кг этих конфет, а также, сколько килограмм конфет можно купить на k рублей. Все значения вводит пользователь.

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

    Определим понятие типа данных . Как уже известно, все объекты программы (переменные, константы и т.д.) должны быть описаны.

    Описания информируют транслятор, во-первых, о существовании используемых переменных и других объектов, во-вторых, указывают на свойства этих объектов. Например, описание переменной, значение которой является числом, указывает на свойства чисел. Формально числа могут быть целыми и вещественными (дробными). В Паскале, как и в других языках программирования, числа разделены на два типа: целые (зарезервированное слово integer) и вещественные (зарезервированное слово real).

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

    Например, пусть переменная x имеет тип real и ее значение равно единице: x=1 . Соответствующее значение в памяти компьютера может быть и 0.999999999 , и 1.000000001 , и 1.000000000 . Но если переменная x будет объявлена как переменная целого типа, то единица в компьютере будет представлена абсолютно точно и переменная x не сможет принимать вещественные (дробные) значения – ведь она была описана как переменная целого типа.

    Таким образом, тип данных определяет:

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

    Введение типов данных является одной из базовых концепций языка Паскаль, заключающейся в том, что при выполнении операции присваивания переменной значения выражения, переменная и выражение должны быть одного типа. Такая проверка выполняется компилятором, что значительно упрощает поиск ошибок и приводит к повышению надежности программы.

    Множество типов данных языка Турбо Паскаль можно разделить на две группы:

    • стандартные (предопределенные) типы ;
    • типы, определяемые пользователем (пользовательские типы) .

    К стандартным типам Турбо Паскаль относят:

    • целый тип – integer ;
    • вещественный тип – real ;
    • символьный тип – char ;
    • логический тип – boolean ;
    • строковый тип – string ;
    • указательный тип – pointer ;
    • текстовый тип – text .

    Пользовательские типы данных представляют собой различные комбинации стандартных типов.

    К пользовательским типам относят:

    • перечисляемый тип;
    • интервальный тип;
    • указательный тип;
    • структурированные типы;
    • процедурный тип.

    Замечание . Возможна и другая классификация типов данных, согласно которой типы делятся на простые и сложные.

    К простым типам относят: целый тип, вещественный тип, символьный тип, логический тип, перечислимый тип и интервальный тип.

    Сложный тип представляет собой различные комбинации простых типов (массивы, записи, множества, файлы и т.д.)

    Стандартные типы

    Стандартный тип данных определен самим языком Паскаль. При использовании в программе стандартных типов достаточно указать подразделы необходимых типов (const , var) и далее описать используемые в программе константы и переменные. Необходимость использования подраздела Type отсутствует.

    Например, если в программе используются только переменные:

    i,j – integer (целые);

    x,y - real (вещественные);

    t,s - char (символьные);

    a,b – boolean (логические),

    то необходим только подраздел переменных – Var . Поэтому в описательной части программы объявления переменных записываются следующим образом:

    Целые типы

    Данные этого типа могут принимать только значения целых чисел. В компьютере значения целого типа представляются абсолютно точно. Если переменная отрицательная, то перед ней должен стоять знак «–», если переменная положительная, то знак «+» можно опустить. Данный тип необходим в том случае, когда какую-то величину нельзя представить приближенно – вещественным числом. Например, число людей, животных и т.д.

    Примеры записи значений целых чисел: 17, 0, 44789, -4, -127.

    Диапазон изменения данных целого типа, определяется пятью стандартными типами целых чисел и представлен в таблице:

    Тип Диапазон Размер в байтах
    Shortint -128...+128 1
    Integer -32768...32767 2
    Longint -2147483648...2147483647 4
    Byte 0...255 1
    Word 0...65535 2

    Последние два типа служат для представления только положительных чисел, а первые три как положительных, так и отрицательных чисел.

    В тексте программы или при вводе данных целого типа значения записываются без десятичной точки . Фактические значения переменной не должны превышать допустимых значений того типа (Shortint , Integer , Longint , Byte , Word), который был использован при описании переменной. Возможные превышения при вычислениях ни как не контролируются, что приведет к неверной работе программы.

    Пример использования переменной целого типа

    Var a:integer; b:word; c:byte; Begin a:=300; {a присвоено значение 300} b:=300; {b присвоено значение300} c:=200; {c присвоено значение200} a:=b+c; {a присвоено значение500} c:=b; {Ошибка! Переменная c может принимать значения не более 255. Здесь переменной c присваивается значение 500,что вызовет переполнение результата.} End.

    Вещественные типы

    Значения вещественных типов в компьютере представляются приближенно. Диапазон изменения данных вещественного типа определяется пятью стандартными типами: вещественный (Real), с одинарной точностью (Single), двойной точностью (Double), с повышенной точностью (Extended), сложный (Comp) и представлен в таблице:

    Тип Диапазон Число значащих цифр Размер в байтах
    Real 2.9E-39...1.7E+38 11-12 6
    Single 1.5E-45...3.4E+38 >7-8 4
    Double 5E-324...1.7E+308 15-16 8
    Extended 3.4E-4951...1.1E+4932 19-20 10
    Comp -2E+63+1...+2E+63-1 19-20 8

    Вещественные числа могут быть представлены в двух форматах: с фиксированной и плавающей точкой.

    Формат записи числа с фиксированной точкой совпадает с обычной математической записью десятичного числа с дробной частью. Дробная часть отделяется от целой части с помощью точки, например

    34.5, -4.0, 77.001, 100.56

    Формат записи с плавающей точкой применяется при записи очень больших или очень малых чисел. В этом формате число, стоящее перед символом «E», умножается на число 10 в степени, указанной после символа «E».

    1E-4 1*10-4
    3.4574E+3 3.4574*10+3
    4.51E+1 4.51*10+1

    Примеры чисел с плавающей точкой:

    Число Запись на Паскале
    0,0001 1E-4
    3457,4 34574E-1
    45,1 451E-1
    40000 4E+4
    124 0.124E+3
    124 1.24E+2
    124 12.4E+1
    124 1240E-1
    124 12400E-2

    В таблице с 5 по 9 строку показана запись одного и того же числа 124. Изменяя положение десятичной точки в мантиссе (точка «плывет», отсюда следует название «запись числа с плавающей точкой») и одновременно изменяя величину порядка, можно выбрать наиболее подходящую запись числа.

    Пример описания переменных вещественного типа.

    Символьный тип

    Значениями символьного типа являются символы, которые можно набрать на клавиатуре компьютера. Это позволяет представить в программе текст и производить над ним различные операции: вставлять, удалять отдельные буквы и слова, форматировать и т.д.

    Символьный тип обозначается зарезервированным словом Char и предназначен для хранения одного символа. Данные символьного типа в памяти занимают один байт.

    Формат объявления символьной переменной:

    <имя переменной>: Char;

    При определении значения символьной переменной символ записывается в апострофах. Кроме того, задать требуемый символ можно указанием непосредственно его числового значения ASCII-кода. В этом случае необходимо перед числом, обозначающим код ASCII необходимого символа, поставить знак #.

    Пример использования переменных символьного типа:

    Var c:char; {c – переменная символьного типа} Begin c:=’A’; {переменной c присваивается символ ’A’} c:=#65; {переменной c также присваивается символ A. Его ASCII код равен 65} c:=’5’; {переменной c присваивается символ 5, End. здесь 5 это уже не число}

    Логический тип

    Логический тип данных называют булевским по имени английского математика Джорджа Буля, создателя области математики – математической логики.

    Формат объявления переменной логического типа:

    <имя переменной>: boolean;

    Данные этого типа могут принимать только два значения:

    • True – истина;
    • False – ложь.

    Логические данные широко используются при проверке правильности некоторых условий и при сравнении величин. Результат может оказаться истинным или ложным.

    Для сравнения данных предусмотрены следующие операции отношений:

    Пример использования операций отношения:

    отношение 5>3 , результат true (истина);

    отношение 5=3 , результат false (ложь).

    Пример использования переменных логического типа.

    Var a,b:boolean; {a,b – переменные логического типа} Begin a:=Тrue; {переменной a присваивается значение «истина»} b:=false; {переменной b присваивается значение «ложь»} End.

    Константы

    В качестве констант могут использоваться целые, вещественные числа, символы, строки символов, логические константы.

    Константу необходимо объявить в описательной части с помощью зарезервированного слова const.

    Формат объявления константы

    Const <имя константы>= <значение>;

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

    Const {объявление раздела констант} year=2003; {константа целого типа, т.к. нет в записи десятичной точки} time=14.05; {константа вещественного типа} N=24; {константа целого типа, т.к. нет в записи десятичной точки} P=3.14; {константа вещественного типа} A=true; {константа логического типа} str1=’7’; {константа символьного типа} str2=’A’; {константа символьного типа} str3=’Turbo’; {константа строкового типа} Var {объявление раздела переменных} X,y:integer; {переменные целого типа}

    Пользовательские типы

    Из совокупности пользовательских типов рассмотрим только

    • перечисляемый тип;
    • интервальный тип.

    Эти два типа нам будут необходимы при изучении массивов.

    Перечисляемый тип

    Перечисляемый тип данных описывает новые типы данных, значения которых определяет сам программист. Перечисляемый тип задается перечислением тех значений, которые он может получать. Каждое значение именуется некоторым идентификатором и располагается в списке, обрамленном круглыми скобками. Перечисляемый тип относится к типам данных, определяемым пользователем, поэтому объявление этого типа начинается зарезервированным словом TYPE .

    Формат перечисляемого типа:

    <имя типа>= (константа1, константа2,..., константаN);

    где
    константа1 , константа2 ,..., константаN – упорядоченный набор значений идентификаторов, рассматриваемых как константы.

    Пример описания перечисляемого типа:

    Type ball=(one, two, three, four, five); var t:ball;

    Здесь ball – имя перечисляемого типа; one , two , three , four , five – константы; t – переменная, которая может принимать любое значение констант.

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

    • константами числового типа: 1, 2, 3, 4 и т. д;
    • константами символьного типа: "a", "s", "1", "3" и т. д.;
    • константами строкового типа: "first", "second" и т.д.

    Кроме того, к значениям этого типа не применимы арифметические операции и стандартные процедуры ввода и вывода Read , Write .

    Пример использования переменных перечисляемого типа:

    Type days = (Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday); Var day: days; begin if day = Sunday then writeln(‘Сегодня Воскресенье!’); End.

    Элементы, входящие в определение перечисляемого типа, считаются упорядоченными в той последовательности, в которой они перечисляются. Нумерация начинается с нуля. Поэтому в приведенном примере дни недели имеют следующие порядковые номера

    Для программного определения порядкового номера используется функция Ord() .

    В нашем примере порядковые номера равны:

    Ord(Monday) = 0;

    Ord(Saturday) = 5;

    Ord(Sunday) = 6.

    Интервальный тип

    Если какая-то переменная принимает не все значения своего типа, а только значения, содержащиеся в некотором диапазоне, то такой тип данных называется интервальным типом. Часто интервальный тип называют ограниченным типом и типом-диапазоном. Интервальный тип задается границами своих значений:

    <минимальное значение>..<максимальное значение>

    • два символа «..» рассматриваются как один символ, поэтому между ними недопустимы пробелы;
    • левая граница диапазона не должна превышать его правую границу.

    Интервальный тип относится к типам данных, определяемых пользователем, поэтому объявление этого типа начинается со служебного слова TYPE .

    Пример описания интервального типа:

    Type digit = 1..10; month = 1..31; lat = ’A’..’Z’;

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

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

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

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

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

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

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

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

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

    Например:

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

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

    type Int = Integer;

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

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

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

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

    Стандартные подпрограммы, обрабатывающие порядковые типы данных

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

    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) :

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

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

    1. Логический тип Boolean имеет два значения: False и True , и для них выполняются следующие равенства:
    2. В символьный тип Char входит 256 символов расширенной таблицы ASCII (например, "a", "b", "я", "7", "#"). Номер символа, возвращаемый функцией Ord () , совпадает с номером этого символа в таблице ASCII .
    3. Целочисленные типы данных сведём в таблицу:
    4. Перечисляемые типы данных задаются в разделе type явным перечислением их элементов. Например:

      type Week = (sun, mon, tue, wed, thu, fri, sat); 0 1 2 3 4 5 6

      Напомним, что для этого типа данных:

    5. Интервальные типы данных задаются только границами своего диапазона. Например:

      type Month = 1 .. 12 ;
      Budni = Mon .. Fri;

    6. Программист может создавать и собственные типы данных, являющиеся комбинацией нескольких стандартных типов. Например:

      type Valid_For_Identifiers = "a" .. "z" , "A" .. "Z" , "_" , "0" .. "9" ;

    Этот тип состоит из объединения нескольких интервалов, причём в данном случае изменён порядок латинских букв: если в стандартном типе

    3.2. Простые типы данныхв Turbo Pascal 7

    Простой тип определяет упорядоченное множество значений параметра. В Turbo Pascal имеются следующие группы простых типов:

    • целые типы;
    • логический тип;
    • символьный тип;
    • перечисляемый тип;
    • тип-диапазон;
    • вещественные типы.

    Все простые типы, за исключением вещественных, называются порядковыми типами. Для величин порядковых типов определены стандартные процедуры и функции: Dec, Inc, Ord, Pred, Succ (см. п. 13.1).

    3.2.1. Целые типы

    В отличие от языка Паскаль, где определен единственный целый тип Integer, в Turbo Pascal имеется пять стандартных типов целых чисел: Shortint, Integer, Longint, Byte, Word. Характеристики этих типов приведены в табл. 2.

    Таблица 2. Целые типы данных

    Тип Диапазон Формат Размер в байтах
    Shortint -128 .. 127 Знаковый 1
    Integer -32768 .. 32767 Знаковый 2
    Longint -2147483648 .. 2147483647 Знаковый 4
    Byte 0 .. 255 Беззнаковый 1
    Word 0 .. 65535 Беззнаковый 2

    3.2.2. Логический тип

    Стандартный логический тип Boolean (размер - 1 байт) представляет собой тип данных, любой элемент которого может принимать лишь два значения: True и False. При этом справедливы следующие условия:
    False Ord (False) = 0
    Ord (True) = 1
    Succ (False) = True
    Pred (True) = False

    В Turbo Pascal 7.0 добавлено еще три логических типа ByteBool (размер - 1 байт), WordBool (размер - 2 байта) и LongBool (размер - 4 байта). Они введены для унификации с другими языками программирования и со средой Windows. Отличие их от стандартного типа Boolean заключается в фактической величине параметра этого типа, соответствующей значению True. Для вех логических типов значению False соответствует число 0, записанное в соответствующее количество байтов. Значению же True для типа Boolean соответствует число 1, записанное в его байт, а для других типов значению True соответствует любое число, отличное от нуля (хотя функция Ord в этом случае дает значение 1).

    3.2.3. Символьный тип

    Стандартный символьный тип Char определяет полный набор ASCII-символов. Функция Ord от величины типа Char дает код соответствующего символа. Сравниваются величины символьного типа по своим кодам.

    3.2.4. Перечисляемый тип

    Перечисляемый тип не является стандартным и определяется набором идентификаторов, с которыми могут совпадать значения параметра. Список идентификаторов указывается в круглых скобках, идентификаторы разделяются запятыми:

    type
    = ();)

    Важно, в каком порядке перечислены идентификаторы при определении типа, т. к. первому идентификатору присваивается порядковый номер 0, второму - 1 и т. д. Один и тот же идентификатор можно использовать в определении только одного перечисляемого типа. Функция Ord от величины перечисляемого типа дает порядковый номер ее значения.

    Пример. Перечисляемый тип.

    type Operat = (Plus, Minus, Mult, Divide);

    Логический тип является частным случаем перечисляемого типа:

    type Boolean = (False, True);

    3.2.5. Тип-диапазон

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

    type = . . ;

    Минимальное значение при определении такого типа не должно быть больше максимального.

    Пример. Определение типов-диапазонов.

    type
    Dozen = 1..12; {числа от 1 до 12}
    AddSub = Plus..Minus; {операции сложения и вычитания}

    3.2.6. Вещественные типы

    В отличие от стандарта языка Паскаль, где определен только один вещественный тип Real, в Turbo Pascal имеется пять стандартных вещественных типов: Real, Single, Double, Extended, Соmр. Характеристики этих типов см. в табл. 3. Таблица 3. Вещественные типы данных

    Тип Диапазон Число значащих цифр Размер в байтах
    Real 2.9*10-39..1.7*1038 11-12 6
    Single 1.5*10-45..3.4*1038 7-8 4
    Double 5.0*10-324.-1.7*10308 15-16 8
    Extended 3.4*10-4932..1.1*104932 19-20 10
    Comp -263+1..263-1 19-20 8

    Тип Comp фактически является типом целых чисел увеличенного диапазона, однако порядковым не считается.

    Типы Single, Double, Extended и Comp можно использовать в программах только при наличии арифметического сопроцессора или при включенном эмуляторе сопроцессора (см. пп. 17.5.8 и 17.7.1).