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

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

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

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

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

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

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

textual
Листинг программы
;; Функция:
 
(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)))))))
 
;; Проверка:
 
CL-USER 1 > (setq *arr* (make-array 15))
#(NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL)
 
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)
 
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
 
CL-USER 7 : 1 > (task *arr*)
(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
Похожие ответы