Для заданной матрицы В размера 5*5 найти такие k, для которых k-я строка матрицы совпадает с k-м столбцом - Lisp
Формулировка задачи:
Решение задачи: «Для заданной матрицы В размера 5*5 найти такие k, для которых k-я строка матрицы совпадает с k-м столбцом»
(defun task (matr) (let ((matrt (apply 'mapcar (cons 'list matr))) (res nil) (n (length matr))) (dotimes (i n res) (dotimes (j n nil) (when (equal (nth i matr) (nth j matrt)) (push (list i j) res)))))) ==> task (task '((1 2 3 4) (2 6 5 8) (3 10 11 12) (4 14 15 16))) ==> ((0 0)) (task '((0 0 0 0) (2 6 0 8) (3 10 0 12) (4 14 0 16))) ==> ((0 2))
Объяснение кода листинга программы
В коде определена функция task, которая принимает в качестве аргумента матрицу matr. Внутри функции создаются следующие переменные: — matrt — результат применения функции mapcar к матрице matr, в которой каждый элемент матрицы преобразуется в список из одного элемента; — res — результат итерации по матрице matrt; — n — количество строк матрицы matr. Далее выполняется два вложенных цикла: — внешний цикл dotimes с переменной i от 0 до n, который выполняет следующие действия: — внутренний цикл dotimes с переменной j от 0 до n, который ищет совпадения элементов строк и столбцов матрицы matr и matrt соответственно; — если найдено совпадение, то в переменную res добавляется список с номерами i и j. В конце выполнения функции task возвращается список res. Пример выполнения функции task для матрицы '((1 2 3 4) (2 6 5 8) (3 10 11 12) (4 14 15 16)) покажет, что совпадения найдены для строк 0 и 2, то есть будет возвращён список ((0 2)). Пример выполнения функции task для матрицы '((0 0 0 0) (2 6 0 8) (3 10 0 12) (4 14 0 16)) покажет, что совпадения найдены для строки 0, то есть будет возвращён список ((0 0)).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д