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