B, d : matrix

Лабораторная работа

Тема - операции с массивами.

Цель работы - изучение операций с одномерными и многомерными массивами.

Общие сведения

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


Рис. 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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: