Воробьева А.П., Соппа М.С. - Система программирования Турбо Паскаль 7.0 (1092189), страница 10
Текст из файла (страница 10)
while x<=1 do
begin
y := 0;
while y<=1 do
begin
writeln(x:6:1, y:6:1, z:6:1);
end;
x := x + 0.2;
end;
End.
ГЛАВА 7. Массивы
7.1. Понятие массива
Массив представляет собой упорядоченное множество однотипных элементов. В Турбо Паскале массив описывается переменной сложной структуры. При описании необходимо указать:
-
способ объединения элементов в структуру;
-
число элементов;
-
тип элементов.
Общий вид описания массива:
<имя массива>: ARRAY [тип–диапазон индексов] OF <тип элементов массива>;
Доступ к каждому элементу массива осуществляется с помощью индексов. Тип – диапазон каждого индекса задается левой и правой границами изменения индекса. Число индексов определяют структуру массива: если используется один индекс, то такой массив называется одномерным, если два индекса – двумерным. В общем случае размерность массива может быть произвольной.
7.2. Одномерные массивы
В математике одномерному массиву соответствует мерный вектор, например:
компонента (координата) вектора;
Описание одномерного массива
В Турбо Паскале описание одномерного массива задается следующим образом:
<имя массива>: ARRAY [m1 m2] OF < тип элементов>;
Индекс одномерного массива определяет порядковый номер элемента в массиве.
m1 m2 – диапазон значений индекса.
Тип элементов в массиве может быть любым: простым (REAL, INTEGER, CHAR), структурным (ARRAY), строковым (STRING).
По описанию массива в памяти компьютера выделяется область последовательных ячеек, в которую при выполнении программы заносятся значения элементов массива. Например, по описанию
Var
X: array [15] of real;
будет выделяться область из пяти последовательных ячеек для записи значений элементов вещественного типа.
Индексные переменные
Выбор отдельного элемента из массива осуществляется с помощью индексной переменной, которая задается следующим образом:
индексная переменная (элемент массива);
индекс (номер элемента массива).
В качестве индекса используются:
Замечание. Индексными выражениями являются арифметические выражения целого типа.
Индексная переменная, как и простая, может стаять в левой части оператора присваивания, например:
Ввод-вывод одномерных массивов
Ввод-вывод массивов осуществляются поэлементно с помощью оператора цикла FOR, в котором в качестве параметра используется индекс.
Пример 1. Организовать ввод с клавиатуры массива:
В разделе описания переменных необходимо задать описание массива и индекса.
Var
A: array [14] of real;
i: integer;
В операторной части программы рекомендуется ввод массива организовать в виде диалога, сопроводив ввод соответствующим сообщением на экране.
Begin {начало программы}
writeln(‘Введите массив А’);
for i := 1 to 4 read(a[i]);
……………
На клавиатуре набирается:
1.2 5 6.8 14 Enter .
Пример 2. Организовать вывод массива А на экран таким образом, чтобы все элементы располагались на одной строке экрана.
В программе надо записать следующие операторы:
for i := 1 to 4 do write(a[i]:5:1);
writeln;
Вид выводимого массива на экране:
1.2 5.0 -6.8 14.0
Оператор WRITELN без списка служит для перевода курсора к началу следующей строки.
Обработка одномерных массивов
При решении задач обработки массивов используют базовые алгоритмы реализации циклических вычислительных процессов: организация счетчика, накопление сумм и произведений, поиск минимального и максимального элементов массива.
Задача 1. Организация счетчика.
Определить количество элементов заданного целочисленного массива , которые делятся на 3 без остатка.
Program OM_1;
Var
B: array [1… 20] of integer;
i, L: integer;
Begin
writeln(‘Введите массив В’);
for i :=1 to 20 do read(b[i]);
L := 0;
for i :=1 to 20 do
if (b[i] MOD 3) = 0 then L := L+1;
writeln(‘L =’, L);
End.
Задача 2. Накопление суммы и произведения.
Дано целое число и массив вещественных чисел
. Вычислить среднее арифметическое и среднее геометрическое чисел массива, используя формулы:
Program ОМ_2;
Var
Х: array [1… 100] of real;
n, i: integer;
S, P: real;
Begin
writeln(‘Введите размер массива n’);
read(n);
writeln(‘Введите массив Х’);
for i := 1 to n do read(x[i]);
S := 0;
P := 1;
for i := 1 to n do
begin
S := S + x[i];
P := P x[i];
end;
S := S/n;
P := exp(1/n * ln(P));
writeln(‘S =’, S:6:2);
writeln(‘P =’, P:10:2);
End.
Задача 3. Поиск минимального и максимального элементов массива.
Поменять местами минимальный и максимальный элементы массива и вывести массив после обмена.
В этой задаче дополнительно надо знать местоположение минимального и максимального элементов, поэтому одновременно с поиском надо запоминать индексы.
Введем обозначения:
min – минимальный элемент;
imin – индекс минимального элемента;
max – максимальный элемент;
imax – индекс максимального элемента.
Program ОМ_3;
Var
T: array [1… 10] of real;
i, imin, imax: integer;
min, max: real;
Begin
writeln(‘Введите массив T’);
for i := 1 to 10 do read(t[i]);
min := +1E6;
max := -1E6;
for i := 1 to 10 do
begin
if t[i]<min then
begin
min := t[i];
imin := i;
end;
if t[i]>max then
begin
max := t[i];
imax := i;
end;
end;
t[imin]:= max;
t[imax]:= min;
for i := 1 to 10 do write(t[i]:6:2);
writeln;
End.
7.3. Двумерные массивы
Двумерные массивы в математике представляются матрицей:
или сокращенно можно записать:
индексы (номера) текущих строки и столбца, на пересечении которых находится элемент
.
Описание двумерного массива
Описание матрицы в разделе VAR задается структурным типом вида:
<имя массива>: ARRAY [m1..m2, n1..n2] OF <тип элементов>;
m1..m2 – диапазон значений индекса i, определяющий число строк;
n1..n2 – диапазон значений индекса j, определяющий число столбцов.
По описанию матрицы во внутренней памяти компьютера выделяется область из ( ) последовательных ячеек, в которые при работе программы записываются значения элементов матрицы. Например, по описанию:
Var
A: array [1..3, 1..5] of real;
в памяти компьютера выделяется область, состоящая из последовательных ячеек, для записи элементов матрицы вещественного типа. Из описания видно, что матрица состоит из трех строк и пяти столбцов.
Обращение к отдельным элементам матрицы осуществляется с помощью переменной с двумя индексами, например:
Ввод-вывод двумерного массива
Для поэлементного ввода и вывода матрицы используется двойной цикл FOR. Если задать индекс как параметр внешнего цикла, а индекс
как параметр внутреннего цикла, то ввод-вывод матрицы осуществляется по строкам.
Пример 1. Организовать ввод целочисленной матрицы по строкам.
Описание матрицы вместе с текущими индексами имеет вид:
Var
M: array [1..2, 1..3] of integer;
i, j: integer;
Ввод в программе реализуется в форме диалога, т.е. сопровождается соответствующим сообщением:
Begin {начало программы}
writeln(‘Введите матрицу М’);
for i := 1 to 2 do
for j := 1 to 3 do read(m[i, j]);
…………
На клавиатуре нагляднее всего набирать элементы матрицы по строкам.
1 2 3 <Enter>
4 5 6 <Enter>
Пример 2. Организовать вывод матрицы M на экран.
Вывод матрицы надо реализовать в удобном для чтения виде, т.е. чтобы на одной строке экрана располагалась одна строка матрицы. С этой целью в тело внешнего цикла, помимо внутреннего, включается еще оператор WRITELN, который переводит курсор к началу следующей строки экрана после вывода текущей строки матрицы.
for i := 1 to 2 do
begin
for j := 1 to 3 do write(m[i, j]:3);
writeln
end;
Вид матрицы на экране будет следующим:
1 2 3
4 5 6
Обработка матриц
Базовыми алгоритмами обработки матриц являются те же алгоритмы, которые используются при обработке одномерных массивов. Однако реализацию этих алгоритмов можно условно рассматривать для двух типов задач.
-
Алгоритмы реализуются при обработке всех элементов матрицы.
-
Алгоритмы реализуются внутри каждой строки или каждого столбца матрицы.
Реализация алгоритмов для задач первого типа
Задача 1. Дана матрица вещественных чисел . Вычислить значение
, где P1 и P2 – произведения положительных и отрицательных элементов матрицы соответственно.
Program DМ_1;
Var
A: array [1..4, 1..6] of real;
i, j: integer;
P1, P2, Z: real;
Begin
writeln(‘Введите матрицу А’);
for i := 1 to 4 do