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

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

Например:

n:integer;

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

[имя] = [тип]

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

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

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

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

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

Объекты являются также нововведением, и они предназначены для использования языка, как объектно-ориентированного языка.

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

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

Можно выделить 5 вещественных типов:

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

2358.8395

0.23588395*10 4

0.23588395*E 4

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

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

Порядковые типы объединяют в себе несколько простых типов. К ним относятся:

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

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

К значениям порядкового типа может быть применена функция ODD(x), которая возвращает порядковый номер аргумента x.

Функция PRED(x) - возвращает предшествующее значение порядкового типа. PRED(A) = 5.

Функция SUCC (x) - возвращает следующее значение порядкового типа. SUCC(A) = 5.

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

Значениям символьного типа является 256 символов из множества допустимых кодовой таблицей используемого компьютера. Начальная область этого множества, то есть диапазон от 0 до 127 соответствует множеству кодов ASCII, куда загружаются символы алфавита, арабских чисел и специальных символов. Символы начальной области всегда присутствуют на клавиатуре ПК. Старшая область называется альтернативной, она содержит символы национальных алфавитов и различные специальные символы, и символы псевдографики, не соответствующие коду ASCII.

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

C:= ’A’

Логический (булевский) тип

Имеются два значения булевского типа: Истина (True) и Ложь (False). Переменные данного типа задаются служебным словом BOOLEAN. Значение булевского типа занимают один байт в оперативной памяти. Значениям Истина и Ложь соответствуют числовые значения 1 и 0.

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

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

[минимальное-значение]…[максимальное-значение]

Тип-диапазон можно задавать в разделе Type, как определенный тип, а можно непосредственно в разделе Var.

При определении тип-диапазона необходимо руководствоваться:

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

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

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

Peoples = (men, women);

Первое значение - 0, второе значение - 1 и т.д.

Максимальная мощность 65535 значений.

Строковый тип

Строковый тип относится к группе структурированных типов и состоит из базового типа Char. Строковый тип не относится к порядковым типам. Он определяет множество символьных цепочек произвольной длины до 255 символов.

В программе строковый тип объявляется, словом String. Поскольку String является базовым типом, он описан в языке и объявление переменной типа String осуществляется в Var. При объявлении переменной строкового типа за String в квадратных скобках целесообразно указывать длину строки. Для указания используется целое число от 0 до 255.

Fam: String;

Указание длины строки позволяет компилятору отвести под данную переменную указанное число байтов в ОЗУ. Если длина строки не указана, то в этом случае компилятор отведет под значение этой переменной максимальное возможное число байт (255).

Порядковыми (ordinal) называются типы, которым соответствуют данные, поддерживающие понятия «предшествующее значение» и «последующее значение». Например, для целого числа 5 можно определенно сказать, что ему предшествует число 4, а следующее за ним - число 6. С другой стороны невозможно сказать, какое число непосредственно предшествует вещественному числу 5.0.

В Object Pascal определены следующие порядковые типы:

– целые типы;

– символьные типы;

– булевы типы;

– ограниченные типы.

Для порядковых типов определен ряд функций, которые отражают специфику этих данных. Перечень этих функций приведен в таблице 6.1.

Таблица 6.1 – Функции для порядковых типов данных

Продолжение таблицы 6.1

6.1.1.1 Целые типы данных

Целые типы данных используются для представления целых чисел. Типами, обеспечивающими максимальную производительность, являются Integer и Cardinal . Оба типа занимают в памяти 4 байта и принимают значения в дапазоне: для Integer -2147483648..2147483647, для Cardina l 0..4294967295. В тех случаях, когда нужен больший диапазон чисел, можно использовать тип int64 .

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

Для целочисленных данных можно использовать и логические операции, такие как and, or, xor . Результат будет определяться применением соответствующей операции к каждой паре соответствующих бит двоичного представления чисел. При выполнении таких операций часто используют 16-ричное представление чисел. Признаком 16-ричного числа является знак $ перед числом, например $FF соответствует десятичному числу 255, а $100 соответствует десятичному числу 256.

Можно применять и операции сдвигов двоичных кодов числа влево (shl ) или вправо (shr ) на заданное число разрядов. Сдвиг вправо на один разряд соответствует целочисленному делению числа на 2. Сдвиг влево на один разряд соответствует умножению на 2. Например, в результате выполнения инструкции $FF shr 4, получим результат $0F.

6.1.1.2 Символьные типы данных

Символьные типы предназначены для представления символов. В Object Pascal можно использовать две разновидности символов:

– Типу Char соответствует множество из 256 символов, в котором символы упорядочены в соответствии с таблицей кодировки ANSI (American National Standard Code for Information Interchange). Каждый символ этого типа занимает 1 байт. Соответствие между кодом и соответствующим ему символом задается так называемой таблицей кодировки символов. Первая половина таблицы (коды от 0 до 127) используется для управляющих символов, цифр, латинских букв и наиболее распространенных символов, таких, как знаки препинания, знаки математических операций и т.п. Вторая половина таблицы (коды от 128 до 255) используется для национальных алфавитов и других символов.

