Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > LISP > Деление чисел без функции деления


Автор: Mars30 6.5.2014, 18:37
Нужно написать функцию (divis x y), которая возвращает частное и остаток от деления x на y. Не использовать функцию деления. Нашла, что для вычисления остатка можно использовать умножения на магическое число, но я не нашла, что это значит. А насчет частного я нашла статейку по assembler, правда я его не знаю. Вот ссылка на статью http://www.manhunter.ru/assembler/665_zamena_deleniya_umnozheniem_na_assemblere.html

Автор: VH_ 9.5.2014, 09:54
Код

(defun F (X Y)
 (cond
  ((zerop Y) nil)
  ((zerop X) (list 0 0))
  ((< X Y) (list 0 X))
  (T (mapcar '+ (list 1 0) (F (- X Y) Y)))))

Автор: k0rvin 10.5.2014, 08:19
Код

(defun div (x y &optional (num 0))
  (cond ((= y 0) (values nil nil))
        ((< x y) (values num x))
        (t       (div (- x y) y (1+ num)))))


Добавлено через 6 минут и 24 секунды
Код

(defun div (x y)
  (unless (zerop y)
    (do ((num 0 (1+ num))
         (rem x (- rem y)))
        ((< rem y) (values num rem)))))

Автор: _sg 10.5.2014, 19:16
Код

(defun quotient-remainder (a b &optional (n 0))
  (if (zerop b)
      'division-by-zero
      (if (< a b)
          (values n a)
          (quotient-remainder (- a b) b (1+ n)))))

> (quotient-remainder 10 3)
3
1

Код

(defun quotient-remainder (a b &optional (n 0))
  (cond ((zerop b) 'division-by-zero)
        ((< a b) (list n a))
        ((quotient-remainder (- a b) b (1+ n)))))

> (quotient-remainder 10 3)
(3 1)

Автор: Mars30 11.5.2014, 19:00
Всем спасибо за решения smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)