ТОП 10:

Структурные (структурированные) типы



· Массивы в Delphi и их характеристики.

· Допустимые размерности.

· Распределение массивов в памяти.

· Объявление статических массивов

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

Массивы

Массив представляет собой структуру данных, состоящую из совокупности данных под одним именем и одного типа. При этом каждая совокупность может иметь свой (допустимый в Delphi) тип.

Характеристики массивов:

· Имя. Формируется (как и для простых переменных) по правилам Delphi.

· Тип хранимых элементов.

· Размер (число хранимых элементов).

· Нумерация элементов (порядковый номер элемента в массиве).

· Размерность (число измерений).

Распределение массивов в памяти (статическое и динамическое).

Допустимые размерности:

· Одномерные.

· Многомерные.

Объявление статических массивов

Объявление одномерного массива:

Var <имя массива>:array[<ограниченный тип>] of <тип элементов>;

Примеры:

Var Массив: array[1..15] of Integer;

Var Символ: array[1..25] of chr;

Var Строка: array[1..25] of String[15]; При работе со строковыми элементами необходимо указывать допустимую длину элементов.

Массив можно определить следующим образом:

Type color= ( red, yellow, green); В качестве индекса выбран перечисляемый тип.

Var Acol: array[color] of integer;

Тогда обращение к элементам - к первому – Acol [red], ко второму -Acol [yellow] и к третьему соответственно - Acol[green].

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

Имя:array [нижний_индекс..верхний_индекс] of <тип> = (список);

где список — разделенные запятыми значения элементов массива. Например: a: array[10] of integer = (0,0,0,0,0,0,0,0,0,0);

b: array[1..5] of String[10]=('Зенит','Динамо','Спартак','Ротор','СКА');

Var Массив: array[0..10] of Integer=(1,2,3,4,5,6,7,8,9,10,11);

Аналогично объявляется и типизированная константа:

const A: array[1..5] of integer=(1,2,3,4,5);

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

Для обработки статических массивов можно использовать в циклах следующие функции:

Length(<идентификатор>) – возвращает количество элементов в массиве, , High(<идентификатор>) – возвращает самое большое значение индекса массива ( равное Length -1), Low(<идентификатор>) - возвращает 0.

Пример: for i:=0 to High(идентификатор) do <оператор>;

 

Способы обнуления массива, например, для массивов с именамиMemoMasиms:

1. For i:=1 to 25 do

MemoMas[i]:=0;

2.Для другого массива- for i:=0 to High(ms) do ms[i]:=0;

 

Многомерные массивы

Компактное объявление двумерного массива:

Var BМассив: array[1.. 5,1..3] of Integer; Массив с элементами целого типа, расположенными в 5 строках и 3 столбцах(таблица). Данный двумерный массив может быть также объявлен следующим образом:

Var BМассив: array[1.. 5] of array 1..3] of Integer;

Динамическое распределение массива в памяти

· Объявление и переопределение динамических массивов.

· Действия над массивами.

· Использование функций, определенных в модуле math.

· Некоторые алгоритмы обработки динамических массивов.

Объявление и переопределение динамических массивов

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

var ms:array of integer;

Далее, при выполнении процедуры, происходит переопределение массива с заданием его размерности с помощью процедуры: SetLength.

Пример. SetLength(А,25),где выделяется место в памяти для 25 элементов массива А. В последующем возможно повторное применение указанной процедуры с изменением размера в сторону его увеличения или уменьшения.

Var mas:array of integer;

K,i:integer;

Begin

K:=5;

SetLength(ms,k), // массив ms(0,0,0,0,0)

For i:=0 to k do ms[i]:=i+1; // массив ms(1,2,3,4,5)

K:=7;

SetLength(ms,k), // массив ms(1,2,3,4,5,0,0)

K:=3;

SetLength(ms,k), // массив ms(1,2,3)

K:=7;

SetLength(ms,k), // массив ms(1,2,3,0,0,0,0)

End;

Для обработки статических и динамических массивов можно использовать в циклах следующие функции:

Length(<идентификатор>) – возвращает количество элементов в массиве, , High(<идентификатор>) – возвращает самое большое значение индекса массива( равное Length -1), Low(<идентификатор>) - возвращает 0.

Пример: for i:=0 to High(идентификатор) do <оператор>;

Например, если в разделе объявлений указан динамический массив

DMas : of array of integer; то в исполняемой части кода можно записать перераспределение памяти SetLength(DMas, 15);

For i:= low(DMas) to High(DMas) do ….далее выполнить соответственно алгоритму код.

Действия над массивами:

· Ввод массива;

· Вывод массива;

· Суммирование элементов массива. Поиск MAX и MIN и прочих статистических характеристик совокупностей среди элементов в массиве

