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

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

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

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

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

textual
Листинг программы
  1. (defun task (a b c)
  2.   (let ((d (- (* b b) (* 4 a c))))
  3.     (cond ((minusp d) nil)
  4.           ((<= d 1E-14) (list (/ (- b) (+ a a))))
  5.           (t (list (/ (+ (- b) (sqr d)) (+ a a))
  6.                    (/ (- (- b) (sqr d)) (+ a a)))))))
  7.  
  8. ==> task
  9.  
  10. (task 1 2 10)
  11.  
  12. ==> NIL
  13.  
  14. (task 1 2 1)
  15.  
  16. ==> (-1)
  17.  
  18. (task 1 -2 1)
  19.  
  20. ==> (1)
  21.  
  22. (task 1 5 3)
  23.  
  24. ==> (-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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы