ЛАБОРАТОРНАЯ РАБОТА № 5
Работа с массивами
1. Цель работы
Освоить работу с регулярными типами данных.
2. Краткие теоретические сведения
2.1Массивы
Массив – структура, состоящая из фиксированного числа упорядоченных компонент (элементов) одного типа, называемого типом компонент (элементов). Элементы массива обозначаются индексами, значения которых принадлежат типу индекса. Каждому набору значений индексов соответствует один и только один элемент массива. Таким образом, каждый элемент массива можно выбрать с помощью индексного выражения.
Массив может быть одномерным и многомерным. В общем виде структура описания типа массив имеет вид:
array [ <тип индекса> ] of <имя типа элемента>.
Причем массивы могут быть многомерными:
array [<тип индекса1>, <тип индекса2> , ... ] of <имя типа элемента >.
2.2 Пример объявления типа массив: const
MaxIndex |
= 10; { Максимальный индекс массива } |
MinLine |
= -5; { Минимальный индекс строки } |
type
index = 1..MaxIndex; { Индекс массива } ind_line = MinLine..MaxIndex; { Индекс строки }
matrix |
= array [ind_line, index ] of real; { Массив данных } |
|
vector |
= array [ index ] of real; { Вектор результатов } |
|
vector_set |
= array [ind_line] of vector; { Массив векторов результатов } |
|
color |
= ( red, green, blue ); { Множество цветов }; |
|
color_levels |
= array[ color ] of integer; { Значения уровней основных цветов }; |
В разделах объявления типа (type) и объявления переменных (var) можно тип ин-
декса указывать диапазоном. Например: type
vector = array [ -5..32 ] of real; { Вектор результатов }
Matrix = array[ 1..10, 1..10 ] of real; { Массив данных }
var
table : Matrix; i : integer;
begin
i := 1;
table[1, i] := 4.32;
end.
2.3Применение массивов
Массив можно рассматривать как вектор, матрицу, а так же таблицу или список значений. Их используют в тех случаях, когда над совокупностью значений выполняются некоторые стандартные (единообразные) действия.
Например:
-Хранение списков точек для построения графика.
-Хранение списков чисел для усреднения.
-Хранение коэффициентов матрицы.
-Хранение кодовой таблицы.
-Хранение состояний клеток шахматной доски.
Еще одно важное использование массивов – это обработка текстов. Слова и предложения составляются из отдельных литер (символов). Текст хранят в специальном типе массива, называемом строковой переменной. Таким массивом в TurboPascal является тип String.
Вязыке ПАСКАЛЬ имеются только две операции, работающие с массивом целиком:
-Присваивание одному массиву другого того же типа.
-Передача массивов процедуре в качестве параметров.
Не допускается:
-Сравнение массивов.
-Возврат массива как значения функции.
-Сложение массива друг с другом.
Естественно, массивы нельзя ввести или вывести стандартными процедурами Read, Redln и Write, Writeln.
Однако элементы массива можно использовать в любом месте программы, где допустимо использование переменных этого типа (имеется ввиду тип элемента).
Элемент массива указывается с помощью списка индексов в следующей форме: <имя массива> [<индекса1>, < индекса2> , ... ]
Количество индексов должно быть точно таким же, как и при объявлении массива. Т.е. для элемента одномерного массива обращение имеет вид:
<имя массива> [<индекс>]
Индексами элемента могут быть любые константы, переменные или выражения, имеющие тип совместимый с соответствующим типом индекса, при этом перед выполнением операции с элементом массива вначале вычисляются индексы, а лишь затем, по полученным
значениям индексов, из массива выбирается элемент и с ним или его значением производится операция.
Например следующая программа запрашивает у пользователя значения всех элементов массива и находит в нем и выводит на экран значение минимального элемента и его индексы:
program min; const
max_row = 2; {максимальный номер строки} max_col = 3; {максимальный номер столбца}
type
idx_row = 1..max_row; {индекс строки} idx_col = 1..max_col; {индекс столбца}
matr = array[ idx_row, idx_col ] of real; {тип массива} var
raw: idx_row; {номер строки} col: idx_col; {номер столбца} data : matr; {массив данных}
m_raw : integer; {индекс строки минимального элемента} m_col : integer; {индекс столбца минимального элемента}
begin
Writeln;
Write('Программа находит минимальное число в массиве размером ' );
Writeln( max_row,'x', max_col, '.' ); Writeln;
{Ввод элементов массива} Writeln( 'Введите данные' ); for raw := 1 to max_row do
for col := 1 to max_col do
begin {Запрос и чтение очередного элемента} Write( 'Введите элемент [ ', raw, ', ', col, ' ]=? ' );
Readln( data[ raw, col ] ); end;
{Поиск минимального элемента} {Предполагаем, что минимальный элемент - первый [1, 1]}
m_raw := 1; m_col := 1; {начальные значения индексов} for raw := 1 to max_row do
for col := 1 to max_col do
if data[ raw, col ] < data[ m_raw, m_col ] then
begin {Запоминаем индексы найденного элемента} m_raw := raw;
m_col := col; end;
{Вывод результата} Writeln;
Writeln( 'Минимальный элемент [ ', m_raw, ', ', m_col, ' ]= ', data[ m_raw, m_col ] ); Writeln;
Write('Для завершения работы с программой нажмите ENTER' );
Readln end.