Необходимо разработать функцию, вычисляющую среднее арифметическое массива (без применения рекурсии) - Lisp

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

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

Не получается написать программку."Символ используется для хранения индексированных данных (аналогично массиву). Свойство Length содержит размерность "массива", а в свойствах с именами "0","1",..., "Lеngth-1 хранятся числовые значения. Необходимо разработать функцию, вычисляющую среднее арифметическое массива.

Решение задачи: «Необходимо разработать функцию, вычисляющую среднее арифметическое массива (без применения рекурсии)»

textual
Листинг программы
(setq *s* nil)
 
==> NIL
;; Создана глобальная переменная *s*
 
(spropl '*s* '(0 2 1 5 2 5 3 7 4 -4 5 10))
 
==> (0 2 1 5 2 5 3 7 4 -4 5 10)
 
(defun avg-list (s)
  (let ((sum 0) 
        (a nil)
        (p 0))
    (loop
      (setq a (getprop s p))
      (when (null a) (return t))
      (setq sum (+ sum a) p (+ p 1)))
    (if (zerop p) nil (/ sum p)))) 
 
==> avg-list
 
(avg-list '*s*)
 
==> 13/6

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

  1. Создана глобальная переменная s.
  2. Переменная s инициализируется списком (0 2 1 5 2 5 3 7 4 -4 5 10).
  3. Функция avg-list определена с помощью defun.
  4. Функция avg-list принимает один аргумент s.
  5. Внутри функции созданы три переменные: sum, a, p.
  6. Переменная sum инициализируется нулем.
  7. Переменная a инициализируется значением nil.
  8. Переменная p инициализируется нулем.
  9. Запускается цикл loop.
  10. В каждой итерации цикла значение переменной a устанавливается равным значению свойства s с индексом p.
  11. Если значение a равно nil, то цикл прерывается и функция возвращает t.
  12. К переменной sum прибавляется значение a.
  13. Значение переменной p увеличивается на единицу.
  14. Если значение переменной p равно нулю, то функция возвращает nil.
  15. Если значение переменной p не равно нулю, то функция возвращает результат деления суммы на значение переменной p.
  16. Вызвана функция avg-list с аргументом 's'.
  17. Возвращенное значение функции равно 13/6.
  18. Выведено значение 13/6.

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


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

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

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