Лекция №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;