Список корней квадратного уравнения - Lisp

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

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

Определите функцию (f a b c), которая вычисляет список корней квадрат- ного уравнения a*x^2+b*x+c=0 (если корней нет, то список пустой).

Решение задачи: «Список корней квадратного уравнения»

textual
Листинг программы
(defun task (a b c)
  (let ((d (- (* b b) (* 4 a c))))
    (cond ((minusp d) nil)
          ((<= d 1E-14) (list (/ (- b) (+ a a))))
          (t (list (/ (+ (- b) (sqr d)) (+ a a))
                   (/ (- (- b) (sqr d)) (+ a a)))))))
 
==> task
 
(task 1 2 10)
 
==> NIL
 
(task 1 2 1)
 
==> (-1)
 
(task 1 -2 1)
 
==> (1)
 
(task 1 5 3)
 
==> (-0.697224362268005 -4.30277563773199)

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

В коде определена функция task, которая принимает три аргумента типа floata, b и c. Функция вычисляет дискриминант d и по его значению принимает решение о том, какие корни будут у квадратного уравнения. Если d отрицательно, то решение не найдено и функция возвращает nil. Если d меньше или равно 1E-14, то уравнение имеет один корень, который вычисляется как (-b + sqrt(d)) / (2 a). В этом случае функция возвращает список с одним элементом, содержащим найденное значение корня. Если d больше 1E-14, то уравнение имеет два корня. Один из них вычисляется как (-b — sqrt(d)) / (2 a), а второй — как (-b + sqrt(d)) / (2 a). В этом случае функция возвращает список с двумя элементами, содержащими найденные значения корней.

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


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

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

8   голосов , оценка 4.5 из 5
Похожие ответы