Список корней квадратного уравнения - Lisp
Формулировка задачи:
Решение задачи: «Список корней квадратного уравнения»
- (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
, которая принимает три аргумента типа float
— a
, 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)
. В этом случае функция возвращает список с двумя элементами, содержащими найденные значения корней.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д