2017-10-15 57 views
1

我学习口齿不清,我不明白这个问题口齿不清二次方程虚和实部

修改,使其返回根的实部和虚部返回一元二次方程的根的功能,在 的情况下,它们很复杂。假设系数是真实的。

;;;gnu clisp 2.49 

(defun root(a b c) 
    (let ((root1 (/ (+ (* -1 b) (sqrt (- (expt b 2) (* 4 a c)))) (* 2 a))) 
     (root2 (/ (- (* -1 b) (sqrt (- (expt b 2) (* 4 a c)))) (* 2 a)))) 
    (format t "x1=~,2f" root1) 
    (format t ", x2=~,2f~%" root2))) 

(root 1 -3 -4) 
(root 1 0 -4) 
(root 6 11 -35) 
(root 1 -7 0) 
(root 5 3 5) 

我想在形式x + yi

回答

4

您需要打印complex numbers在你喜欢的格式返回实部和虚部。 例如:

(defun number2string (num) 
    (if (complexp num) 
     (format nil "~,2f + ~,2fi" (realpart num) (imagpart num)) 
     (format nil "~,2f" num))) 

(defun quadratic-roots (a b c) 
    (let* ((root1 (/ (+ b (sqrt (- (* b b) (* 4 a c)))) (* -2 a))) 
     (root2 (- (- b) root1))) 
    (format t "x1=~a, x2=~a" (number2string root1) (number2string root2)) 
    (values root1 root2))) 
+0

非常感谢您的帮助和提示。从现在开始我会以更清晰的方式写下来。 –