– Типу WideChar соответствует множество символов Unicode, в котором каждый символ занимает 2 байта, и естественно, эта таблица символов может содержать очень большой список символов. Им соответствуют коды в диапазоне от 0 до 65535. Первые 256 символов в этом множестве соответствуют символам ANSI с соответствующими кодами.

В наших лабораторных работах мы будем использовать только типChar. Фрагмент таблицы кодировки символов представлен ниже, в таблице 6.2.

Таблица 6.2 – Кодировка некоторых символов ANSI

Символ Код Двоичное представление 16-ричное представление
Отсутствие символа 0000 0000 $00
Пробел 0010 0000 $20
! 0010 0001 $21
0011 0000 $30
0011 0001 $31
0011 0010 $32
0011 0011 $33
A 0100 0001 $41
B 0100 0010 $42
C 0100 0011 $43
a 0110 0001 $61
b 0110 0010 $62
А $C0
Б $C1
а 1110 0000 $E0
б 1110 0001 $E1
я 1111 1111 $FF

Обратите внимание на порядок расположения символов в таблице. Такой порядок позволяет упорядочивать слова и идентификаторы в алфавитном порядке с помощью кода символа.

Символьные константы можно записывать разными способами. Для большинства символов можно использовать изображение этого символа, заключенное в одинарные кавычки. Например, ‘1’, ‘z’, ‘*’. Специальные символы удобно представлять с помощью их кода, в виде целого числа, которому предшествует знак #. Например, #0, #8, #13. Кроме того, любой символ может быть получен с помощью функции chr(), которой в качестве аргумента передается код символа. Например, chr(65) возвращает прописную латинскую букву ‘A’, а chr(255) – строчную букву ‘я’ кириллицы.

Обратное преобразование, то есть преобразование символа в код можно выполнить с помощью функции ord(). Например, ord(‘0’) вернет 48.

При вводе отдельных символов из компонентов класса TEdit, необходимо иметь в виду, что свойство text этих компонентов возвращает не символ, а строку символов. Чтобы получить отдельный символ этой строки следует использовать порядковый номер символа в строке, записывая его в квадратных скобках после имени строки символов. Например, Edit1.text.

Для символов применимы все операции сравнения. При этом сравниваются коды символов. Поэтому ‘б’ > ’Б’, и ‘а’ кириллицы больше, чем латинское ’a’.

Группы символов, которые соответствуют буквам, расположены таким образом, чтобы упростить преобразование больших букв в маленькие и наоборот. Разница в кодировке больших и маленьких букв и латинского и русского алфавита равна $20 или 32. Следовательно, чтобы превратить строчную букву в прописную, достаточно из ее кода вычесть 32. Число 32 можно и не помнить, так как его можно получить в результате вычитания кода прописной буквы из кода соответствующей строчной. Например, ord (z) – ord (Z), или оrd (a) – ord (A).

Особенность кодировки цифр состоит в том, что младший полубайт символа цифры соответствует ее числовому значению в двоичном представлении. Это позволяет легко преобразовывать код символа цифр в соответствующие числа с помощью логической операции and и маски $0F. Например, в результате операции ord (‘5’) and $0F получится число 5.

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

Ниже приведено два варианта такого преобразования.

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

var c: char; n: integer;

n:= ord(c)- 48; // что равносильно ord(c) –ord(‘0’);

Второй вариант такого преобразования использует операцию and $0F с маской $0F.

const maska = $0F; // константа равная двоичному числу 00001111

var c: char; n: integer;

n:= ord (c) and maska; // маска удаляет старший полубайт

6.1.1.3 Ограниченный тип данных.

Для порядковых типов можно задать поддиапазон их возможных значений – это и будет ограниченный тип.

Диапазон значений ограниченного типа задается выражением вида: <минимальное значение>..<максимальное значение>.

Например:

type TCaps = ‘A’..‘Z’;

var bigLetter: TCaps; month: 1..12;

В этих примерах переменная bigLetterможет принимать только символы латинских букв в верхнем регистре, а переменная month значения от 1 до 12.

Ограниченные типы используются, например, при объявлении массивов.

В компиляторе Object Pascal имеется опция, позволяющая включить проверку диапазона при присваивании значения переменной ограниченного типа – {$R+} . Её можно включить в том месте вашей программы, где нужно начать проверку диапазона, и выключить в любом месте опцией {$R-} . При попытке присвоить переменной ограниченного типа значение, выходящее за пределы заданного поддиапазона, сгенерируется исключение с сообщением “Range check error”.

