- •Двумерные массивы. Наибольший и наименьший элементы. Матрицы, строк, столбцов
- •1. Двумерные массивы
- •2. Ввод и вывод элементов двумерных массивов
- •Первый способ
- •Второй способ
- •Третий и четвертый способы
- •Алгоритм
- •Программа
- •Задание 1
- •Программа
- •Программа
- •Алгоритм
- •Программа
- •Задание 2
- •Программа
- •Программа
Задание 2
Сформировать матрицу размерности m x n из случайных чисел от 1 до 100. Расположить их в порядке возрастания по следующей схемам (см. рис. 55):
а) б)
Рис. 55
Пример 6. Составить программы:
а) удаления заданной строки из двумерного массива;
б) включение нового столбца в массив.
Решение
Алгоритм решения достаточно простой. Указывается номер удаляемой строки - k, а затем все остальные строки, расположенные "ниже" последовательно перемещаются на одну строку "вверх".
Этот процесс аналогичен перемещению элементов в одномерном массиве, с которым мы уже встречались. Надо лишь заметить, что при организации цикла перемещения строк, не обязательно указывать вторые индексы элементов, а вполне достаточно выполнить следующий цикл:
for i := k to n - 1 do a[i] := a[i + 1];
Здесь k - номер удаляемой строки. Как видите, вторые индексы массива a[i, j] не указываются и этого достаточно, чтобы выполнялось перемещение строк целиком.
Процедура удаления заданной строки из массива и вывод нового массива на экран:
Procedure distance_line(n, m, k : integer; var a : t);
var
i, j : integer;
begin
for i := k to n - 1 do a[i] := a[i+1];
writeln('Новый массив без ', k, '-й строки ');
for i := 1 to n - 1 do
begin
for j := 1 to m do write(a[i, j]:6, ' ');
writeln
end
end;
Формирование двумерного массива с помощью функции случайных чисел.
Ввод номера удаляемой строки. Последовательное перемещение строк. Вывод нового массива на экран.
Программа
Program Problem6a;
const
n = 5; m = 6;
type
s = array[1..m] of integer;
t = array[1..n] of s;
var
a : t;
k : integer;
{----------------------------------------------------------------------------------------}
Procedure create_two(n, m : integer; var a : t);
var
i, j : integer;
begin
writeln('Заданный двумерный массив целых чисел');
randomize;
for i := 1 to n do
begin
for j := 1 to m do
begin
a[i, j] := random(201) - 100;
write(a[i, j]:6, ' ')
end;
writeln
end
end;
{----------------------------------------------------------------------------------------}
Procedure distance_line(n, m, k : integer; var a : t);
var
i, j : integer;
begin
for i := k to n - 1 do a[i] := a[i + 1];
writeln('Новый массив без ', k, '-й строки ');
for i := 1 to n - 1 do
begin
for j := 1 to m do write(a[i, j]:6, ' ');
writeln
end
end;
{----------------------------------------------------------------------------------------}
begin
create_two(n, m, a);
write('Укажите номер строки, для удаления ');
readln(k);
distance_line(n, m, k, a)
end.
Для решения примера (б) требуется немногим больше. Во-первых, при описании массива следует учесть, что в новом массиве будет на 1 столбец больше, т.е. в каждой строке будет больше на одни элемент, а значит, описывая элементы строки надо записать:
type
s = array[1..m+1] of integer;
так как будет новый столбец, то и его надо описать:
f = array[1..n] of integer;
таким образом, полностью раздел описаний должен быть таким:
const
n = 5; m = 6;
type
s = array[1..m+1] of integer;
t = array[1..n] of s;
f = array[1..n] of integer;
var
a : t;
c : f;
i, j, k : integer;
Далее следует создать не только двумерный массив, но и новый столбец для вставки. Это можно сделать с помощью функций случайных чисел.
После этого необходимо указать то место в массиве, а точнее говоря, тот столбец, куда будет вставляется новый.
"Передвинуть" все остальные столбцы на 1 к концу, "влево".
И, последнее, вставить заданный столбец на указанное место.
Мы более подробно остановимся на перемещении столбцов и вставке нового столбца.
В отличие от перемещения строк, для перемещения столбцов нужно организовать двойной цикл, с указанием индексов перемещаемых элементов:
write('Введите номер столбца, куда вставляется новый ');
readln(k);
for i := 1 to n do
for j := m + 1 downto k + 1 do a[i, j] := a[i, j-1];
Для вставки нового столбца, также необходим цикл:
{Вставка нового столбца}
writeln('Массив с новым ', k, '-м столбцом');
for i := 1 to n do a[i, k] := c[i]; здесь c[i] - новый столбец элементов.
Процедура вставки нового столбца в заданный двумерный массив будет следующей:
Procedure insert_column(n, m, k : integer; c : f; var a : t);
var
i, j : integer;
begin
Перемещение столбцов в конец для освобождения места}
for i := 1 to n do
for j := m + 1 downto k + 1 do a[i, j] := a[i, j-1];
{Вставка нового столбца}
writeln('Массив с новым ', k, '-м столбцом');
for i := 1 to n do a[i, k] := c[i];
for i := 1 to n do
begin
for j := 1 to m + 1 do write(a[i, j]:6, ' ');
writeln
end
end;
