Как в турбо паскале обозначаются целые величины. Turbo Pascal. Типы данных. Порядок выполнения операций

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

Что определяют типы данных Паскаль?

Во-первых, возможные значения переменных, функций, выражений, констант принадлежащих к исходному типу; во-вторых, он определяет внутреннюю форму представления данных в ЭВМ; и, в-третьих, определяет функции и операции, выполняющиеся над величинами, которые принадлежат тому или иному типу.

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

В Паскале различают следующие типы данных:

В таблице ниже представлены разновидности простых типов данных в Паскале и их характеристики:

Для порядковых типов, входящих в группу простых, характерны следующие свойства:

  1. Бесконечное множество значений порядкового типа - это есть ограниченное упорядоченное множество;
  2. Применима стандартная функция Ord (возвращает порядковый номер определенного значения в данном типе) к всевозможному порядковому типу;
  3. К всевозможному порядковому типу, когда появляется необходимость, можно применить стандартные функции Pred и Succ, возвращающие соответственно предыдущее и последующее значения;
  4. К всевозможному порядковому типу при случае можно применить стандартные функции Low и High, возвращающие соответственно наименьшее и наибольшее значения величин данного типа.

Эквивалентность и совместимость типов данных:

Немаловажное значение в языке Паскаль имеют понятия эквивалентности и совместимости типов. Дадим определения этим понятиям. Два типа TIP1 и ТIP2 называются эквивалентными в случае выполнения одного из условий:

  1. ТIP1 и ТIP2 — одно и то же имя типа;
  2. тип ТIP2 описан с применением типа ТIP1 при помощи либо равенства, либо последовательности равенств:

type TIP1 = Integer; TIP2 = TIP1; TIP3 = TIP2;

Теперь введем понятие совместимости типов. Типы называются совместимыми, если:

  1. эти типы являются эквивалентными;
  2. являются они либо целыми, либо действительными;
  3. один из двух типов - интервальный, другой является его базовым;
  4. оба типа являются интервальными с общим базовым;
  5. один из двух типов - строковый, другой - является символьным.

Ограничения на совместимость типов можно обойти при помощи приведения типов:

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

Тип данных определяет множество допустимых значений и множество допустимых операций.

Простые типы.

Простые типы делятся на ПОРЯДКОВЫЕ и ВЕЩЕСТВЕННЫЕ.

1. ПОРЯДКОВЫЕ ТИПЫ , в свою очередь, бывают:

а) целые

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

Название типа

Длина (в байтах)

Диапазон значений

32 768...+32 767

2 147 483 648...+2 147 483 647

б) логический

Название этого типа BOOLEAN. Значениями логического типа может быть одна из логических констант: TRUE (истина) или FALSE (ложь).

в) символьный

Название этого типа CHAR - занимает 1 байт. Значением символьного типа является множество всех символов ПК. Каждому символу присваивается целое число в диапозоне 0…255. Это число служит кодом внутреннего представления символа.

2. ВЕЩЕСТВЕННЫЕ ТИПЫ .

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

Длина числового типа данных, байт

Название числового типа данных

Количество значащих цифр числового типа данных

Диапазон десятичного порядка числового типа данных

2*1063 +1..+2*1063 -1

СТРЕКТУРИРОВАННЫЕ ТИПЫ

Структурированные типы данных определяют упорядоченную совокупность скалярных переменных и характеризуются типом своих компонентов.

Структурированные типы данных в отличие от простых задают множества сложных значений с одним общим именем. Можно сказать, что структурные типы определяют некоторый способ образования новых типов из уже имеющихся.

Существует несколько методов структурирования. По способу организации и типу компонентов в сложных типах данных выделяют следующие разновидности: регулярный тип (массивы); комбинированный тип (записи); файловый тип (файлы); множественный тип (множества); строковый тип (строки); в языке Турбо Паскаль версии 6.0 и старше введен объектный тип (объекты).

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

1. Массивы

Массивы в Турбо Паскале во многом схожи с аналогичными типами данных в других языках программирования. Отличительная особенность массивов заключается в том, что все их компоненты суть данные одного типа (возможно структурированного). Эти компоненты можно легко упорядочить и обеспечить доступ к любому из них простым указанием порядкового номера.

Описание массива задаётся следующим образом:

<имя типа> = array [<сп.инд.типов>] of <тип>

Здесь <имя типа> - правильный идентификатор;

Array, of – зарезервированные слова (массив, из);