Интервальный тип можно использовать для задания множества данных этого типа путем заключения интервала в квадратные скобки. Например, множество сточных русских букв можно задать таким образом ["а".."я"]. Для определения принадлежности некоторого символа к определенному таким образом множеству можно использовать операцию in , которая возвращает true, если символ принадлежит множеству и false – если не принадлежит. Например, результатом вычисления выражения ‘5’ in [‘0’..’9’], будет true.

Тип данных

Совместимость типов

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

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

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

Тип данных

План

Лекция 8

Тема: Тип данных

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

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

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

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

Type Int = Integer;

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

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

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

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



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

Простые типы

Порядковые

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

Дата-время

Логические

Символьный

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

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

Рисунок 1 – Простые типы данных

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

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

Функции, предназначенные для работы с порядковыми типами, приведены в таблице 1.

Таблица 1 – Функции для работы с порядковыми типами.

Целые типы

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

Таблица 2 – Целочисленные типы

Наименование

Длина, байт

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

2147483648 … +2147483647

0 … 2147483647

0 … 4294967295

263 … 263 -1

Обратите внимание на то, чтоObject Pascal осуществляет автоматическое приведение типов. Например, там, где в качестве аргумента допустимо использовать переменную типа Word, допускается использовать переменную типа Byte, но не наоборот. Общее правило таково вместо одного типа целочисленной переменной можно использовать другой тип целочисленной переменной если их диапазоны значений вкладываются друг

в друга.

В таблице 3 приведены некоторые функции для работы с целочисленными переменными.

Таблица 3 – Функции для работы с целыми числами

При действиях с целыми числами тип результата будет соответствовать типу операндов, а если операнды относятся к различным целым типам, – общему типу, который включает в себя оба операнда. Например, для типов ShortInt и Word общим типом будет Integer.

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

Листинг 1

{$IFDEF FPC} {$MODE DELPHI}

{$APPTYPE CONSOLE} program InOutPrg; var x: Word; begin

Для того чтобы включить контроль переполнения, необходимо указать директиву компилятора {$Q+} для отключения контроля – {$Q-}.

Вместо {$Q+} можно использовать{$OVERFLOWCHECKS ON} , а вместо {$Q-} {$OVERFLOWCHECKS OFF}

Измените программу, приведенную в листинге 1, поместив в нее директиву{$Q+} первой строкой. Запустите ее на выполнение, программа должна аварийно завершиться.

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

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

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

Переменная логического типа может принимать только два значения True (истина) и False (ложь). Логические типы приведены в таблице 4.

Таблица 4 – Логические типы

Для работы с логическими типами используйте тип Boolean, остальные типы были добавлены в Object Pascal для совместимости с программами написанными на других языках программирования.

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

Символьный тип, как следует из его названия, предназначен для хранения кода символа. Внутренняя структура типа совпадает с внутренней структурой беззнаковых целых чисел. Object Pascal поддерживает два символьных типаAnsiChar иWideChar. Характеристики этих типов приведены в таблице5.

Таблица 5 – Символьные типы

Описание

Код символа в кодировке ANSI. Таблица символов этого стандарта

состоит из 256 символов, причем первые 128 символов жестко

определены стандартом, а остальные 128 могут содержать любые

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

символы национальных алфавитов. Недостатком данного

представления символов является то, что невозможно отображение

сразу символов более

чем 2-х алфавитов.

Символ в формате UNICODE. Таблица символов содержит 65536

символов. В данной таблице находятся символы всех алфавитов.

Char1

Является псевдонимом типа AnsiChar

Для преобразования кода символа в символ следует применять следующую функцию

function chr(X:byte):char

Для обратного преобразования используется функция

1 В Object Pascal тип Char является основным. В следующих версиях тип Char может стать псевдонимом для типа WideChar.

function ord(X:char):byte;

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

ch:="A" ;

ch:=#97; //97 – код символа "A".

Например

var ch:char; code: byte;

begin ch:="A" ;

ch:=chr(32); //32 - соответствует коду клавиши пробел

end.

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

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

<имя типа> = (id, id, id,...);

Здесь «имя типа» – идентификатор Object Pascal , «id» – идентификаторObject Pascal .

Например, тип описывающий некоторый фиксированный набор цветов

Применение перечисляемых типов делает программы более наглядными и повышает надежность программ. Пусть определены следующие типы:

type TColors = (red, green, white, yellow);

TDays=(monday, tuesday, wednesday);

Определены переменные

var col:TColors;

то допустимы следующие операторы

col:=Succ(green);

day:=Pred(tuesday);

но не допустимы

Максимальное количество перечисляемых значений зависит от реализации. В настоящее время размер переменной перечисляемого типа равен 4 байта, что соответствует 232 различных значений, т. е. во внутреннем представлении перечисляемый тип представляет собой тип LongWord.

Как говорилось выше , можно поместить определение типа сразу, после двоеточия, например

var col: (red, green, white, yellow); day: (monday, tuesday, wednesday);

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

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

<мин. зн.> .. <макс. зн.>

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

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

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

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) усекает вещественное число путем отбрасывания дробной части.