28615

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

Доклад

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

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

Русский

2015-01-18

21.26 KB

5 чел.

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

  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;


 

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

84639. Основи місцевого самоврядування 84.5 KB
  Основи місцевого самоврядування Конституційно правові основи місцевого самоврядування в Україні. Матеріальна основа місцевого самоврядування. Фінансова основа місцевого самоврядування. Місцеві бюджети та позабюджетні кошти місцевого самоврядування.
84640. Сучасна система місцевого самоврядування в Україні та її елементи 145 KB
  Сучасна система місцевого самоврядування в Україні та її елементи Поняття і система місцевого самоврядування. Територіальна громада основний елемент системи місцевого самоврядування. Поняття та види органів місцевого самоврядування. Представницькі органи місцевого самоврядування сільські селищні міські ради.
84641. Основное и дополнительное сырье хлебопекарного производства, хранение тарное и бестарное. Виды и сорта муки. Значение химического состава муки в технологическом процессе 31.15 KB
  На всех этапах производственного процесса осуществляется сложный комплекс коллоидных, биохимических, микробиологических процессов, в результате которых мука превращается в хлеб - высококачественный продукт, обладающий вкусовыми свойствами и структурой, обеспечивающей его хорошую усвояемость.
84642. Хлебопекарные дрожжи, их микробиологическая и химическая характеристика. Виды хлебопекарных дрожжей, хранение и подготовка к производству. Сущность активации дрожжей 20.47 KB
  Дрожжи хлебопекарные являются основным видом сырья для производства хлеба и хлебобулочных изделий. Технологическая и функциональная роль дрожжей заключается в биологическом разрыхлении теста диоксидом углерода выделяющимся в процессе спиртового брожения придании тесту определённых реологических...
84643. Жидкие дрожжи и их технологическое значение, микрофлора. Разводочный и производственный циклы приготовления, основные схемы приготовления, их сравнительная оценка. Показатели качества жидких дрожжей 22.62 KB
  Показатели качества жидких дрожжей Понятие о жидких дрожжах и их технологическом значении Жидкие дрожжи используются в отечественном хлебопечении в качестве биологического разрыхлителя при производстве хлеба из пшеничной муки смеси пшеничной и ржаной полностью приготовленного на жидких дрожжах...
84644. Хлебопекарные свойства пшеничной муки и факторы, их характеризующие. Газообразующая способность пшеничной муки и факторы, ее обусловливающие 24.64 KB
  Хлебопекарные свойства пшеничной муки и факторы их характеризующие. Газообразующая способность пшеничной муки и факторы ее обусловливающие. Сила пшеничной муки и факторы ее определяющие. Технологическое значение силы муки.
84645. Хлебопекарные свойства ржаной муки и показатели, их характеризующие. Особенности углеводно-амилазного и белково-протеиназного комплексов ржаной муки. Автолитическая активность ржаной муки и методы ее определения 23.39 KB
  Хлебопекарные свойства ржаной муки и показатели их характеризующие. Особенности углеводно-амилазного и белково-протеиназного комплексов ржаной муки. Автолитическая активность ржаной муки и методы ее определения. Химический состав ржаной муки В хлебопекарном производстве используется ржаная сортовая мука...
84646. Дополнительное сырье хлебопекарного производства. Соотношение и роль в тесте отдельных видов сырья 39.13 KB
  Для технологических и хозяйственных нужд хлебозаводы используют обычно воду из городского питьевого водопровода. Для бесперебойного снабжения водой и создания постоянного напора во внутренней водопроводной сети устанавливают специальные баки с холодной и горячей водой.
84647. XIX Century Literature 27.1 KB
  Dickens, Charles John Huffam (1812-1870), probably the best-known and, to many people, the greatest English novelist of the 19th century. A moralist, satirist, and social reformer, Dickens crafted complex plots and striking characters that capture the panorama of English society.