Matrix44. Дана матрица размера $$M \times N$$. Найти минимальный среди элементов тех строк, которые упорядочены либо по возрастанию, либо по убыванию. Если упорядоченные строки в матрице отсутствуют, то вывести $$0$$.
Решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
program Matrix44; var a:array [1..10,1..10] of integer; M, N, i, j:Integer; begin Write('N: '); Readln(N); Write('M: '); Readln(M); for i:=1 to M do begin writeln(i,': '); for j:=1 to N do begin Write(j,' : '); Read(a[i,j]); end; end; for i:=1 to M do begin j:=2; While ((a[i,j-1]<a[i,j]) and (j<=N)) do inc(j); if j=N+1 then writeln(a[i,1]) else begin j:=2; While ((a[i,j-1]>a[i,j]) and (j<=N)) do inc(j); if j=N+1 then writeln(a[i,N]) else writeln('0'); end; end; end. |
Другие задачи из раздела Matrix можно посмотреть здесь.
А если автор задачи подразумевал найти один минимальный элемент из элементов всех упорядоченных строк, а не минимальный в каждой упорядоченной строке? Тогда решение неверное.
Переделал ваш код, чтоб программа работала, как в моем комментарии выше. Наверное можно лучше, но долго не думал, поэтому так как есть.
Процедура PrintRow(a,m,n,i) находится в модуле TaskMatrix и это что-то такое:
«А если автор задачи подразумевал найти один минимальный элемент из элементов всех упорядоченных строк, а не минимальный в каждой упорядоченной строке? Тогда решение неверное.»
При таком условии, моё решение проще для быстрого понятия, чем решение человека выше)
Денис, ну тут суть то одна и та же в этих программах, только выше там наляпано с присвоением начального значения переменной Min, которой можно было заранее присвоить значение MaxInt и не использовать булевый флаг found. В конце же сравнивать Min c MaxInt и выводить соответственно или Min, если Min < MaxInt или 0 в противном случае. Но там есть и две ошибки в циклах, где проверяются строки на упорядоченность. В вашей программе они тоже есть (см строки 21 и 24). Строки могут быть, например, такими: 1 1 2 3 4 или 4 3 2 2 1, и эти циклы не увидят их отсортированными. Еще у вас ошибка в 15 строке, где вы переменной min присваиваете значение последнего элемента последней строки матрицы. А если, например, эта последняя строка матрицы не отсортированная, а последний элемент этой строки меньше всех элементов отсортированных строк? Нужно как-то иначе инициализировать переменную min, например так: min := MaxInt.
Здравствуйте.
Мне кажется по логике если строка будет 1 1 2 3 4, то ни одно из условий тут не будет, как раз таки программа эту строку пропустит.
Ведь по условию возрастания или убывания, каждый следующий элемент должен быть больше\меньше, а если он равен текущему, то условие в задании уже не выполняется.
Я просто новичёк и ваш код мне пока-что сложен, по этому думал, было бы не плохо выложить по проще что то.
Насчёт 15 строки, тут вы правы, там даже не последний элемент присваивается(не понял почему). Исправил присвоением единички, ибо в матрице это будет минимальным числом.
Строка 1 1 2 3 4 отсортирована по возрастанию и ее нужно учитывать. Так же и со строками по убыванию. При поиске минимального изначально в min нужно записывать максимальное число. Поэтому, обычно, берут MaxInt и не парятся в дальнейшем. Если взять минимальное, то вот это if a[i, j] < min then min := a[i, j] не будет работать (строка 29).
Ах да, максимальное же берём.