Массив: Вычислить произведение нечётных элементов массива P(15) и их количество. - Lisp

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

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

Добрый вечер. Нужна помощь с задачкой.

Вычислить произведение нечётных элементов массива P(15) и их количество.

Курс по Lisp'у нам прочитали, но массивов так и не коснулись, а какие-то примеры по ним - так и подавно. В интернете же я похожих задачек не обнаружил.

Решение задачи: «Массив: Вычислить произведение нечётных элементов массива P(15) и их количество.»

textual
Листинг программы
  1. ;; Функция:
  2.  
  3. (defun task (a)
  4.  (let ((p 1) (c 0))
  5.       (dotimes (i (length a) (list c p))
  6.         (if (oddp (aref a i)) (setq c (+ 1 c) p (* p (aref a i)))))))
  7.  
  8. ;; Проверка:
  9.  
  10. CL-USER 1 > (setq *arr* (make-array 15))
  11. #(NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL)
  12.  
  13. CL-USER 5 : 1 > (setq *arr* (dotimes (i 15 *arr*) (setf (aref *arr* i) i)))
  14. #(0 1 2 3 4 5 6 7 8 9 10 11 12 13 14)
  15.  
  16. CL-USER 6 : 1 > (defun task (a)
  17.  (let ((p 1) (c 0))
  18.       (dotimes (i (length a) (list c p))
  19.         (if (oddp (aref a i)) (setq c (+ 1 c) p (* p (aref a i)))))))
  20. TASK
  21.  
  22. CL-USER 7 : 1 > (task *arr*)
  23. (7 135135)

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

В коде определена функция Lisp task, которая принимает один аргумент a. Внутри функции используется два локальных параметра: p и c. Переменная p инициализируется единицей, а c — нулём. С помощью цикла dotimes и вложенного условия if реализован алгоритм, который проходит по всем элементам массива a. Если элемент нечётный, то к переменной c прибавляется единица, а значение переменной p умножается на нечётный элемент массива a с помощью оператора *. В конце функции возвращается значение переменной p и количество нечётных элементов массива c. Пример использования функции:

  1. Создаётся массив *arr* с 15 элементами: CL-USER 1 > (setq arr (make-array 15))

    (NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL)

  2. Заполняется массив нечётными числами: CL-USER 5 : 1 > (setq arr (dotimes (i 15 arr) (setf (aref arr i) i)))

    (0 1 2 3 4 5 6 7 8 9 10 11 12 13 14)

  3. Вызывается функция task с массивом *arr*: CL-USER 6 : 1 > (defun task (a) (let ((p 1) (c 0)) (dotimes (i (length a) (list c p)) (if (oddp (aref a i)) (setq c (+ 1 c) p (* p (aref a i))))))) TASK
  4. Получается результат выполнения функции: CL-USER 7 : 1 > (task arr) (7 135135)

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


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

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы