Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабы_Информатика.doc
Скачиваний:
5
Добавлен:
01.07.2025
Размер:
3 Мб
Скачать
☆

Тула 2014 г.

1. ЦЕЛЬ И ЗАДАЧИ РАБОТЫ

Изучение применения массивов и компонента StrigGrid для решения задач в приложении Borland Delphi.

2. ТЕОРЕТИЧЕСКИЕ ПОЛОЖЕНИЯ

Статические массивы

Массив – это набор переменных одинакового типа. Обращение к конкретному элементу массива происходит по его номеру. Это позволяет обрабатывать массивы в циклах.

Для создания массива сначала необходимо определить пользовательский тип данных. Если такие типы, как REAL, INTEGER, BOOLEAN есть в Delphi всегда (они называются встроенными), то встроенных статических массивов в Delphi нет – их надо создавать самому. Новые типы данных создаются оператором TYPE, который должен находиться в разделе описаний перед оператором VAR. Оператор TYPE не выделяет память под переменные, он нужен, чтобы потом в операторе VAR компьютер знал, сколько памяти выделить.

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

Общий вид оператора TYPE при создании типа данных "массив" такой:

TYPE имя_типа = ARRAY [размерность] OF тип_данных_элементов;

Здесь имя_типа – придуманное программистом имя нового типа данных (обычно его начинают с буквы "Т", чтобы не путать с именами переменных), тип_данных_элементов – один из встроенных типов данных, к которому будут принадлежать все элементы массива.

Размерность массива указывает, сколько элементов содержится в массиве и как они будут расположены. В простейшем случае массив будет линейным (одномерным). Для линейного массива размерность указывается в виде imin..imax (обратите внимание – две точки, а не три!). Здесь imin – индекс первого элемента массива, imax – индекс последнего. Число элементов в таком массиве равно imax-imin+1.

Например, создадим массив из 10 чисел типа REAL:

TYPE TA=ARRAY [1..10] OF REAL;

А теперь выделим под него память:

VAR a:TA;

Индексы элементов массива могут быть и нулевыми, и даже отрицательными. Единственное ограничение – суммарный размер массива в памяти не должен превышать 64Кб.

При работе с массивом в программе можно обращаться к его отдельным элементам, указывая их индекс в квадратных скобках после имени массива, например: a[1], a[i], a[j+2-1]. Нельзя присвоить значение всему массиву сразу. В приведенном примере запись a:=10 является глупостью. Значения в массив надо заносить в цикле, по одному. Например, заполним массив случайными числами:

CONST Nmax=10; {число элементов в массиве}

TYPE TA=ARRAY[1..Nmax] OF REAL;

VAR a:TA; i:BYTE;

BEGIN

FOR i:=1 TO Nmax DO

a[i]:=RANDOM

. . .

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

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

Каждый элемент массива, в свою очередь, может являться массивом. Это позволяет создавать двумерные таблицы (матрицы), трехмерные (представьте себе прямоугольный параллелепипед), а также массивы с большим числом измерений. Зачем может понадобиться четырехмерный массив, который и представить-то сложно? Вот пример: в комнате в точках с координатами x,y,z меряется температура t. Тогда данные о температуре легче всего представить в виде четырехмерного массива [x,y,z,t].

Чаще всего встречаются двумерные массивы. Для их описания в операторе TYPE указывают не одну, а две размерности:

TYPE TA=ARRAY[1..10, 1..5] OF REAL;

В таком массиве всего 105=50 элементов, а для обращения к любому из них нужно указывать два индекса: a[i, j].

К сожалению, во многих книгах по программированию усиленно муссируется вопрос про "строки" и "столбцы" двумерного массива. На самом деле никаких строк и столбцов в памяти компьютера не возникает, массив любой размерности хранится линейно. Соответственно и вопрос "а что указывать первым – число строк или столбцов?" – лишен смысла. Вы можете для удобства считать, что первым индексом является номер строки, а вторым – номер столбца, или наоборот – это ни на что не повлияет.

Для обработки двумерных массивов нужны вложенные циклы. Один цикл находится внутри другого и при каждой итерации внешнего цикла внутренний цикл пробегает все заданные значения. Рассмотрим пример заполнения двумерного массива случайными числами и нахождения среднего арифметического его элементов:

CONST MaxX=10, MaxY=20;

TYPE TA=ARRAY[1..MaxX, 1..MaxY] OF REAL;

VAR a:TA; i, j: BYTE; s:REAL;

BEGIN

s:=0;

FOR i:=1 TO MaxX DO

FOR j:=1 TO MaxY DO

BEGIN

a[i,j]:=random;

s:=s+a[i,j]

END;

s:=s/(MaxX*MaxY);

Label1.Caption:=

'Максимальный элемент равен '+FloatToStrF(max,ffFixed,10,4);