Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

WITH - оператор присоединения




Лекция

Сложные типы данных

 

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

1. Массивы

2. Записи

3. Множества

 

 

Массивы

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

1) вектор с элементами ai для i = 1¸n; на языке Паскаль это одномер­ный массив;

2) матрица с элементами a i, j ; на языке Паскаль - это двумерный массив;

3) пространство Ai,j,k...; на языке Паскаль - это n-мерный массив, где n -
количество его измерений (индексов).

Массивы часто используют для:

1) численных методов решения систем алгебраических и дифференциальных
уравнений;

2) формирования совокупностей однотипных значений: исходных данных,
промежуточных и конечных результатов.

Объявление массивов определяет атрибуты, характерные только для мас­сивов, размерность и размер:

1) размерность (количество измерений) массива определяет количество ин­
дексов при обращении к элементу массива;

2) размер массива - это количество его элементов с учетом всех его измере­
ний.

Размерность массива на языке Паскаль не ограничена. Однако общий объ­ем ОП массива должен быть не более 65520 байт.

В Паскале массивы называют также регулярными типами данных. Мас­сив - это совокупность фиксированного количества компонентов (элементов) одного и того же типа. Тип элементов массива называется базовым типом. Он может быть любым: простым или сложным. Каждый элемент массива имеет индекс, который определяет его местоположение в ОП. Элементы массива упорядочены по индексам. Мощность индекса определяется количеством эле­ментов массива по данному измерению. Тип индексов может быть любым простым порядковым (ординальным) типом данных, кроме стандартного типа LONGINT и его диапазона. В том числе он может быть перечисляемым или диапазонным типом.

Массивы можно определить в разделах TYPE или VAR.

Форма объявления массива:

ТYРЕ Т = ARRAY [ T1 ] OF T2 ;

где Т - имя типа массива;

Т1 - тип индексов в виде списка типов, по одному для каждого измере­ния; обычно тип индексов диапазонный; Т2 - базовый тип: тип элементов массива.

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

TYPE ТА = ARRAY [1 .. 10] OF INTEGER; { Тип массива А }

MN = SET OF 2 ..100; { Тип множества }

VAR А : ТА; { Массивы данных: А - целого типа }

В : ARRAY [1 .. 20] OF REAL; { В - вещественного }

С : ARRAY [1..10,1..20] OF REAL;{С - двумерный, веществ.}

D : ARRAY [-10 .. 10] OF BOOLEAN; { D - логического }

E : ARRAY [0 .. 30] OF CHAR; { E - символьного }

F : ARRAY [1 .. 15] OF STRING[30]; {F- строковых данных}

G : ARRAY [1 .. 20] OF MN; { G - множеств }

Тип массива А и множества MN в примере определен в разделе TYPE. Ос­тальных массивов - в разделе VAR.

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

1) какие переменные могут быть с индексами;

2) сколько должно быть индексов при обращении к элементу массива;

3) какие допустимы значения индексов в соответствии с определенными для
них границами;

4) какой объем ОП нужен массиву.

Объем ОП, необходимой для размещения массива, определяется из объема ОП, требующегося для размещения одного элемента, и из размера массива, т. е. общего количества его элементов. Например, для 20 элементов типа REAL надо 20 * 6 = 120 байт ОП.

Так как тип элементов массива может быть любой, компонентами массива могут быть структурированные данные: массивы, записи, множества или фай­лы. Например:

TYPE В = ARRAY [ 1 .. 20 ] OF REAL ; VAR A : ARRAY [ 1 .. 30 ] OF В ;

To же объявление можно выполнить по-другому:

VAR A : ARRAY [ 1 .. 30 ] OF ARRAY [ 1 .. 20 ] OF REAL ;

VAR A : ARRAY [ 1 .. 30, 1 .. 20 ] OF REAL ;

Последний вариант объявления можно считать наиболее компактным. Пример. Объявить массив целых чисел, содержащий количество дней лю­бого месяца года:

TYPE MES = (YAN,FEB,MAR,APR,MAI,IUN,IUL,AUG,SEN,OKT,NOV,

         DEC);

  X = ARRAY [ MES ] OF BYTE;

VAR А, В : X ;

  С : BYTE ;

BEGIN В [YAN] := 31 ;  A [FEB] := 28;

                         С := A [FEB] ; ...

END.

В примере тип индексов массивов А и В определен как перечисляемый тип MES.

В ОП элементы массива располагаются так, что при переходе от элемента к элементу наиболее быстро меняется самый правый индекс массива. Таким образом, матрица располагается в ОП по строкам. Например:

VAR A : ARRAY [1..4] OF REAL;

В : ARRAY [1..2, 1..3] OF REAL;

В ОП элементы этих массивов располагаются в последовательности:

A1 A2 A3 A4 B1,1 B1,2 B1,3 B2,1 B2,2 B2,3

Обращение к элементу массива формируется в виде имени массива и спи­ска индексов в квадратных скобках. Например:

A[i] - для обращения к ai элементу одномерного массива;

B[i, j] - для обращения к bi,j элементу двумерного массива;

c[i,j,k] - для обращения к Ci,j,k элементу трехмерного массива.

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







Записи

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

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

Фиксированные записи

Фиксированная запись - это структура постоянного строения, состоящая из фиксированного количества элементов (компонентов, полей). Элементы записи в ней могут быть любых типов, в том числе скаляры, множества, фай­лы, другие записи. Описатель типа записи RECORD. Объявление записи заканчивается словом END и может быть в разделах TYPE или VAR. Форма объ­явления записи:

TYPE Т = RECORD список-полей END ;

где список-полей - это последовательность определений элементов запи­си; определение полей может быть в виде идентификатора или списка идентификаторов полей, разделенных запятыми; за идентификаторами ставится двоеточие и имя или определение типа.

