28615

Структурные типы данных (массивы, записи, множества)

Доклад

Информатика, кибернетика и программирование

Массив - это структура данных, доступ к элементам которой осуществляется по номеру (илииндексу). Все элементы массива имеют одинаковый тип.

Русский

2015-01-18

21.26 KB

10 чел.

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

  1.  массивы
  2.  записи
  3.  множества


   Массив - это структура данных, доступ к элементам которой осуществляется по номеру (илииндексу). Все элементы массива имеют одинаковый тип.
Описание массива имеет вид:

   
type имя_типа_массива = array [диапазон] of тип_элемента;

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

   
type TMyArray = array [1 .. 100] of Integer;

Теперь можно описать переменные типа TMyArray:

   
var A, B: TMyArray;

Вместо присвоения типа можно явно описать переменные как массивы:

   
var A, B : array [1..100] of Integer;

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

var N: Integer;
begin
   
N := 65;
   
A[5] := 101;
   
A[N] := 165;
   
A[N+3] := 200;
   
B := A;
end;

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

Выражение 
B := A означает, что каждый элемент массива B равен элементу с таким же индексом массива A. Такое присвоение возможно только если переменные объявлены через некий поименованный тип, или перечислены в одном списке. И в случае:

   
var A: array[1..100] of String;
           
B: array[1..100] of String;

его использовать невозможно (но возможно поэлементное присвоение 
B[1] := A[2]; и т.д.).

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

1

2

3

4

5

6

7

8

9

10

11

12

можно описать в виде массива с двумя измерениями:

   
type MyTable = array[1..4, 1..3] of Integer;
   
var X : MyTable;
           
Y : Integer;
   
begin
       
Y:=X[3, 2];   
   
end;

Теперь в результате операции присвоения 
Y будет равен 7.
Многомерный, например, двумерный массив можно описать как массив массивов:

   
type TMyArray = array [1 .. 4] of array [1 .. 3] of Integer;

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

   
type TDinArray = array of Integer;
   
var A : TDinArray;

После создания в динамическом массиве нет ни одного элемента. Необходимый размер задаётся в программе специальной процедурой 
SetLength. Массив из ста элементов:

   
begin
    
SetLength(A, 100);
   
end;

Нижняя граница динамического массива всегда равна нулю. Поэтому индекс массива 
A может изменяться от 0 до 99.
Многомерные динамические массивы описываются именно как массивы массивов. Например, двумерный:

   
type T3DinArray = array of array of Integer;
   
var A : T3DinArray;

В программе сначала задаётся размер по первому измерению (количество столбцов):

   SetLength(A, 3);

Затем задаётся размер второго измерения 
для каждого из трёх столбцов, например:

   
SetLength(A[0], 3);
   
SetLength(A[1], 2);
   
SetLength(A[2], 1);

   Таким образом создаётся треугольная матрица:   

A00 A10 A20
A
01 A12
A
02

Чтобы освободить память, выделенную динамическому массиву, нужно массиву как целому присвоить значение nil:
    A:=
nil;
Ключевое слово 
nil в Delphi означает отсутствие значения.

   Записи очень важный и удобный инструмент. Даже не применяя специальные технологии, с его помощью можно создавать собственные базы данных. Записи - это структура данных, каждый элемент которой имеет собственное имя и тип данных. Элемент записи иначе называют поле. Описание записи имеет вид:
   
type имя_типа_записи = record
      название_поля : тип_поля ;
      
. . .
      название_поля : тип_поля ;
   
end;
Названия полей, имеющих одинаковый тип, можно, как и в случае описания переменных, указывать в одну строку через запятую. Для обращения к полю записи сначала указывают имя записи, затем точку, затем имя поля. Например, данные о персонале предприятия могут быть организованы таким типом записи:

   
type TPers = record
     
Fam, Name, Par : String;
     
Year : Integer;
     
Dep : String;
   
end;
   
var Pers : TPers;
   
begin
    
Pers.Fam:='Иванов';
    
Pers.Name:='Иван';
    
Pers.Par:='Иванович';
    
Pers.Year:=1966;
    
Pers.Dep:='Цех №1';
   
end;

Теперь осталось записать эти данные в файл, предварительно объявив и его тип как TPers, и база данных готова. С файлом в Delphi также ассоциируется переменная, называемая файловой переменной, которая описывается так:
   VFile 
: file of тип_файла;
В качестве типа может использоваться любой ограниченный тип Delphi. При этом не допускается тип
String, так как он допускает переменный размер до 2 ГБайт. Его необходимо ограничивать: String[N], где N - количество символов. Тип TPers из предыдущего примера должен быть описан, например, так:

   
type TPers = record
     
Fam, Name, Par : String[20];
     
Year : Integer;
     
Dep : String[10];
   
end;

