Разместить заказ
Вы будете перенаправлены на Автор24

Структурированные типы данных в Turbo Pfscal V.7.0

8-800-775-03-30 support@author24.ru
Статья предоставлена специалистами сервиса Автор24
Автор24 - это сообщество учителей и преподавателей, к которым можно обратиться за помощью с выполнением учебных работ.
как работает сервис
Все предметы / Программирование / Программирование на языке Turbo Pascal / Структурированные типы данных в Turbo Pfscal V.7.0
Структурированные типы данных в Turbo Pfscal V.7.0
Содержание статьи
Определение 1

Структурированные типы данных – это наборы однотипных или разнотипных элементов. Типы элементов, как правило, преобразовывают из других различных типов данных.

В среде программирования Turbo Pascal используются следующие:

  • массивы;
  • записи;
  • множества;
  • файлы.

В стандарте языковой среды Turbo Pascal имеются упакованные (packed) и неупакованные структурированные типы данных, но на них мы сегодня останавливаться не станем. Рассмотрим подробнее первые три типа из вышеперечисленных.

Массив

Определение 2

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

Массивы бывают одномерные и многомерные. При задании массива будем использовать ключевое слово array, после которого напишем тип индекса (индексов) элементов (в квадратных скобках) и уже потом после ключевого слова of записываем тип самих элементов:

type

= array [ ] of ;

Пример 1

type

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

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

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

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

Замечание 1

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

Замечание 2

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

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

Пример 2

m1[3], matrix[x, y], m2[succ(i)] и т. д.

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

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

Const

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

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

В работе с массивами подобного типа, как и при работе со строками, как правило, используют операции сравнения (даже если массивы не идентичны и различного размера) и операции конкатенации. Их используют в операторах вывода Write и WriteLn. Для приведенных выше массивов можно записать:

if a > в then

WriteLn(a) else

WriteLn(b);

Запись

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

Приведем пример:

Пример 3

type

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

Re: Real;

Im: Real

end;

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

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

Запись можно вводить и непосредственно при определении переменной или типизированной константы. Приведем пример:

Пример 4

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 ;

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

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

Множество

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

В данном случае обратим внимание на то, что при использовании данного типа имеются определенные числовые ограничения. Так число элементов исходного множества в 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'$;

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

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

Пример 5

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'];

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

Возможно использование диапазонов элементов.

В каждом множестве используйте пустое множество [ ], которое совсем не содержит элементов.

Конструктор множества применяется непосредственно и в операциях над множествами.

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