Лабораторная работа
Тема - операции с массивами.
Цель работы - изучение операций с одномерными и многомерными массивами.
Общие сведения
Массив - это упорядоченная совокупность однотипных данных. Каждому элементу массива соответствует один или несколько индексов, определяющих положение элемента в массиве. Индексы образуют упорядоченные последовательности. Синтаксическая диаграмма объявления массива представлена на рис
Рис. 4. Синтаксическая диаграмма <Объявление массива>
Например:
Var
a, b: array [1..5] of real;
c, d: array [-7..3] of integer;
Тип индекса определяет его допустимые значения. В качестве типа индекса может быть указан любой порядковый тип (boolean, char, integer, перечисляемый тип, а также диапазоны этих типов), кроме типа longint и его производных.
В зависимости от количества типов индексов различают: одномерные, двумерные, трехмерные и n -мерные массивы. Одномерные массивы обычно называют векторами, а двумерные – матрицами, считая первый индекс – номером строки, а второй – номером столбца.
|
|
Тип элементов массива – любой допустимый в Турбо Паскале тип (в том числе и массив), кроме файла.
Использование массивов существенно упрощает работу с однотипными данными, ускоряет обращение к ним и сокращает размер используемой памяти, так как все данные получают общий начальный адрес. Максимальный объём памяти, который может занимать массив, в Турбо Паскале составляет 65520 байт.
Многомерные массивы в Турбо Паскале могут быть описаны двумя способами. Первый способ описания массива заключается в объявлении его в операторе объявления переменных, например:
Var
a: array [0..3] of array [5..7] of real;
или
Var
a: array [0..3,5..7] of real;
Обратите внимание на следующие правила:
1. Нижняя граница диапазона должна быть не меньше верхней.
2. Между верхней и нижней границами диапазонов ставятся две точки и не должно быть никаких пробелов.
3. У многомерных массивов диапазоны разделяются запятыми, количество измерений не ограничено (за исключением, конечно, правила о 65520 байтах).
4. Границы диапазонов находятся в пределах либо -32768..32767, либо 0..65535.
5. В качестве границ диапазонов могут использоваться не только числа, но и определённые к этому моменту константы.
Второй, более удобный и гибкий способ описания массивов заключается в предварительном введении типов.
Например, описания массивов
Var
a, c: array [1..3] of real;
b, d: array [5..7,1..3] of real
и
Const
k1 = 1; k2 = 3; l1 = 5, l2 = 7;
Type
vector = array [k1..k2] of real;
matrix = array [l1..l2] of vector;
Var
a, c: vector;
b, d: matrix
эквивалентны между собой.
Элемент одномерного массива обозначается с помощью названия массива и индекса, заключённого в квадратные скобки, например a[k]; индексы элемента многомерного массива могут быть перечислены в квадратных скобках через запятые или быть заключены в отдельные квадратные скобки, например b[2,10] или b[2][10]. При этом b[2] представляет собой одномерный массив.
|
|
Почти все действия с массивами осуществляются поэлементно, например:
a[2]:=3;
read(b[5,6]);
a[2]:= c[3] + d[7];
WriteLn(c[3]: 5:2, c[3] - d[5]: 5: 1);
Исключения составляют лишь присваивание всем элементам одного массива таких же значений, как у элементов другого массива и сравнение идентичности всех элементов двух массивов. Чтобы эти операции были возможны, необходимо оба массива описать совместно (в одном списке), либо предварительно ввести тип и использовать при описании массивов идентификатор типа. Например:
Type vector_1 = array[0..10] of real;
Var a, b: vector_1;
Begin a: = b;
if a = b then WriteLn(‘ массивы a и b совпадают ‘);
if a <> b then WriteLn (‘массивы a и b не совпадают ‘);
С другой стороны, если задать следующие массивы:
Var A, B: array[1..5] of Integer;
C: array[1..5] of Integer;
то допустим следующий оператор: A:= B;
Но оператор C:= A; недопустим, несмотря на то, что структуры массивов C и A совпадают, так как данные массивы неидентичных типов.
Начальные значения элементов массива могут быть заданы внутри программы или при описании массива. Во втором случае массив описывается в разделе Const, а элементы перечисляются через запятые и заключаются в скобки. Количество начальных значений должно строго соответствовать количеству элементов массива. Например:
Type
Dim2 = array[1..2] of integer;
Dim4´3´2 = array[1..4,1..3] of Dim2;
Const
a: Dim2 = (0,3);
b: Dim4´3´2 = (((0,1), (0,4), (5,-7)),
((-2,1), (6,-3), (8,2)),
((3,0), (0,0), (0,4)),
((0,1), (2,4), (-1,2)));
Почти все операции с массивами требуют использования операторов цикла. К наиболее распространённым операциям относятся суммирование элементов массива и поиск наибольших (наименьших) значений элементов.
Вывод на печать групп элементов одномерного (двумерного) массива чаще всего осуществляется в виде строки (таблицы). При выводе отдельных элементов указывают их индексы. Например:
i:= 3; j:=2; k:= 5;
a[i,j,k]:= 7.5;
WriteLn(‘a[‘,i:1,’,’,j:1,’,’,k:1,’]=‘,a[i,j,k]:3:1);
В результате на экран будет выведено a[3,2,5] = 7.5.
Задание 1. Выполнить примеры 1-4. Тексты программ сохранять в файлах под именами lab4_pr1.pas - lab4_pr4.pas