<сп.инд.типов> - список из одного или нескольких индексных типов, разделённых запятыми; квадратные скобки, обрамляющие список, - требование синтаксиса;

<тип> - любой тип Турбо Паскаля.

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

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

2. Записи

Запись – это структура данных, состоящая из фиксированного числа компонентов, называемых полями записи. В отличие от массива, компоненты (поля) записи могут быть различного типа. Чтобы можно было ссылаться на тот или иной компонент записи, поля именуются.

Структура объявления типа записи такова:

< имя типа > = RECORD < сп . полей > END

Здесь <имя типа> - правильный идентификатор;

RECORD, END – зарезервированные слова (запись, конец);

<сп.полей> - список полей; представляет собой последовательность разделов записи, между которыми ставится точка с запятой.

3. Множества

Множества – это набор однотипных логических связанных друг с другом объектов. Характер связей между объектами лишь подразумевается программистом и никак не контролируется Турбо Паскалем. количество элементов, входящих в множество, может меняться в пределах от 0до 256 (множество, не содержащее элементов, называется пустым).именно непостоянством количества своих элементов множества отличаются от массивов и записей.

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

Описание типа множества имеет вид:

< имя типа > = SET OF < баз . тип >

Здесь <имя типа> - правильный индификатор;

SET, OF – зарезервированные слова (множество, из);

<баз.тип> - базовый тип элементов множества, в качестве которого может использоваться любой порядковый тип, кроме WORD, INTEGER и LONGINT.

Для задания множества используется так называемый конструктор множества: список спецификаций элементов множества, отделяемых друг от друга запятыми; список обрамляется квадратными скобками. Спецификациями элементов могут быть константы или выражения базового типа, а также – тип-диапазон того же базового типа.

4. Файлы

Под файлом понимается либо именованная область внешней памяти ПК, либо логическое устройство – потенциальный источник или приёмник информации.

Любой файл имеет три характерные особенности

    у него есть имя, что даёт возможность программе работать одновременно с несколькими файлами.

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

    длина вновь создаваемого файла никак не оговаривается при его объявлении и ограничивается только ёмкостью устройств внешней памяти.

Файловый тип или переменную файлового типа можно задать одним из трёх способов:

< имя >= FILE OF < тип >;

< имя >=TEXT;

<имя> = FILE;

Здесь <имя> - имя файлового типа (правильный индификатор);

FILE, OF – зарезервированные слова (файл, из);

TEXT – имя стандартного типа текстовых файлов;

<тип> - любой тип Турбо Паскаля, кроме файлов.

В зависимости от способа объявления можно выделить три вида файлов:

· типизированные файлы (задаются предложением FILE OF…);

· текстовые файлы (определяются типом TEXT);

· нетипизированные файлы (определяются типом FILE).

О преобразовании числовых типов данных Паскаля

В Паскале почти невозможны неявные (автоматические) преобразования числовых типов данных. Исключение сделано только для типа integer, который разрешается использовать в выражениях типа real. Например, если переменные описаны следующим образом:

Var X: integer; Y: real;

то оператор

будет синтаксически правильным, хотя справа от знака присваивания стоит целочисленное выражение, а слева – вещественная переменная, компилятор сделает преобразование числовых типов данных автоматически. Обратное же преобразование автоматически типа real в тип integer в Паскале невозможно. Вспомним, какое количество байт выделяется под переменные типа integer и real: под целочисленный тип данных integer выделяется 2 байта памяти, а под real – 6 байта. Для преобразования real в integer имеются две встроенные функции: round(x) округляет вещественное x до ближайшего целого, trunc(x) усекает вещественное число путем отбрасывания дробной части.

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

В Паскале существуют простые типы двух видов: ординальные типы и вещественный тип. Ординальный тип либо определяется программистом (перечисляемый тип или диапазонный), либо обозначается именем одного из трех предописанных ординальных типов: Boolean, Integer или Char . Вещественный тип обозначается именем предописанного типа Real .

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

Диапазонный (ограниченный) тип задается с помощью минимального и максимального значений, относящихся к предварительно описанному ординальному типу. Так порождается новый ординальный тип.

Ординальные типы данных

Ординальный тип данных описывает конечное и упорядоченное множество значений. Эти значения отображаются на последовательность порядковых номеров 0,1,2,...; исключение делается лишь для целых ординальных чисел, которые отображаются сами на себя. Каждый ординальный тип имеет минимальное и максимальное значение. Для всех значений, кроме минимального, существует предшествующее значение, а для всех значений, кроме максимального - последущее.

