Лекция 5 Типы данных. Простые типы данных. — КиберПедия 

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

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

Лекция 5 Типы данных. Простые типы данных.

2019-12-21 351
Лекция 5 Типы данных. Простые типы данных. 0.00 из 5.00 0 оценок
Заказать работу

Порядковые типы данных (3 часа)

 

План

5.1 Структура типов данных

      5.2 Простые типы данных

 

Структура типов данных

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

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

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

 

Простые типы данных

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

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

Целочисленные типы - обозначают множества целых чисел в различных диапазонах. Имеется пять целочисленных типов, различающихся диапазоном допустимых значений и размером занимаемой оперативной памяти. Целочисленные типы обозначаются идентификаторами: Byte, ShortInt, Word, Integer, LongInt; их характеристики приведены в следующей таблице.

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

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

123 4 -3 +345 -699

Наличие десятичной точки в записи целого числа недопустимо. Будет ошибкой записать целое число следующим образом:

123.0

Кроме прывычной десятичной формы записи допускается запись целых чисел в шестнадцатиричном формате, используя префикс $, например:

$01AF $FF $1A $F0A1B

Регистр букв A,B,..., F значения не имеет.

Допустимые операции:

- присваивание;

- все арифметические: +, -,*, /, div, mod (при обычном делении [/] результат вещественный!);

- сравнение <, >, >=, <=, <>, =.

Логический тип (Boolean) - состоит всего из двух значений: False (ложно) и True (истинно). Слова False и True определены в языке и являются, по сути, логическими константами. Регистр букв в их написании несущественен: FALSE = false. Значения этого типа являются результатом вычислений условных и логических выражений и участвуют во всевозможных условных операторах языка.

Допустимые операции:

- присваивание;

- сравнение: <, >, >=, <=, <>, =;

- логические операции: NOT, OR, AND, XOR

Символьный тип (Char) - это тип данных, состоящих из одного символа (знака, буквы, кода). Значением типа Char может быть любой символ из набора ASCII. Если символ имеет графическое представление, то в программе он записывается заключенным в одиночные кавычки (апострофы), например:

'ж' 's' '.' '*' ' '-(пробел)

