Рекурсивные алгоритмы функций - Lisp

Узнай цену своей работы

Формулировка задачи:

Алоха. Нужна помощь: Пусть дана вещественная квадратная матрица порядка 2n. Получите новую матрицу, переставляя ее блоки размером n так, как показано на рисунке. Для обмена четырех заданных фрагментов матрицы напишите функцию. Заранее спасибо.

Решение задачи: «Рекурсивные алгоритмы функций»

textual
Листинг программы
(defun transform (matr)
 (let* ((2n (length matr))
        (n (/ 2n 2))  
        (m11 nil)
        (m12 nil)
        (m21 nil)
        (m22 nil))
       (dolist (row matr t)
          (if (< (length m11) n) 
              (progn 
                (push (subseq row 0 n) m11)
                (push (subseq row n)   m12))
              (progn 
                (push (subseq row 0 n) m21)
                (push (subseq row n)   m22))))
        (append (mapcar 'append (reverse m22) (reverse m21))
                (mapcar 'append (reverse m12) (reverse m11)))))

Объяснение кода листинга программы

В данном коде реализована функция TRANSFORM, которая принимает на вход матрицу MATR. Цель функции — разделить матрицу на две диагональные части и вернуть их в виде списков.

  1. Вычисляется размерность матрицы N и разбивается на две равные части K — размерность первой диагональной части.
  2. Создаются пустые списки M11, M12, M21, M22 для хранения соответствующих частей матрицы.
  3. Происходит итерация по строкам матрицы MATR.
  4. Если длина списка M11 меньше K, то добавляем первые K элементов текущей строки в M11.
  5. Если длина списка M11 равна K, то добавляем оставшиеся элементы текущей строки в M12.
  6. Если длина списка M21 меньше K, то добавляем первые K элементов текущей строки в M21.
  7. Если длина списка M21 равна K, то добавляем оставшиеся элементы текущей строки в M22.
  8. Если длина списков M11 и M12 равна K, то объединяем их в один список с помощью функции APPEND.
  9. Если длина списков M21 и M22 равна K, то объединяем их в один список с помощью функции APPEND.
  10. Возвращаем результат в виде двух списков: первый — это объединение M22 и M21, второй — это объединение M12 и M11.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4 из 5