· Поиск заданного элемента и его порядкового номера в массиве

· Сортировка по возрастанию и убыванию.

· Присваивание значений в однотипных элементах и обработка многих других алгоритмов.

Использование функций, определенных в модуле math

Для числовых массивов допустимо использование следующих функций, определенных в модуле math:


 

Функция Тип аргумента Тип результата Описание
MaxIntValue Array of integer integer Возвращает макс. значение эл – та в массиве цел. чисел
MinIntValue Array of integer integer Возвращает мин. значение эл - та в массиве цел. чисел
MaxValue Array of double double Возвращает макс. значение эл-та в числовом массиве
MinValue Array of double double Возвращает мин. значение эл – та в числовом массиве
Sum Array of double extended Возвращает сумму эл – тов массива
SumInt Array of integer integer Возвращает сумму эл – тов целочисленного типа
Mean   Array of double extended Возвращает среднее арифметическое значение элементов массива
StdDev Array of double extended Возвращает среднее квадратическое отклонение элементов массива
PopnVariance Array of double extended Возвращает дисперсию элементов массива
         

 

Синтаксис обращения к функции:

 

Имя переменной :=Имя функции (Имя массива);

Например: S:=SumInt(Massiv);

Переменная S в данном примере должна быть объявлена целочисленной, как и имя массива – Massiv. Во всех случаях обращения к функциям должно выполняться соответствие между типами аргументов и результатов.

Обработка массивов производится с помощью операторов цикла любой структуры (предпочтительнее - For).

Ввод /вывод массива

Значения элементов в массив могут быть введены/выведены различными способами, например из файла (в файл), используя в процессе работы с массивом различные компоненты, такие как:StringGrid, Memo, ListBox, а также кроме указанных выше компонентов для обработки массивов, можно использовать и однострочные редакторы Edit,а такжеLabel для отображения массивов.

Поиск в массиве заданного элемента

При решении многих задач возникает необходимость определить, содержит ли массив определенную информацию или нет. Например, проверить, есть ли элемент массива, содержащий, определенный артикул товара. Задачи такого типа называются поиском в массиве. Для организации поиска в массиве могут быть использованы различные алгоритмы. Наиболее простой — это алгоритм простого перебора. Поиск осуществляется последовательным сравнением элементов массива с образцом до тех пор, пока не найдется элемент, равный образцу, или не будут проверены все элементы. Алгоритм простого перебора применяется, если элементы массива не упорядочены.

Сортировка по возрастанию и убыванию

Для сортировки массивов могут быть использованы различные алгоритмы:

· Простым перебором;

· Включениями (простыми, бинарными);

· Обменом (простым, шейкер -сортировка);

· Сортировка Шелла;

· Сортировка подсчетом.


Приложение 2.

Задание 3. 1.

Текст кода модуля проекта «Возраст»

procedure TForm1.BitBtn1Click(Sender: TObject);

var T1,T2:TDateTime;

i:integer;

Begin

T1:=EnCodeDateTime(1984,10,15,0,0,0,300);

T2:=EnCodeDateTime(2012,12,15,0,0,0,300);

i:=YearsBetween(T2,T1);

Label1.Caption:='Мне исполнилось'+' '+

IntToStr(i)+' лет';

end;

procedure TForm1.BitBtn2Click(Sender: TObject);

Begin

Form1.Hide

end;

End.

Задание 3. 2. Текст кода модуля проекта «Светофор»

procedure TForm1.Button1Click(Sender: TObject);

type tLightState=0..2;

var LightState:tLightState;

Begin

label1.Caption:='';

LightState:=random(3);

if LightState=0 then

label1.Caption:= label1.Caption+ 'Цвет светофора :Red - Стоп!';

if LightState=1 then

label1.Caption:= label1.Caption+ 'Цвет светофора:Yellov – Приготовься! ';

if LightState=2 then

label1.Caption:= label1.Caption+ 'Цвет светофора: Green-Поехали !';

end;

procedure TForm1.BitBtn1Click(Sender: TObject);

Begin

form1.Hide;

end;

end.

Задание 3. 3. Текст кода модуля проекта «Скорость движения»

procedure TForm1.Button1Click(Sender: TObject);

const MaxSpeed=100;

var CurrentSpeed:integer;

Begin

Label1.caption:='';

CurrentSpeed:=60; //Начальная скорость

While CurrentSpeed < MaxSpeed do

Begin

Label1.caption:=Label1.caption+'Вы едете со скоростью'+

IntToStr(CurrentSpeed)+'км/ч'+#13;







Последнее изменение этой страницы: 2016-04-08; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.207.106.142 (0.032 с.)