Для представления самого апострофа его изображение удваивается: ''''.
Если же символ не имеет графического представления, например, символ табуляции или символ возрата каретки, то можно воспользоваться эквивалентной формой записи символьного значения, состоящего из префикса # и ASCII-кода символа:

#9 #32 #13

Допустимые операции:

- присваивание;

- сравнение: <, >, >=, <=, <>, =. Большим считается тот символ, который имеет больший ASCII-номер.

Строковый тип (String, String[n]) - этот тип данных определяет последовательности символов - строки. Параметр n определяет максимальное количество символов в строке. Если он не задан, подразумевается n=255. Значение типа "строка" в программе запиывается как последовательность символов, заключенных в одиночные кавычки (апострофы), например

'Это текстовая строка' 'This is a string'

'1234' - это тоже строка, не число

'' - пустая строка

Допустимые операции:

- присваивание;

- сложение (конкатенация, слияние); например, S:= 'Зима'+' '+'пришла!';
- сравнение: <, >, >=, <=, <>, =. Строки считаются равными, если имеют одинаковую длину и посимвольно эквивалентны.

Вещественные типы - обозначают множества вещественных чисел в различных диапазонах. Имеется пять вещественных типов, различающихся диапазоном допустимых значений и размером занимаемой оперативной памяти. Вещественные типы обозначаются идентификаторами: Real, Single, Double, Extended, Comp; их характеристики приведены в следующей таблице.

Тип Диапазон Размер в байтах
Real Single Double Extended Comp 2.9·10-39... 1.7·1038 1.5·10-45... 3.4·1038 5.0·10-324... 1.7·10308 3.4·10-4932... 1.1·10-4932 -2·1063... +2·1063-1 6 4 8 10 8

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

Значения вещественных типов могут записываться в программе несколькими способами:

1.456 0.000134 -120.0 65432
+345 0 -45 127E+12
-1.5E-5 -1.6E+12 5E4 0.002E-6

Будет ошибкой записать вещественное число следующим образом:

.5 (правильно 0.5)
12. (правильно 12.0 или 12)

Вещественное число в форме с плавающей точкой (экспоненциальная форма) записывается как пара

<мантисса> Е <порядок>

Такое обозначение понимается как "мантисса, умноженная на десять в степени, равном порядку". Например,

-1.6E+12 сответствует -1.6·1012

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

 

Идентификатор типа Допустимые значения Размер выделяемой памяти
real 5.0∙10-324 – 1.7∙10308 8 байт

 

Например описания величин вещественного типа:

var

Summa: real;

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

Число с фиксированной точкой изображается десятичным числом с дробной частью (дробная часть может быть нулевой). Дробная часть отделяется от целой с помощью точки, например 127.3, 25.0, -16.003, 200.59, 0.54.

Число с плавающей точкой имеет вид mEp, где m – мантисса, а p – порядок числа. В качестве m могут быть целые числа и действительные числа с фиксированной точкой, в качестве p – только целые числа. Как мантисса, так и порядок могут содержать знаки “+” и “-“.

Математическая запись Запичь с плавающей точкой
0,000009 9Е-6
0,62*104 0.62Е+4
-10,8*1012 -10.8Е12
20*10-3 20Е-3

 

Набор операций

Над данными вещественного типа определены следующие арифметические операции:
” + ” – сложение;

” – ” – вычитание;

” * ” умножение;

” / ” – деление.

Результат выполнения этих операций получается также вещественного типа.

Над данными вещественного типа определены следующие операции отношения:
” = ” – равно;

” <> ” – не равно;

” < ” – меньше;

” > ” – больше;

” <= ” – меньше или равно (не больше);

” >= ” – больше или равно (не меньше).

Операции отношения вырабатывают результат логического типа

Стандартные функции

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

 

Имя и параметры Действие
abs(x) вычисление абсолютного значения Х
sqr(x) вычисление квадрата Х
sqrt(x) вычисление квадратного корня из Х
sin(x) вычисление синуса x
cos(x) вычисление косинуса Х
arctan(x) вычисление арктангенса Х
exp(x) вычисление ех
ln(x) вычисление натурального алгоритма x
trunc(x) вычисление целой части Х
round(x) округление Х в сторону ближайшего целого

 

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

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

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

Изменить стандартную форму вывода можно, используя формат:

Write(x:m:n:),

где х – величина вещественного типа (константа, переменная, выражение);

m – общее поле выводимого числа (включая знак числа, целую часть, точку и дробную часть);

n – поле дробной записи.

При использовании форматов число выводится в форме с фиксированной точкой. Так, использование формата Write(r:10:4) для вывода значения r, равного -35.245367, приводит к выводу значения -35.2454.

Пример 1. Напечатать таблицу значений функции y = sin(x) на отрезке [0,1] с шагом 0.1

Решение.

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

Сравним два решения этой задачи, представленные ниже.

 

Program Primer1_1; Var i: Real; Begin i:=0; While i<=1 Do Begin Writeln(i:2:1,' ',sin(i):4:3); i:=i+0.1; End; End. Program Primer1_2; Var i: Integer; Begin i:=0 While i<=10 Do Begin Writeln(i,' ',sin(i/10):4:3); Inc(i); End; End.

 

На первый взгляд, работа этих программ должна быть одинаковой, но, запустив программы, мы обнаружим, что первая программа выдает значения функции sin(x) для всех значений х от 0 до 0.9, а вторая программа – для всех значений х от 0 до 1.

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

Пример 2. Дано х, принадлежащее интервалу от -1 до 1. Составить программу вычисления бесконечного ряда

х – х2/2 + х3/3 -…

с заданной точностью Е.

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

Решение.

Переменные:

y – сумма ряда; e – заданная точность вычислений; sl – очередное слогаемое; st – степень; z – переменная, отвечающая за знак.

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

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

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

Program Primer2;

var

x, st, sl, y, e: Real;

n, z:Integer

Begin

Write ('Введите х, принадлежащее (-1,1)');

Readln(x);

Write ('Введите погрешность вычисления ');

Readln(e);

y:= 0; n:= 1; z:=1; st:=x; sl:=x;

Repeat

y:=y+z*sl;

n:=n+1; z:=-z; st:=st*x;

sl:=st/n;

Until sl< e;

Writeln (y);

Readln;

End.

Перечисляемый тип данных

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

Программист объединяет в одну группу в соответствии с каким-либо признаком всю совокупность значений, составляющих перечисляемый тип. Например, перечисляемый тип Rainbow (РАДУГА) объединяет скалярные значения RED, ORANGE, YELLOW, GREEN, LIGHT_BLUE, BLUE, VIOLET (КРАСНЫЙ, ОРАНЖЕВЫЙ, ЖЕЛТЫЙ, ЗЕЛЕНЫЙ, ГОЛУБОЙ, СИНИЙ, ФИОЛЕТОВЫЙ). Перечисляемый тип Traffic_Light (СВЕТОФОР) объединяет скалярные значения RED, YELLOW, GREEN (КРАСНЫЙ, ЖЕЛТЫЙ, ЗЕЛЕНЫЙ).

Перечисляемый тип описывается в разделе описания типов, например:

type

Rainbow = (RED, ORANGE, YELLOW,              GREEN, LIGHT_BLUE, BLUE, VIOLET);

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

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

type Traffic_Light= (RED, YELLOW, GREEN);var Section: Traffic_Light;

Это означает, что переменная Section может принимать значения RED, YELLOW или GREEN.

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

var Section: (RED, YELLOW, GREEN);

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

К переменным перечисляемого типа может быть применим оператор присваивания:

Section:= YELLOW;

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

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

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

1..10-15..25'a'..'z'

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

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

Лекция 6 Структурированные типы данных (2 часа)

6.1. Массивы

6.2.Строковые типы.

6.3. Записи

6.4. Множество

6.5. Файл


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

 - тип-массив;

 - тип-запись;

 - тип-множество;

 - тип-файл.

В Turbo Pascal имеется еще два структурированных типа:

 - тип-строка string и

 - тип-строка PChar, являющиеся разновидностями массива.

В дальнейшем объекты структурированных типов для краткости будут называться теми же именами, что и их типы, без указания слова "тип": массив, запись, множество, файл, строка. В стандарте языка существуют упакованные (packed) и неупакованные структурированные  типы. В Turbo Pascal слово packed, характеризующее упакованный тип, не оказывает никакого влияния; в случае, когда это возможно, упаковка данных осуществляется автоматически.

 

Массив

Тип-массив представляет собой фиксированное количество упорядоченных однотипных

компонент, снабженных индексами. Он может быть одномерным и многомерным. Чтобы задать

тип-массив, используется зарезервированное слово array, после которого следует указать тип

индекса (индексов) компонент (в квадратных скобках) и далее после слова of - тип самих

компонент: type

<имя типа> = array[<тип индекса(индексов)>] of <тип компонент>;

 

Пример.

type

Arr = array[1..3] of Real; {тип—массив из 3 вещественных чисел}

Matrix = array[1..3, 1..2] of Integer; {тип - двумерный массив целых чисел, состоящий

из 3 строк и 2 столбцов}

 

Введя тип-массив, можно затем задать переменные или типизированные константы этого типа.

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

кроме типа Longint.

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

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

соответствуют левому индексу, вложенные в них круглые скобки - следующему индексу

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

var

Ml, М2: Arr;

Matr: Matrix;

const

M3: Arr =(1, 2, 3);

Mat: Matrix = ((1, 2), (3, 4), (5, 6));

Последняя константа соответствует следующей структуре:

1 2

3 4

5 6

Примечание.

Тип-массив можно вводить непосредственно и при определении соответствующих переменных  или типизированных констант.

 

Например:

var

Ml, M2: array [1..3] of Real;

Matr: array[1..3, 1..2] of Integer;

 

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

 

M1[2], Matrix[X, Y], M2[Succ(I)] и т. д.

Одному массиву можно присвоить значение другого массива, но только идентичного типа.

Так, если заданы следующие массивы:

var А, В: array[l..5] of Integer;

С: array [1..5] of Integer;

 

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

A:= В;

С другой стороны, оператор

С:= А; недопустим, т. к. массивы А и С - не идентичных типов.

Имеются некоторые отличия в работе с одномерными массивами символов (не путать с

величинами типа string - см. п. 6.2). Так, типизированным константам этого вида можно присвоить значение как обычным строковым константам, указав строку  символов в апострофах, например

const

A: array[1..5] of Char='ааааа';

В: array[1..3] of Char='bbb';

Для таких массивов, как и для строк, можно использовать операции сравнения (даже если

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

- см. п. 6.2. Их можно использовать в операторах вывода Write и WriteLn. Например,

для введенных выше массивов можно написать

 

if A > В then

WriteLn(A) else

WriteLn(B);

 

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

 

В Turbo Pascal тип-строка (стандартный тип string) - последовательность символов

произвольной длины (до 255 символов). Строку можно рассматривать как массив символов,

однако в связи с широким использованием строк и некоторыми особенностями по сравнению

со стандартными массивами они выделены в отдельный тип данных.

У типа-строки в квадратных скобках может быть указан его размер (от 1 до 255). Если

размер строки не указан, он считается равным 255, например:

 

var

Str: string[80];

MaxStr: string; {строка в 255 символов}

const

January: string[10] = 'Январь';

Для строк применимы операции конкатенации (+) и сравнения.

Операция конкатенации добавляет к первой строке вторую.

 

Пример. Объединение двух строк.

Str, Strl, Str2:string[80];

begin

Strl:= 'Turbo ';

Str2:= 'Pascal';

Str:= Strl + Str2; {в переменной Str — 'Turbo Pascal'}

end.

 

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

соответствии с ASCII-кодами соответствующих символов. Считается, что отсутствующие

символы в более короткой строке имеют код меньше кода любого действительного символа.

Например, 'XS' больше, чем 'X'.

Пример.

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

program EXAMPLE11;

const

Instance: array[l..12] of string!10]=

('ЯНВАРЬ', 'ФЕВРАЛЬ', 'МАРТ', 'АПРЕЛЬ', 'МАЙ', 'ИЮНЬ', 'ИЮЛЬ', 'АВГУСТ', 'СЕНТЯБРЬ',

'ОКТЯБРЬ', 'НОЯБРЬ', 'ДЕКАБРЬ');

Month: Boolean = False;

var

Str: string[10]; i: Integer;

begin

Writeln('Введите заглавные символы: ');

ReadLn(Str);

for i:= 1 to 12 do

if Str = Instance[i] then

Month:=True;

if Month then

WriteLn('Введено имя месяца') else

WriteLn('Введено не имя месяца')

end.

Фактически строка N символов представляет собой массив из N+1 символа:

string[N] = аrrау[0..N] of Char.

Нулевой символ предназначен для указания используемого количества символов строки и

может изменяться от символа с кодом 0 до символа с кодом N. С ним можно работать как и

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

о его основном предназначении.

ASCIIZ-строка

В версии 7.0 для совместимости с другими языками программирования и средой Windows введен еще один вид строк - строки, оканчивающиеся нулевым байтом - символом с кодом 0

(т. н. ASCIIZ-строки). В отличие от строк типа string у этих строк не накладывается

ограничение на их размер (фактически размер может быть до 65535 байтов). Этим строкам

дан стандартный тип PChar. Фактически этот тип является указателем на символ (об указателях

 

PChar = ^Char;

Однако применение расширенного синтаксиса (ключ {Х+} - см. п. 17.7.1) позволяет

использовать такую переменную как строку, эквивалентную масиву типа pChar = array[0..К] of Char, где К - количество символов в строке, не считая завершающего символа с кодом 0.

В отличие от типа string символ с индексом 0 здесь является первым символом строки,

а последний символ с индексом К - завершающим символом с кодом 0.

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

 

Пример. 

Использование строк типа PChar при расширенном синтаксисе.

program EXAMPLE12;

{$Х+} {не обязательно так как используется по умолчанию}

type

Т = array[0..7] of Char; {массив для строки из 7 символов}

var

Str: PChar;

const

А: Т = 'привет!'#0;

begin

Str:= 'ПРИВЕТ!';

WriteLn(Str);    {вывод строки: ПРИВЕТ!}

Str:= @А;        {допустимо также: Str:=A}

WriteLn(Str);    {вывод строки: привет!}

WriteLn(Str[1]);{вывод символа 'р'}

ReadLn

end.

 

Если используется ключ {$Х-}, переменная типа PChar в этом случае рассматривается

как указатель на один единственный символ. В этом случае ни один из операторов

предыдущего примера, за исключением операторов Str:=@A; и ReadLn, недопустимы, а

оператор WriteLn(Str^), выполненный после оператора Str:=@A;, выдаст один символ "п".

Для работы с ASCIIZ-строками в версии 7.0 используются специальные стандартные модули

Strings (см. п. 16.2) и WinDos (см. п. 16.6).

 

Запись

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

При задании типа-записи после зарезервированного слова record следует перечислить все

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

end. Поля отделяются друг от друга точкой с запятой. Количество полей записи может быть

любым.

 

Пример.

type

Complex = record {Тип комплексных чисел}

Re: Real;

Im: Real

end;

Data = record   {Тип - дата рождения}

Year: Integer;

Month: 1..12;

Day: 1..31

end;

Person = record {Тип - сведения о сотруднике}

Name: string[20];

Sex: (Male, Female);

Age: Integer;

Married: Boolean

end;

 

Примечание. Если несколько полей типа-записи имеют один и тот же тип, то их имена можно

перечислить через запятую и затем указать этот общий тип. Так, рассмотренный в примере

тип комплексных чисел можно ввести и другим образом:

 

type

Complex = record

Re, Im: Real

end;

После введения типа-записи можно затем задать переменные или типизированные константы

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

var

X, У, Z: Complex;

Dat: Data;

const

Birthday: Data = (Year: 1971; Month: 12; Day: 9);

Ivanov: Person = (Name: 'Иванов'; Sex: Male; Age: 40; Married: True);

 

Примечание. Тип-запись можно вводить и непосредственно при определении переменных или

типизированных констант. Например, фрагмент

var

X, Y, Z: record

Re, Im: Real

end;

определяет те же комплексные переменные, что и в предыдущем примере.

Доступ к полям записи осуществляется указанием имени переменной (константы) и имени поля, записываемого через точку, например:

 

Ivanov.Age, X.Re, Dat.Day и т. д.

Пример. Использование полей записей.

X.Re:= 1.5;

X.Im:=1.7; Y.Re:= -X.Re;

Y.Im:= -X.Im; 

Ivanov.Married:= False;

 

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

использовать оператор над записями WITH. Его структура выглядит следующим образом:

with <имя записи> do <оператор>;

 

В этом случае внутри оператора можно указывать только поле записи. Например,

фрагмент:

with X do begin

Re:= 1.5;

Im:= 1.7;

Y.Re:= -Re;

Y.Im:= -Im

end;

with Ivanov do

Married:= False;

 

эквивалентен фрагменту из предыдущего примера.

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

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

 

Пример. Использование вариантной части.

type

Figure = (Square, Triangle, Circle);

Param = record

X, Y: Real;       {координаты точки привязки}

 

case Fig: Figure of {параметры фигур}

Square: (Side: Real);

Triangle: (Sidel, Side2, Angle: Real);

Circle: (Radius: Real)

end;

var MySquare, MyCircle: Param;

 

Вариантная часть начинается словом case, за которым следует переменная выбора варианта

(в примере Fig) с указанием типа. Далее указываются константы значения которых может

принимать переменная выбора варианта (в примере Square, Triangle, Circle). За каждой

константой через двоеточие в круглых скобках записываются поля данного варианта записи

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

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

 

Fig:= Square;

MySquare.Side:=5.0;

Fig:= Circle;

MyCircle.Radius:=7.5;

 

В Turbo Pascal эту операцию делать необязательно, хотя, если переменная выбора задана,

ее затем можно в программе посмотреть, чтобы определить, какой задан вариант. Более того,

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

эквивалентен рассмотренному выше:

 

Fig:= Circle;

MySquare.Side:= 5.0;

Fig:= Square;

MyCircle.Radius:-7.5;

 

В тип-записи допустимо не вводить переменную выбора вариантов, а перечислить лишь разные  варианты, например:

 

Transf = record

case Integer of

1: (_Word: Word);

2: (_TwoSymb: array[1..2] of Char)

end;

 

Множество

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

Число элементов исходного множества в Turbo Pascal не может быть больше 256, а порядковые номера элементов (т. е. значение функции Ord) должны находиться в пределах от 0 до 255.

Для задания типа-множества следует использовать зарезервированные слова set и of, а затем

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

type

Alfa = set of 'A'..'Z';

Count = set of (Plus, Minus, Mult, Divid);

Ten = set of 0..9;

Number = set of '0'..'9';

 

Введя тип-множество, можно задать переменные или типизированные константы этого

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

 

var

CharVal: Alfa;

Operation: Count;

const

Index: Ten = [0, 2, 4, 6, 8];

Digit: Number = ['0'..'9'];

 

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

 

var

CharVal: set of 'A'..'Z';

Operation: set of (Plus, Minus, Mult, Divid);

const

Index: set of 0..9 = [0, 2, 4, 6, 8];

Digit: set of '0'..'9'=['0'..'9'];

 

Множеству можно в программе присвоить то или иное значение. Обычно значение задается с

помощью конструктора множества. Конструктор задает множество элементов с помощью

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

 

Пример. Следующие структуры являются конструкторами множеств:

[Plus, Minus]

[1..К mod 12, 15]

[Chr(0)..Chr(31), 'A', 'В' ]

 

В каждое множество включается и т. н. пустое множество [ ], не содержащее никаких элементов. Конструктор множества можно использовать и непосредственно в операциях над множествами. Для множеств определены следующие операции:

 

+ - объединение множеств;

- - разность множеств;

* - пересечение множеств;

= - проверка эквивалентности двух множеств;

<> - проверка неэквивалентности двух множеств;

<= - проверка, является ли левое множество подмножеством правого множества;

>= - проверка, является ли правое множество подмножеством левого множества;

in - проверка, входит ли элемент, указанный слева, в множество, указанное справа.

 

Результатом операции объединения, разности или пересечения является соответствующее

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

Пример.    Ввести строку символов, состоящую из латинских букв, цифр и пробелов.

 Осуществить проверку правильности введенных символов.

 

program EXAMPLE13;

var

Str: string;

L: Byte;

Tru: Boolean;

begin

WriteLn('Введите строку');

ReadLn(Str);

L:= Length(str);       {число введенных символов}

Tru:= L > 0;              {true, если не пустая строка}

while Tru and (L > 0) do {проверка с конца строки}

begin

Tru:=Str[L] in ['0'..'9', 'A'.,'Z', 'a'..'z', ' '];

{проверка допустимости символа}

    Dec(L)        {предыдущий символ}

end;

if Tru then

WriteLn('Правильная строка') else

WriteLn('Неправильная строка')

end.

 

Файл

Тип-файл представляет собой последовательность компонент одного типа, расположенных на

внешнем устройстве (в стандарте языка за основу взято расположение данных на магнитных

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

компоненты типа-файла) и типа-объекта. Число компонент в файле не объявляется.

Для задания типа-файла следует использовать зарезервированные слова file и of, после

чего указать тип компонент файла.

 

Пример.

type

Number = file of Integer; {тип-файл целых чисел}

Symb = file of 'A'..'Z'; {тип—файл прописных латинских букв}

 

Стандартный тип Text определяет тип-файл, содержащий символы, объединенные в строки.

Следует иметь в виду, что тип Text в Turbo Pascal не эквивалентен типу file of Char.

Введя файловый тип, можно определить переменные файлового типа:

 

var Fl, F2: Number; F3: Text; FF4: Symb;

 

В Turbo Pascal можно использовать файл без типа, при определении которого не указывается

тип компонент. В этом случае работа с файлом осуществляется на физическом уровне в

соответствии с внутренним форматом его данных. При этом реальные компоненты файла могут иметь и различный тип.

 

Пример.

type UnTyp = file;

 

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

 

var Fl, F2: file of Integer;

 

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


Поделиться с друзьями:

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

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

Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...

Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.5 с.