13.11.2007, 18:42
общий
это ответ
Здравствуйте, Андрей Логинов!
Понятия главной и побочной диагонали имеют смысл только в квадратных матрицах и выражаются простыми формулами.
<b>Главная диагональ: </b> элементы на ней имеют индексы <b>i=j</b>, элементы над ней - <b>j > i</b>, под ней - <b>j < i </b>.
<b>Побочная диагональ: </b> элементы на ней имеют индексы <b>i+j=n+1</b>, элементы над ней - <b>i+j < n+1</b>, под ней - <b>i+j > n+1 </b>.
Всё это Вы можете проверить опытным путём, и убедитесь, что это так. При таком раскладе разделить матрицу на четверти проще простого:
<b>Верхняя: </b>j > i and i+j < n+1
<b>Нижняя: </b>j < i and i+j > n+1
<b>Левая: </b>j < i and i+j < n+1
<b>Правая: </b>j > i and i+j > n+1
Не знаю, что в Вашей задаче подразумевалось под "выделить четыре четверти" - если надо было вывести элементы этих четвертей на экран, Вы легко сможете сделать это, воспользовавшись в цикле этими формулами. Ну а код, меняющийи местами элементы верхней и нижней четверти смотрите в приложении. Здесь кроме вышесказанного надо заметить, что соответствующий элементу верхней четверти элемент нижней четверти будет иметь тот же самый индекс по столбцу и индекс по строке, выражающийся формулой <b>(n-i+1)</b>.
Удачи!
Приложение:
var a: array [1..10, 1..10] of integer; i, j, n, k: integer;begin readln (n); {ввод размерности} for i:=1 to n do for j:=1 to n do readln (a[i,j]); {ввод элементов} writeln; for i:=1 to n do begin for j:=1 to n do write (a[i,j]:5); {вывод исходной матрицы} writeln; end; for i:=1 to n div 2 do {цикл по строкам (достаточно просмотреть до половины} for j:=2 to n-1 do {цикл по столбцам (первый и последний никогда не будут входить в нужную область)} if (j>i) and (i+j<n+1) then {если это элемент верхней четверти} begin {меняем его с соответствующим элементом нижней четверти} k:= a[i,j]; a[i,j]:= a[n-i+1,j]; a[n-i+1,j]:= k; end; writeln (‘Resultat: ‘); {выводим результат обмена} for i:=1 to n do begin for j:=1 to n do write (a[i,j]:5); writeln; end;end.