Доступ к элементам массива.

      Комментарии к записи Доступ к элементам массива. отключены

Лабораторная работа № 5.

Обработка одномерных и двумерных массивов

Теоретические положения

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

Тип индекса определяет его допустимые значения. В качестве типа индекса может быть указан любой порядковый тип (boolean, char, integer, перечисляемый тип, а также диапазоны этих типов), кроме типа longint и его производных.

В зависимости от количества типов индексов различают: одномерные, двумерные, трехмерные и n-мерные массивы. Двумерные массивы обычно называют матрицами, считая первый индекс — номером строки, а второй — номером столбца.

Синтаксическая диаграмма оператора «Объявление массива»

Тип элементов массива — любой допустимый тип в Delphi (в том числе и массив), кроме файла.

Объявление переменных типа массив выполняется двумя способами:

• в операторе объявления переменных, например:

var

a: array [1..5] of integer; {массив из 5 целых чисел}

b: array [byte] of char; {массив из 256 символов, индекс элемента массива изменяется от 0 до 255}

с: аггау [‘А’..’C’;-5..-3] of byte; {матрица из 9 чисел} d: array [‘А’..’C’] of array [-5..-3] of byte; {матрица из 9 чисел, по структуре эквивалентная предыдущей}

одномерный массив из 5 целых чисел

одномерный массив из 256 символов

матрица из 9 чисел

• с предварительным объявлением типа, например:

tуре mas =array[1..10] of integer; {объявляем тип}

var a: mas; {объявляем переменную}

Ограничения на количество индексов в Delphi нет, но суммарная длина массива не должна превышать 65537 байт.

Значения элементов массива в программе можно определить тремя способами.

1. Во-первых, массив может быть инициализирован с использованием типизированных констант или просто присваиванием значений элементам.

2. Во-вторых, элементы массива могут быть введены с клавиатуры или из файла.

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

Инициализация массивов.

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

Const а: array [1..5] of real = (0,-3.6,7.8,3.789,5.0);

b: array [boolean, 1..5] of real = ((0,-3.6,7.8,3.789,5.0),

(6.1,0,-4.56,8.9,3.0));

c: array[1..3,0..1,-2..1] of byte = ( ((3,6,9,6),(0,4,3,9)),

((5,7,3,1),(45,8,0,2)),

((5,9,2,3),(1,5,8,4)) );

Операции над массивами.

Над массивом в целом определена единственная операция — операция присваивания.Присваивание массивов заключается в копировании элементов одного массива в другой. Эту операцию можно выполнять только над массивами одного типа.

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

var а, b: array [boolean] of real;

… a:=b;…

или, если вначале объявлен тип массива, а затем массивы этого типа:

Туре mas = аггау [boolean] of real;

Const a: mas=(3.6, -5.1);

var b: mas;

… b:=a;…

Доступ к элементам массива.

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

var a: array[char,boolean] of real; {объявляем матрицу}

… a [‘A’, true]:=5.1; … {присваиваем значение элементу аA,true}

Значения индексов можно указать непосредственно литералом, например а[3], или косвенно, указав идентификатор переменной, содержащей значение индекса, например a[i].

Прямая и косвенная адресация элементов массива

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

var a: array[1..6] of integer; …

for i:=1 to б do a[i]:=i; … {при i=1 a1 присваивается 1,

при i=2 a2 присваивается 2

при i=3 аз присваивается 3 и т.д.}

Количество переменных, необходимых для косвенной адресации массивов, совпадает с размерностью массива. Так, для работы с матрицами используют две переменные, хранящие индексы: одну — для хранения номеров строк, а вторую — номеров столбцов.

Из многомерных массивов допускается выделять подмассивы, отбрасывая индексы, записанные справа, и оставляя индексы, определяющие данный подмассив. Так, из матрицы можно выделить строку, но нельзя — столбец, например:

Туре mas=array[boolean] of real; {массив из 2 вещественных чисел}

Const a: array[1..2] of mas ((3.6,-5.1),(7.0,-4.2)); {матрица из 4 вещественных чисел}

var b:mas;

… b:=a[1];… {в массив b скопирована первая строка матрицы а}

Ввод-вывод массивов.

Ввод-вывод массивов выполняют поэлементно, используя циклы с заданным числом повторений, например:

Var a: array[1..5] of real;

Begin

for i:=1 to 5 do Read(a[i]); {ввод массива}

ReadLn; {очищаем буфер ввода, чтобы далее значения вводились со следующей строки}

Значения элементов массива вводят в порядке обращения к ним из цикла, например для цикла, показанного выше: а1, а2, аз, а4, а5. Эти значения могут задаваться в одной строке через пробел или с нажатием клавиши Enter после ввода одного или нескольких чисел.

При выполнении операций ввода-вывода матриц и массивов большой размерности целесообразно вводить и выводить значения построчно. Например:

Var a:array[1..5, 1..7] of real; {матрица a из 5 строк по 7 элементов}

Begin

for i:=1 to 5 do {цикл ввода строк массива: а1, а2, аз, а4, а5}

begin

for j:=1 to 7 do {цикл ввода элементов i-й строки: ai1, ai2,…, ai7}

Read( a[i, j] );

ReadLn; {очищаем буфер ввода}

end; …

Объявление массива и доступ к элементам массива (MQL4)