Предописанные функции succ, pred, ord воспринимают аргументы любого из ординальных типов:
succ(X) - дает следующее за X ординальное значение
pred(X) - дает предшествующее X ординальное значение
ord(X) - дает ординальный номер для X

Для всех ординальных типов существуют операции отношения = , = и > , причем предполагается, что оба операнда одного и того же типа.

Логический тип (Boolean)

Логическое значение - одно из двух истиностных значений, обозначаемых предопределенными именами false и true .

Существуют следующие логические операции, дающие логическое значение при применении их к логическим операндам:
and - логическое И
or - логическое ИЛИ
not - логическое НЕ

Также любая из операций отношения (= , = , > , in) поставляет логический результат.

Кроме того логический тип определен так, что false

Существуют и предописанные логические функции (т.е функции, дающие логический результат):
odd(F) - true, если целое F-нечетное и результат false, если F-четное
eoln(F) - проверка на конец строки
eof(F) - проверка на конец файла

Целый тип (Integer)

Тип integer включает в себя множество целых чисел.

При работе с целыми операндами следующие арифметические операции дают целые значения:
* - умножение
div - целая часть от деления
mod - остаток от деления
+ - сложение
- - вычитание

В Паскале существует также предописанная константа с именем MaxInt , которая содержит максимальное значение целого типа Integer и равна 32767

Целый результат дают и четыре важные предописанные функции:
abs(I) - абсолютное значение целого значения I
sgr(I) - целое значение I, возведенное в квадрат при условии, что I trunc(R) - выдает целую часть вещественного числа R
round(R) - выдает округленное целое. При этом: для R>0 означает trunc(R+0.5) , а для R

Если I - целое значение, то:
succ(I) - дает следующее целое значение (I+1)
pred(I) - дает предыдущее целое значение (I-1)

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

Значениями типа Char являются элементы конечного и упорядоченного множества символов. Значения такого типа обозначаются одним символом, заключенным в одни кавычки (апострофы). Если нужен сам апостроф, то он пишется дважды.
Примеры: "*" "G" "3" """" "X"

    Для типа Char справедливы следующие минимальные допущения:
  1. Десятичные цифры от 0 до 9 упорядочены в соответствии с их числовыми значениями и следуют одна за другой (например, succ("5") = "6").
  2. Могут существовать прописные буквы от "A" до "Z"; если это так, то они упорядочены в алфавитном порядке, но не обязательно следуют одна за другой (например, "A"
  3. Могут существовать строчные буквы от "a" до "z"; если это так, то они упорядочены в алфавитном порядке, но не обязательно следуют одна за другой (например, "a"

Для отображения заданного множества символов на порядковые номера и обратно существуют две предописанные функции:
ord(C) - дает порядковый номер символа С в упомянутом упорядоченном множестве символов
chr(I) - дает символ с порядковым номером I

Для аргументов типа Char предописанные функции pred и succ могут быть определены таким образом:
pred(C) = chr(ord(C)-I)
succ(C) = chr(ord(C)+I)

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

Вещественный тип (Real)

Значениями вещественного типа являются элементы определяемого реализацией подмножества вещественных чисел.

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

Если хотя бы один из операндов - вещественного типа (другой может быть и целым), следующие операции дают вещественный результат:
* - умножение
/ - деление (оба операнда могут быть целыми, но результат всегда вещественный)
+ - сложение
- - вычитание

Существуют предописанные функции, дающие вещественный результат при вещественном аргументе:
abs(R) - абсолютное значение R
sqr(R) - R в квадрате, если результат не выходит за диапазон вещественных чисел

А эти предописанные функции дают вещественный результат при целом или вещественном аргументе:
sin(X) - дает синус Х; Х выражено в радианах
cos(X) - дает косинус Х; Х выражено в радианах
arctan(X) - дает выраженное в радианах значение арктангенса от Х
ln(X) - дает значение натурального (с основанием е) логарифма для Х, Х>0
exp(X) - дает значение экспоненциальной функции (т.е в степени Х)
sqrt(X) - дает значение корня квадратного Х, Х>=0

Предупреждение. К вещественным аргументам нельзя применять функции pred, succ Нельзя использовать значения вещественного типа при индексировании массивов, для управления в цикле с параметром, для определения базового типа множеств, для индексирования в операторе варианта.

Типы данных языка 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" ;

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