Создать функцию, использую if и cond - Lisp

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

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

Написать функцию решения квадратного уравнения используя условные операторы if и cond.
(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)))
    )
   )
)
ОШИБКА: EVAL: слишком много параметров для специального оператора IF

Решение задачи: «Создать функцию, использую if и cond»

textual
Листинг программы
(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.

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


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

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

14   голосов , оценка 4.286 из 5