Последняя задачка.Написать функцию, рекурсивно рисующую фигуру вида - Lisp

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

Решение задачи: «Последняя задачка.Написать функцию, рекурсивно рисующую фигуру вида»

textual
Листинг программы
(defun rec-sqr (w n cx cy)
  (if (zerop n) t 
       (let ((x1 (* 0.5 (+ (nth 0 cx) (nth 1 cx))))
             (x2 (* 0.5 (+ (nth 1 cx) (nth 2 cx))))
             (x3 (* 0.5 (+ (nth 2 cx) (nth 3 cx))))
             (x4 (* 0.5 (+ (nth 3 cx) (nth 0 cx))))
             (y1 (* 0.5 (+ (nth 0 cy) (nth 1 cy))))
             (y2 (* 0.5 (+ (nth 1 cy) (nth 2 cy))))
             (y3 (* 0.5 (+ (nth 2 cy) (nth 3 cy))))
             (y4 (* 0.5 (+ (nth 3 cy) (nth 0 cy)))))
          (grwLine w x1 y1 x2 y2 _RED)
          (grwLine w x2 y2 x3 y3 _RED)
          (grwLine w x3 y3 x4 y4 _RED)
          (grwLine w x4 y4 x1 y1 _RED)
          (rec-sqr w (- n 1) (list x1 x2 x3 x4) (list y1 y2 y3 y4)))))   
 
(defun start nil
  (let ((w (gensym 'w)))
    (grwCreate w 300 300 "Квадраты" _WHITE)
    (grwScale w -100 100 -100 100)
    (grwShow w)
    (rec-sqr w 5 '(-80 80 80 -80) '(80 80 -80 -80))))

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

Код, представленный пользователем, написан на языке программирования Lisp. Он содержит две функции: rec-sqr и start.

  1. Функция rec-sqr принимает четыре аргумента: w, n, cx и cy.
    • Аргумент w представляет собой графический контекст, который будет использоваться для рисования.
    • Аргумент n является счетчиком, который уменьшается на единицу на каждой итерации рекурсии.
    • Аргументы cx и cy являются списками координат вершин квадрата. Если значение n равно нулю, то выполняется рекурсивный вызов функции с уменьшенным на единицу значением n и новыми списками координат вершин квадрата. В противном случае, внутри функции создаются новые переменные x1, x2, x3 и x4, которые представляют собой координаты вершин квадрата, вычисленные на основе аргументов cx. Аналогично создаются переменные y1, y2, y3 и y4 на основе аргументов cy. Затем вызывается функция grwLine, которая рисует линии между вершинами квадрата, используя графический контекст w и цвет _RED.
  2. Функция start является точкой входа в программу.
    • Сначала создается графический контекст w с размерами 300x300 пикселей.
    • Затем контекст w масштабируется до размеров -100x100 пикселей.
    • Контекст w отображается на экране.
    • Вызывается функция rec-sqr с аргументами w, 5, (-80 80 80 -80) и '(80 80 -80 -80). Это создает квадрат размером 5, с координатами вершин, указанными в аргументах cx и cy функции rec-sqr. Вот список номеров элементов кода, выделенных в тексте:
  3. (defun rec-sqr (w n cx cy)
  4. (defun start nil
  5. (let ((w (gensym 'w)))
  6. (grwCreate w 300 300 Квадраты _WHITE)
  7. (grwScale w -100 100 -100 100)
  8. (grwShow w)
  9. (rec-sqr w 5 '(-80 80 80 -80) '(80 80 -80 -80)))))

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


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

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

12   голосов , оценка 4.667 из 5
Похожие ответы