Задача : Поиск делителя - Lisp

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

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

Привет. Прошу помощи. Надо изменить эту функцию , чтобы найти n-ую цифру числа в конце и выдать цифру, деленную на кол-во цифр

Решение задачи: «Задача : Поиск делителя»

textual
Листинг программы
(defun task (num n &optional (c 0) (p 0))
  (cond ((zerop num) (/ p c))
        ((= 1 n) (task (\ num 10) (- n 1) (+ c 1) (rem num 10)))
        (t (task (\ num 10) (- n 1) (+ c 1) p))))
 
==> task
 
(task 45632 2)
 
==> 3/5
 
(task 45632 1)
 
==> 2/5
 
(task 45632 4)
 
==> 1

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

В коде определена функция task, которая принимает три аргумента: num (числитель), n (знаменатель) и два необязательных аргумента c (счетчик циклов) и p (результат деления). Если числитель равен нулю, то функция возвращает результат деления, который сохраняется в переменной p. Если знаменатель равен единице, то функция вызывает саму себя, уменьшая знаменатель на единицу и увеличивая счетчик циклов на единицу. Если выполняется третье условие, то функция вызывает саму себя, передавая в качестве аргументов числитель, уменьшенный на десять, знаменатель, уменьшенный на единицу, увеличенный на единицу счетчик циклов и переменную p. Поскольку язык программирования Lisp не имеет скобок для обозначения блоков кода, следующие два условия записываются в виде последовательности выражений без скобок. Если числитель равен нулю, то функция возвращает результат деления, который сохраняется в переменной p. Если знаменатель равен единице, то функция вызывает саму себя, уменьшая знаменатель на единицу и увеличивая счетчик циклов на единицу. Если выполняется третье условие, то функция вызывает саму себя, передавая в качестве аргументов числитель, уменьшенный на десять, знаменатель, уменьшенный на единицу, увеличенный на единицу счетчик циклов и переменную p.

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


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

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

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