Например:

TYPE TAB = RECORD { - объявление записи в разделе TYPE }

А,В : REAL; { А и В - поля одинакового типа }

END;

VAR С : TAB;

   D : RECORD{ - объявление записи в разделе VAR }

 Е, F : INTEGER; END;

Пример таблицы с данными различного типа:

СВЕДЕНИЯ О СТУДЕНТАХ

Номер зачетки                        Фамилия и инициалы Размер стипендии

93100                                        Иванов И. И.               2000.55          

93101                                        Петров П. П.               2500.40

Данные таблицы могут быть объявлены в виде:

TYPE STR = RECORD { STR - имя типа записи }

NZ :      93100. .93500;

FIO :        STRING[20];

RS :              REAL;
END;

VAR STUD : STR; { STUD - переменная типа STR }

MST : ARRAY [1..20] OF STR; { MST - массив данных типа STR }

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

STUD.NZ, STUD.FIO, MST[I].FIO, MST[I].RS.

Для вложенных полей (подструктур) уточнений имени может быть не­сколько. Например: А.В.С.

Пример копирования записи с помощью одного оператора присваивания: STUD := MST[I]; MST[I] := MST[J]; MST[J] := STUD;

Пример таблицы с элементом (полем) записи в виде массива:

СВЕДЕНИЯ О РЕЗУЛЬТАТАХ ЭКЗАМЕНОВ

Ф. И. 0. Номер зачетки

Оценка экзамена по дисциплине

        Математика Физика Программир. История
Иванов И. И. 93100 5 4 3 4
Петров П. П. 93101 3 5 4 3

Данные таблицы могут быть объявлены в виде:

TYPE ST = RECORD { Определение типа записи }

NZ : 93100..93500;

FIO : STRING[20];

ОС : ARRAY [1..4] OF BYTE; { - поле - массив из четырех оценок }

END;

VAR EKZ : ARRAY [1..25] OF ST; { - массив записей типа ST }


WITH - оператор присоединения

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

Форма оператора WITH:

WITH список-имен-записей DO S ;

где S - один оператор, простой или составной (блок).

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

WITH Y[I] DO IF DEN > 15 THEN WRITE (' Вторая половина месяца');

Это эквивалентно записи: IF Y[I].DEN > 15 THEN WRITE (' Вто­рая половина месяца');.

Вариантные записи

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

Форма 1 переменной (вариантной) части записи:

TYPE SEL = тип ; ... описание фиксированной части записи CASE SEL OF

      Метка-1 : ( список-полей );

      Метка-2 : ( список-полей ); ... END ;

 

Форма 2 переменной (вариантной) части записи:

TYPE SEL = тип ; ... описание фиксированной части записи CASE PR : SEL OF

          Метка-1 : ( список-полей ) ;

          Метка-2 : ( список-полей ) ; ...

END ;

где SEL - имя типа ключа PR и меток для выбора варианта;

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

элемент списка-полей - это список-идентификаторов-полей : тип.

Ограничения:

1) в описании записи может быть только одна вариантная часть;

2) все идентификаторы в списках полей одной записи должны быть различны;
однако, на разных уровнях вложенности полей одной записи и в разных
записях имена могут повторяться;

3) вариантная часть записи должна быть последним ее элементом.



Множества

Множество в математике - это произвольный набор объектов любой при­роды, понимаемый как единое целое. На языке Паскаль множество - это ог­раниченная совокупность различных элементов базового типа множества. Ко­личество элементов, входящих в множество, может быть в пределах от 0 до 255. Данные переменной типа множества могут быть в виде множества-переменной и множества-константы (конструктора).

Описатель переменной типа множества - SET. Объявление переменной ти­па множества определяет базовый тип, т. е. состав элементов, из значений которых создаются конкретные значения множественного типа, и мощность множества (максимальное количество его элементов). В качестве базового типа может быть любой ординальный (порядковый) тип данных, кроме типов WORD, INTEGER и LONGINT. В том числе в качестве базового типа может быть тип BYTE, SHORTINT, логический (BOOLEAN), символьный (CHAR), пе­речисляемый и диапазонный тип (для целых 0 .. 255).

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

Тип переменной-множества может быть определен в разделе TYPE или VAR. Форма определения множественного типа:

TYPE имя-типа-множества = SET OF базовый-тип ;

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

TYPE MN = SET OF 2..100; { Диапазонный тип }

VRGODA = (VESNA,LETO,OSEN,ZIMA);{Перечисляемый тип }

VAR А,В : MN ; { Переменные типа: MN }

    С : SET OF '0'..'9'; {диапазон символьных данных}

  SIM : SET OF 'A'..'Z'; { " " }

SEZON : SET OF VRGODA;{перечисляемого типа }

  SEZ : SET OF VESNA..OSEN;{диапазон перечисл. типа}

INTEG : SET OF 0..255;{диапазон целого типа}

где MN, VRGODA - имена типов: множества и перечисляемого типа; А, В, С, SIM, SEZON, SEZ, INTEG - имена переменных типа SET.

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

[], [ VESNA, OSEN ], ['А', 'С'..'К', D + Е, F ]

 

где VESNA, OSEN, 'А', 'С', 'К' - константы базового типа;

'С' .. 'К' - диапазон значений базового типа;

D + E- выражение;

F - имя переменной типа, совместимого с базовым типом множества;

[ ] - пустое множество.

Множество регистрирует наличие или отсутствие элемента, порядок пере­числения элементов несуществен. При этом следующие множества равны (эквивалентны): [ 'А', 'Е', 'I' ] и [ 'Е' , 'I', 'А' ].

 










Последнее изменение этой страницы: 2018-05-10; просмотров: 150.

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