Дана матрица размера N × M и целое число K (1 ≤ K ≤ M). Удалить столбец матрицы с номером K. Pascal решение
pascal
var
matrix: array of array of Integer; // исходная матрица
N, M, K: Integer; // размеры матрицы и номер столбца для удаления
newMatrix: array of array of Integer; // новая матрица
i, j, newJ: Integer; // индексы для циклов
begin
// считываем размеры матрицы и номер столбца для удаления
Readln(N, M, K);
// инициализируем матрицу и считываем ее элементы с клавиатуры
SetLength(matrix, N, M);
for i := 0 to N - 1 do
for j := 0 to M - 1 do
Read(matrix[i, j]);
// создаем новую матрицу с размерами N × (M - 1)
SetLength(newMatrix, N, M - 1);
// копируем элементы исходной матрицы в новую, пропуская столбец с номером K
for i := 0 to N - 1 do
begin
newJ := 0;
for j := 0 to M - 1 do
begin
if j <> K - 1 then // проверка, не является ли текущий столбец столбцом для удаления
begin
newMatrix[i, newJ] := matrix[i, j];
Inc(newJ);
end;
end;
end;
// выводим новую матрицу на экран
for i := 0 to N - 1 do
begin
for j := 0 to M - 2 do // выводим только M - 1 столбцов
Write(newMatrix[i, j], ' ');
Writeln(newMatrix[i, M - 2]);
end;
end.
Давайте рассмотрим данный код более подробно.
Переменные `matrix`, `newMatrix`, `i`, `j`, `newJ` объявлены типа `Integer`, а переменные `N`, `M`, `K` также типа `Integer`, но они представляют собой размеры матрицы и номер столбца для удаления соответственно.
В строке `Readln(N, M, K);` мы считываем с клавиатуры размеры матрицы и номер столбца для удаления.
Далее идет создание исходной матрицы `matrix` и заполнение ее элементами с помощью двух вложенных циклов:
pascal
SetLength(matrix, N, M);
for i := 0 to N - 1 do
for j := 0 to M - 1 do
Read(matrix[i, j]);
Индексы циклов `i` и `j` пробегают значения от 0 до N - 1 и от 0 до M - 1 соответственно. Здесь `matrix[i, j]` - это доступ к элементам матрицы по индексам `i` и `j`. Функция `Read` используется для считывания элементов с клавиатуры.
Далее идет создание новой матрицы `newMatrix`, у которой кол-во столбцов будет на 1 меньше, чем у исходной `matrix`, и заполнение ее элементами исходной матрицы, пропуская столбец с номером K:
pascal
SetLength(newMatrix, N, M - 1);
for i := 0 to N - 1 do
begin
newJ := 0;
for j := 0 to M - 1 do
begin
if j <> K - 1 then
begin
newMatrix[i, newJ] := matrix[i, j];
Inc(newJ);
end;
end;
end;
В этих циклах мы также используем индексы `i` и `j` для обращения к элементам матрицы `matrix` и `newMatrix`, а также переменную `newJ` для перехода к следующему столбцу в новой матрице. Если значение `j` не равно K - 1, то мы копируем элемент из исходной матрицы в новую. В конце каждой итерации внутреннего цикла мы увеличиваем переменную `newJ` на 1.
Наконец, выводим новую матрицу на экран с помощью следующего кода:
pascal
for i := 0 to N - 1 do
begin
for j := 0 to M - 2 do
Write(newMatrix[i, j], ' ');
Writeln(newMatrix[i, M - 2]);
end;
В этих циклах снова используются индексы `i` и `j` для обращения к элементам новой матрицы `newMatrix`. Внутренний цикл выводит элементы строки новой матрицы, кроме последнего элемента, а в конце каждой строки мы переходим на новую строку с помощью `Writeln`.
Также внутри циклов есть обработка пробела (`Write(newMatrix[i, j], ' ');`) для отделения элементов матрицы друг от друга.
Таким образом, приведенный выше код на Pascal позволяет удалить столбец матрицы с номером K и вывести новую матрицу на экран.Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет
Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет