Создать функцию, использую if и cond - Lisp
Формулировка задачи:
(defun sq (a b c)
(if (= a 0) (print "Not a quadratic equation") (setq d (- (* b b) (* 4 a c)))
(cond
((< d 0) (print "No real roots"))
((= d 0) ( progn
(setq x1 (/ (-x) (* 2 a)))
( print x1)))
((> d 0) (progn
(setq x1 (/ (- (-b) (sqrt d)) (* 2 a)))
(setq x2 (/ (+ (-b) (sqrt d)) (* 2 a)))
( print x1)
( print x2)))
)
)
)Решение задачи: «Создать функцию, использую if и cond»
(defun sq (a b c) (if (zerop a) "Not a quadratic equation" (let ((d (- (* b b) (* 4 a c)))) (cond ((< d 0) "No real roots") ((zerop d) (/ (-x) (* 2. a))) (t `(,(/ (- (-b) (sqrt d)) (* 2. a)) ,(/ (+ (-b) (sqrt d)) (* 2. a))))))))
Объяснение кода листинга программы
(1) В первой строке определяется функция с именем sq, которая принимает три аргумента a, b и c.
(2) Следующая строка кода проверяет, равно ли значение переменной a нулю. Если это так, то выводится сообщение Not a quadratic equation.
(3) Если значение a не равно нулю, то выполняется следующий блок кода. В нем определяется переменная d как результат умножения b на b, умноженный на 4, и результат умножения a на c.
(4) Следующий блок кода проверяет значение переменной d. Если оно меньше нуля, то выводится сообщение No real roots.
(5) Если значение d равно нулю, то выводится сообщение /x, где x — это значение переменной a, умноженное на 2.
(6) Если значение d не равно нулю, то выводятся два значения, которые являются корнями квадратного уравнения. Они вычисляются как результат деления (-b) на sqrt(d) и результат деления (+b) на sqrt(d)), умноженные на 2a.