Информатика на пять О нас
 Добавить в избранное
5byte.ru
 Теория
 8 класс
 9 класс
 10 класс
 11 класс
Задания
 8 класс
 9 класс
 10 класс
 11 класс
Книги
Тесты
ЕГЭ
Turbo Pascal 7
 Описание
 Задачи
HTML
Рефераты

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

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

В языке Паскаль существуют следующие структурированные типы.

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

В Turbo Pascal имеется еще два структурированных типа - тип-строка string и тип-строка PChar, являющиеся разновидностями массива.

В дальнейшем объекты структурированных типов для краткости будут называться теми же именами, что и их типы, без указания слова "тип": массив, запись, множество, файл, строка.

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

6.1. Массив

Тип-массив представляет собой фиксированное количество упорядоченных однотипных компонент, снабженных индексами. Он может быть, одномерным и многомерным. Чтобы задать тип-массив, используется зарезервированное слово array, после которого следует указать тип индекса (индексов) компонент (в квадратных скобках) и далее после слова of - тип самих компонент.

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

Пример.

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

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

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

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

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

var
   M1, M2: Arr;
   Matr: Matrix;
const
   М3: 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), нельзя также присваивать им значения других массивов (и наоборот), даже если их структуры совпадают.

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

М1[2] ,
Matr[X, Y],
M2[Succ(I) ] и т. д.

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

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

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

A := В;

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

С := А;

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

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

const
   A: array[1..5] of Char='aaaaa';
   В: array[1..3] of Char='bbb';

Для таких массивов, как и для строк, можно использовать операции сравнения (даже если они не идентичных типов и даже если имеют различный размер) и конкатенации (объединения) - см. п. 6.2. Их можно использовать в операторах вывода Write и WriteLn. Например, для введенных выше массивов можно написать

if A > В then
   WriteLn(A)
else
   WriteLn(B);





 У Вас есть материал пишите нам
 
    Copyright © 2008    
  Top.Mail.Ru