Лекция №10. Структурированные типы данных. Одномерные и двумерные массивы

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

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

Элементы массива пронумерованы, и обратиться к каждому из них можно по номеру. Номера элементов массива иначе называются индексами, а сами элементы массива – индексированными переменными. Характеристика массива:

- Тип –общий тип для всех элементов массива;

- Размерность – количество индексов массива;

- Диапазон изменения индекса (индексов) – определяет количество элементов массива.

Массивы чаще всего на практике бывают одномерными и двумерными. Вектор или одномерный массив – это массив, в котором элементы нумеруются одним индексом. Если в массиве хранится таблица значений (матрица), то такой массив называется двумерным, его элементы нумеруются двумя индексами – номером строки и номером столбца. Массивы большей размерности встречаются на практике редко.

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

В качестве индекса элемента массива используется выражение порядкового типа, чаще всего индекс – это переменная типа integer. При обращение к элементу массива индекс указывается в квадратных скобках после имени массива, например: A[5], B[1,2].

Массивы объявляются в разделе описания переменных var.

Тип массив обозначается зарезервированным словом ARRAY,после которого указывается диапазон изменения номеров элементов и, после зарезервированного слова OF, тип элементов массива. Объявление массива задаётся следующим образом:

<имя массива>: ARRAY [границы индексов] OF <тип>.

Например:

Var

a: array[1..100] of integer; ----- 100 элементов – целые числа;

b: array[0..50] of char;---------- 51 элемент – символы;

c: array[-1..20] of real; ----------- 22 элемента – вещественные числа.

Для двумерных массивов:

Var

y: array[1..3,1..4] of integer;----- массив из 12 целых чисел (3 х 4);

x: array[1..5,1..4] of real;----------- массив из 20 вещественных числа.

Например, пусть в памяти компьютера расположена таблица чисел:

1 2 3 4

5 6 7 8

9 10 11 12

Для адресации элементов таблицы требуется два индекса – номер строки и номер столбца. Индекс 1 в данном примере принимает значение от 1 до 3 (3 строки), а индекс 2 может меняться от 1 до 4. Нижняя граница индекса отделяется от верхней двумя точками. Нижняя границане должна превосходитьверхнюю.

При описании массива широко используется предварительное описание типа в разделе описания типов данных. Например:

Type

ИмяТипа = array[НижГранИнд1..ВерхнГранИнд1,

НижГранИнд2..ВерхнГранИнд2] of

ТипЭлементов;

Var

ИмяМассива: ИмяТипа;

Например:

Const

row = 10; col = 15;

Type

matr = array[1..row, 1..col] of integer;

Var

mas: matr;

Для ввода и вывода элементов массива используется цикл for, в котором параметром цикла будет индекс (порядковый номер) элемента массива. Для двумерных массивов применяются вложенные циклы.

Пример 1. В заданном массиве A1, A2, …, A30 найти и вывести на печать сумму и произведение всех элементов массива.

program mas1;

var

i, s, p: integer;

mas1: array [1..20] of integer;

begin

for i:= 1 to 20 do

readln(mas1[i]);

s:= 0;

p:= 1;

for i:= 1 to 20 do

begin

s:= s + mas1[i];

p:= p * mas;

end;

writeln(s, p);

end.

Организация доступа к элементам массива.

Действия над массивами

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

- Ввести данные с клавиатуры;

- Присвоить элементам заданные значения;

- Считать значения из файла.

В любом случае для заполнения массива используется цикл FOR. Для двумерных массивов используются вложенные циклы.

Пример заполнения одномерного массива из 5 элементов при помощи ввода значений с клавиатуры:

for i:= 1 to 5 do readln(a[i]);

Пример заполнения матрицы 3х4 (всего 12 чисел) с клавиатуры:

for i:= 1 to 3 do

for j:= 1 to 4 do

readln(a[i,j]);

Иногда необходимо заполнить массив нулями, т.е. обнулить.

for i:= 1 to 5 do a[i]:= 0;

или

for i:= 1 to 3 do

for j:= 1 to 4 do

a[i,j]:= 0;

Вывод значений элементов массива также выполняется с помощью цикла FOR с использованием операторов write и writeln. Например, вывод вектора из пяти элементов выглядит так:

for i:= 1 to 5 do writeln (a[i]); -в столбец;

for i:= 1 to 5 do write (a[i], ' '); -в строку через пробел-разделитель;

for i:= 1 to 5 do write (a[i]:4); -с заданным форматом.

Вывод матриц по строкам и столбцам выполняется при помощи оператора writeln; (без параметра). Он используется после вывода текущей строки матрицы для перевода курсора в начало следующей строки:

for i:= 1 to 3 do

Begin

for j:= 1 to 4 do

write(a[i,j]:4);

writeln;

end;

Наши рекомендации