
Даны целочисленная матрица A[1:n, 1:m] и целочисленный массив B[1:k]. Удалить путем сдвига все
строки матрицы, содержащие хотя бы один элемент, равный максимальному элементу массива. const lmax = 100; type mass = array [1..lmax] of integer; matr = array[1..lmax,1..lmax] of integer; var A: matr; B: mass; i, j, n, m, k, max: integer; flag: boolean; begin repeat writeln('Введите количество строк и столбцов матрицы n и m'); readln(n, m); until (n>0) and (m>0); repeat writeln ('Введите колличество элементов массива k'); readln(k); until k>0; for i:=1 to n do for j:=1 to m do begin write('A[',i,',',j,']:='); readln(A[i,j]) end; for i:=1 to k do begin write('B[',i,']:='); readln(B[k]); end; flag:=false; max:=-maxint; for j:=1 to k do if B[j]>max then max:=B[j]; for i:=1 to n do for j:=1 to m do begin if flag=true then begin A[n,m]:=A[n+1,m]; n:=n-1; flag:=false; end else if A[n,m]=max then flag:=true; end; writeln('Новая матрица: '); for i:=1 to n do begin for j:=1 to m do write(a[i,j],' '); writeln; end; end. Не могу найти, что именно не так, задание программа выполняет не верно

Ответы на вопрос

Замените кусок кода или скачайте прикрепленный файл





Похоже, у вас есть несколько ошибок в вашем коде. Я опишу проблемы и предоставлю исправленный код:
Ошибка в чтении массива B: В вашем коде вы ошибочно используете индекс
k
, когда читаете элементы массива B. Вы должны использовать переменнуюi
, чтобы правильно заполнить массив B.Условие сравнения в цикле проверки элементов матрицы: В вашем коде, когда вы проверяете элементы матрицы для удаления строк, вы сравниваете элементы с максимальным значением, но вы должны сравнивать их с максимальным значением массива B.
Неправильное обращение к элементу матрицы: В коде для сдвига строк вы обращаетесь к элементу
A[n, m]
, но вы должны использоватьA[i, j]
.Условие для проверки максимального элемента в массиве B: Ваш код для нахождения максимального элемента массива B неправильно устанавливает переменную
max
равной-maxint
, что может привести к неверным результатам. Вы должны сначала установитьmax
равным первому элементу массива B и затем сравнивать с остальными элементами.
Исправленный код:
pascalconst lmax = 100; type mass = array [1..lmax] of integer; matr = array[1..lmax, 1..lmax] of integer; var A: matr; B: mass; i, j, n, m, k, max: integer; flag: boolean; begin repeat writeln('Введите количество строк и столбцов матрицы n и m'); readln(n, m); until (n > 0) and (m > 0); repeat writeln('Введите колличество элементов массива k'); readln(k); until k > 0; for i := 1 to n do for j := 1 to m do begin write('A[', i, ',', j, ']: '); readln(A[i, j]) end; for i := 1 to k do begin write('B[', i, ']: '); readln(B[i]); end; max := B[1]; // Инициализируем max первым элементом массива B for i := 1 to k do if B[i] > max then max := B[i]; // Находим максимальный элемент в массиве B flag := false; for i := 1 to n do for j := 1 to m do begin if flag then begin A[i, j] := A[i + 1, j]; end else if A[i, j] = max then begin flag := true; break; // Добавляем прерывание цикла, чтобы избежать повторных сдвигов в текущей строке end; end; if flag then n := n - 1; // Уменьшаем количество строк, если был найден элемент, равный максимальному элементу B writeln('Новая матрица: '); for i := 1 to n do begin for j := 1 to m do write(A[i, j], ' '); writeln; end; end.
Теперь код должен работать правильно и выполнять задание по удалению строк с элементами, равными максимальному элементу массива B.


Похожие вопросы







Топ вопросов за вчера в категории Информатика









Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili