Перестановка элементов на диагоналях матрицы. - Prolog
Формулировка задачи:
Помогите пожалуйста! Дано квадратную матрицу неизвестного размера, нужно получить новую матрицу в которой меняются местами половины главной и побочной диагоналей, что находятся справа от центра.
Решение задачи: «Перестановка элементов на диагоналях матрицы.»
textual
Листинг программы
change(M,Ans):-length(M,N), N mod 2=:=0,!, I is N//2,r(I,M,[],RUp,Down),z(I,N,RUp,Down,RUp1,Down1), r(I,Ans,[],RUp1,Down1). change(M,Ans):-length(M,N), I is N//2,J is N-I, r(I,M,[],RUp,[Middle|Down]),z(J,N,RUp,Down,RUp1,Down1), r(I,Ans,[],RUp1,[Middle|Down1]). r(0,Down,RUp,RUp,Down):-!. r(I,[H|Tail],RUpTail,RUp,Down):-I1 is I-1,r(I1,Tail,[H|RUpTail],RUp,Down). z(_,_,[],[],[],[]). z(J,N,[A|RUp],[B|Down],[A1|RUp1],[B1|Down1]):- J1 is J+1,z(J1,N,RUp,Down,RUp1,Down1), exchange(J,A,B,A1,B1). exchange(0,[HA|TailA],[HB|TailB],[HB|TailA],[HA|TailB]):-!. exchange(J,[HA|TailA],[HB|TailB],[HA|TailA1],[HB|TailB1]):- J1 is J-1,exchange(J1,TailA,TailB,TailA1,TailB1).
Объяснение кода листинга программы
Код решает задачу перестановки элементов на диагоналях матрицы. Он принимает на вход матрицу и возвращает измененную матрицу. Список действий:
- Установка начального значения диагонали
- При вычислении первой половины матрицы, вторая половина не меняется
- При вычислении второй половины матрицы, первая половина не меняется
- Вычисление элементов на диагонали
- Обмен элементов на диагонали
- Возврат измененной матрицы