Дана действительная квадратная матрица порядка n Найти наибольше из значений элементом...

0 голосов
187 просмотров

Дана действительная квадратная матрица порядка n Найти наибольше из значений элементом расположеных в заштрихованой части матрицы.

var i,j,n:integer;
c:array[1..100,1..100] of integer;

max:=c[1,1];

begin
readln(n);
For i:=1 to n do
for j:=1 to n do
c[i,j]:=random(99)+1;
for i:=1 to n do
begin

for j:=1 to n do
write(c[i,j]:5);
writeln;
end;
if (i>=j) and ((i+j)<=(n+1)) or <br> (i<=j) and ((i+j)>=n+1) then
begin
if max writeln(max);
end;

end.


Не могу понять почему максимум становится всегда последний элемент матрицы хотя в матрице ( в выделеной области) есть значения больше . Помогите найти ошибку или если ошибок оченьь много напишите готовый код к заданию. Заранее спасибо


image

Информатика (41 баллов) | 187 просмотров
0

var i,j,n:integer;c:array[1..100,1..100] of integer; max:=c[1,1];beginreadln(n);for i:=1 to n do begin for j:=1 to n do begin c[i,j]:=random(99)+1; write(c[i,j]:5);if (i>=j) and ((i+j)<=(n+1)) or (i<=j) and ((i+j)>=n+1) thenif (max<c[i,j]) then max:=c[i,j]; end; writeln; end;Write('максимум: ', max);end.

Дан 1 ответ
0 голосов
Правильный ответ

По поводу вашей программы:

1. Строка if max writeln(max); написана с нарушениями синтаксиса, приведённый вами код не будет компилироваться. Исходя из этого, я не особенно вчитывался и в предшествующие ей проверки, т.к. не совсем понятно, что именно вы хотели сделать в конце.

2. Все проверки максимума (я про
if (i>=j) and.. и т.д.) вы делали после выхода из цикла. Могу предположить, что из-за этого у вас и возникали проблемы с нахождением максимума, ведь после прохождения цикла i и j хранят последнюю строку и последний столбец.

Предлагаю внести следующие изменения:

1. Индексацию массивов начинаем с нуля, тогда введённое n уменьшаем на единицу перед началом работы.

2. И присвоение, и вывод элементов, и нахождения максимума производим в одном цикле. Зачем гонять программу несколько раз по кругу, если можно сделать обход единожды?

3. Максимум ищем по следующим условиям: если
(слева)  индекс столбца меньше или равен индексу строки, но не меньше, чем n/2, округлённое в большую сторону
(справа)
индекс столбца больше или равен индексу строки, но не превышает n/2, округлённое в большую сторону
(и для обоих сторон) если элемент на пересечении индексов больше максимума.

Прилагается исходник и скрин нескольких результатов работы. "правую" и "левую" часть из своего объяснения обвёл разными цветами. Эти части соответствуют "заштрихованной" области из вашего задания.


image
(1.8k баллов)
0

спасибо буду разбираться

0

Спрашивайте если что-то вызовет вопросы

0

копирнул вашу програму в онлайн паскале и выдает ошибку типо " При загрузке содержимого файла гостя произошла неизвестная ошибка на сервере"

0

сделал свою работу одним циклом получилось та же ошибка... и чем мой максимум не подходит? ну нахождения максимума вроде правельно же

0

Скачайте PascalANC.Net и "копирните" в него. Времени на это потратите очень немного. Ваш максимум, как я уже говорил, был плох существованием вне цикла, а также обрезанным оператором выбора, который вы наверное неправильно скопировали и лишили ответчика возможности до конца разглядеть вашу логику. Я отметил, что не проверял ваши if-ы, и честно сходу не могу сказать, зачем вы делаете (i+j)<=(n+1) и т.д. Здесь уже должен быть ваш, как разработчика, ответ "Почему плох?"

0

Вы просили одним из вариантов ответа готовый код для выполнения задания - я вам его предоставил.

0

она у меня виснет при запуске ..пробывал и перезапускать и удалять и чистить один фиг
спасибо

0

Покажите, что компилятор пишет (снизу в АBC вкладки, где окно вывода и проч). Только что скопировал отосланное вам в пустой файл и запустил, всё работает.

0

" При загрузке содержимого файла гостя произошла неизвестная ошибка на сервере" 'это онлайновый. а такой у меня виснет на любой програме которую делаю и запускаю просто виснет и не отвечает