Массив: Вычислить произведение нечётных элементов массива 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
.
Пример использования функции:
- Создаётся массив
*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)
- Заполняется массив нечётными числами:
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)
- Вызывается функция
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 - Получается результат выполнения функции: CL-USER 7 : 1 > (task arr) (7 135135)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д