Теперь переменная такого типа занимает строго определённое место в памяти, и может быть записана в файл. Как это сделать, рассказывается во 
2-й части Урока №7. 

   
Множество - это группа элементов, объединённая под одним именем, и с которой можно сравнивать другие величины, чтобы определить, принадлежат ли они этому множеству. Количество элементов в одном множестве не может превышать 256. Множество описывается так:

   
type имя_множества = set of диапазон_значений_множества ;

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

   
type TMySet = set of  0 .. 255;
   
type TMySet = set of  Byte;

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

   
var MySet : TMySet;
   
begin
    MySet:=[1, 3 .. 7, 9];
   
end;

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

   
var Key : Char;
           
Str : String;
   
begin
    
if Key in ['0' .. '9', '+', '-'] then Str:='Math';
   
end;

   Чтобы добавить элемент во множество, используется операция сложения, удалить - вычитания:

var Digit: set of Char=['1'..'9'];
var Math: Set of Char;
begin
  Math:=Digit+['+', '-', DecimalSeparator
*];
end;


 

А также другие работы, которые могут Вас заинтересовать

37913. ИЗУЧЕНИЕ ЯВЛЕНИЯ ПОГЛОЩЕНИЯ СВЕТА ВЕЩЕСТВОМ 1.85 MB
  13 ЛАБОРАТОРНАЯ РАБОТА № 68 ИЗУЧЕНИЕ Явления ПОГЛОЩЕНИЯ СВЕТА ВЕЩЕСТВОМ 1. Определение коэффициентов поглощения исследуемых растворов в зависимости от длины волны поглощаемого света. Явление поглощения света веществом можно объяснить как с точки зрения волновых представлений так и с точки зрения квантовых представлений. С точки зрения квантовых представлений удается вычислить собственные частоты колебаний атомов и молекул на основе спектров поглощения.
37914. ИЗУЧЕНИЕ ДИФРАКЦИИ СВЕТА НА ДВУМЕРНОЙ ДИФРАКЦИОННОЙ РЕШЕТКЕ 148 KB
  Теория одномерной дифракционной решетки достаточно подробно рассматривается в курсе общей физики. Положение главных максимумов в дифракционной картине такой решетки в случае нормального падения лучей определяется выражением
37915. Изучение вращения плоскости поляризации в растворах оптически активных веществ 181 KB
  4 Вращение плоскости поляризации в кристаллах.4 Вращение плоскости поляризации в аморфных веществах и растворах.7 Теория вращения плоскости поляризации8 Экспериментальная часть.18 Лабораторная работа № 70 Изучение вращения плоскости поляризации в растворах оптически активных веществ Цель работы 1.
37916. Изучение интерференции света в клиньях 2.01 MB
  Интерференция - одно из проявления волновых свойств света. Интерференция - частный случай сложения волн, при котором наблюдается устойчивая во времени картина перераспределения в пространстве энергии световых волн. Зрительно это проявляется в том, что возникают геометрические места (точки, линии, области)
37917. Изучение магнитного поля соленоида лабораторная работа 173.5 KB
  Изучение магнитного поля соленоида. Рассмотрены характеристики магнитного поля и методика экспериментального определения величины вектора магнитной индукции с помощью датчика Холла. Характеристики магнитного поля.
37918. Изучение Эффекта Холла 240.5 KB
  Эффект Холла Изучение зависимости холловской разности потенциалов от величины силы тока JД в датчике Холла [3. Контрольные вопросы [5] Список литературы Лабораторная работа № 56 Изучение Эффекта Холла 1.
37919. ИЗУЧЕНИЕ ВИХРЕВОГО ЭЛЕКТРИЧЕСКОГО ПОЛЯ 310.5 KB
  ЛАБОРАТОРНАЯ РАБОТА № 57 ИЗУЧЕНИЕ ВИХРЕВОГО ЭЛЕКТРИЧЕСКОГО ПОЛЯ Цель работы Изучение явления электромагнитной индукции и свойств вихревого электрического поля. Уравнение Максвелла для электрического поля В 1931 году М.1 Анализируя явление электромагнитной индукции Максвелл установил что причиной появления ЭДС индукции является возникновение в контуре электрического поля.
37920. ИЗУЧЕНИЕ МАГНИТНОГО ПОЛЯ ПРЯМОЛИНЕЙНОГО ТОКА 338.5 KB
  Шатохин Изучение магнитного поля прямолинейного тока. Детально рассмотрены характеристики магнитного поля прямолинейного тока. Изложена методика экспериментального определения магнитного поля токонесущих проводников.
37921. ИЗУЧЕНИЕ ИНТЕРФЕРЕНЦИИ СВЕТА 723.5 KB
  Сагитова Изучение интерференции света: Методические указания к лабораторной работе № 61 по курсу общей физики Уфимск. Методические указания знакомят студентов с явлением интерференции света методами получения когерентных волн.4 Порядок выполнения работы [8] 4 Контрольные вопросы [9] Список литературы Лабораторная работа № 61 ИЗУЧЕНИЕ ИНТЕРФЕРЕНЦИИ СВЕТА 1 Цель работы Изучение явления интерференции света.