Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Двумерные массивы.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
483 Кб
Скачать
☆

Задание 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;