28615

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

Доклад

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

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

Русский

2015-01-18

21.26 KB

8 чел.

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

  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;


 

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

53668. Shopping for clothes 55.5 KB
  Boys usually wear shorts, shirts, jeans, trousers, trainers, sweaters, coats, scarves, caps and boots. Girls usually wear dresses, shoes, jeans, trainers, coats, scarves, sweaters, mittens, hats, boots.
53669. Baby Elephant and his new clothes 56.5 KB
  All children like to play games. Now I want you to divide into two teams. Each team will have the cards with the words. You must put the words in the logical order to make a chain.
53671. Consolidation. Generalization 50 KB
  Now we are going to revise some rules about quantifiers. You know that quantity can be expressed not only by numbers – one, two, three or the first, the second etc; but also with special words. And we should remember these words.
53672. Конспект урока по баскетболу 53.5 KB
  Совершенствовать остановку прыжком Развивающие: развивать координационные способности с помощью эстафет Воспитательные: командный дух с помощью эстафет Части урока Частные задачи Средства Дозировка Методические указания Команды Форма проведения Подготовительная Организованно начать урок Построение 2мин Следить за дисциплиной Следить за слаженностью выполнения строевых упражнений за осанкой...
53673. Конспект урока по баскетболу в 7 классе 47 KB
  Ноги не сгибать Задняя нога прямая Равняйсь Смирно Вольно На носках марш На пятках марш На внешней стороне стопы марш На внутренней стороне стопы марш Бегом марш Бег с высоким поднимание колена марш Бег спиной вперед марш Противоходом марш Змейкой марш Шагом марш На месте шагом марш Стой раз два Фронтальная Основная 2025мин Совершенствование скорости реакции посредством игры в баскетбол Разделить на 2 команды. Однако тот не может начать эстафету пока предыдущий игрок не пересечет стартовую...
53675. Конспект урока по баскетболу в 8 классе 45.5 KB
  Части урока Частные задачи Средства Дозировка Методические указания Команды Форма проведения Подготовительная 1015мин Организованно начать урок Подготовить организм к предстоящей нагрузке Построение приветствие постановка задач Упражнения в ходьбе: на носках руки перед грудью кисти скрепить в замок круговые вращения в кистях; на пятках руки вперед на внешней стороне стопы на внутренней...
53676. Изготовление открытки к 23 февраля 72 KB
  Задачи: Образовательные: Познакомить с историческими сведениями о празднике День защитника отечества; Расширить практические навыки по изготовлению открыток; Воспитательные: Воспитание дисциплинированности активности уважения друг к другу; Воспитание культуры учащихся внимательности. 2 Создание эмоционального настроя Праздник всех солдатов наших Вот что значит этот день День защитников отважных Да и просто всех парней Ведь любой из них мечтает Защитить детей семью Покорить хоть чтото в мире И найти свою судьбу Слушают...