Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


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




Лабораторная работа № 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;...





Поделиться с друзьями:


Дата добавления: 2016-11-23; Мы поможем в написании ваших работ!; просмотров: 2394 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Наглость – это ругаться с преподавателем по поводу четверки, хотя перед экзаменом уверен, что не знаешь даже на два. © Неизвестно
==> читать все изречения...

2613 - | 2186 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.011 с.