2017-10-15 67 views
1

は、私は、Lispを学んだし、私はこの問題lispの二次方程式虚と実部

それは根の実部と虚部を返すように、二次方程式の根を返す関数を変更を理解することはできません の場合、それらは複雑です。係数が実数であると仮定します。

;;;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) 

私はあなたが好きな形式でcomplex numbersを印刷する必要があるフォームx + yi

答えて

4

における実部と虚部を返すようにしたいと思います。 例:

(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

多くのヘルプとヒントありがとうございます。私は今よりきれいな方法で書きます。 –

関連する問題