По поводу вашей программы:
1. Строка if max writeln(max); написана с нарушениями синтаксиса, приведённый вами код не будет компилироваться. Исходя из этого, я не особенно вчитывался и в предшествующие ей проверки, т.к. не совсем понятно, что именно вы хотели сделать в конце.
2. Все проверки максимума (я про if (i>=j) and.. и т.д.) вы делали после выхода из цикла. Могу предположить, что из-за этого у вас и возникали проблемы с нахождением максимума, ведь после прохождения цикла i и j хранят последнюю строку и последний столбец.
Предлагаю внести следующие изменения:
1. Индексацию массивов начинаем с нуля, тогда введённое n уменьшаем на единицу перед началом работы.
2. И присвоение, и вывод элементов, и нахождения максимума производим в одном цикле. Зачем гонять программу несколько раз по кругу, если можно сделать обход единожды?
3. Максимум ищем по следующим условиям: если
(слева) индекс столбца меньше или равен индексу строки, но не меньше, чем n/2, округлённое в большую сторону
(справа) индекс столбца больше или равен индексу строки, но не превышает n/2, округлённое в большую сторону
(и для обоих сторон) если элемент на пересечении индексов больше максимума.
Прилагается исходник и скрин нескольких результатов работы. "правую" и "левую" часть из своего объяснения обвёл разными цветами. Эти части соответствуют "заштрихованной" области из вашего задания.