2017-10-15 27 views
1

j'apprends Lisp et je ne peux pas comprendre ce problèmeéquation du second degré Lisp parties imaginaires et réelles

Modifier la fonction qui renvoie les racines d'une équation du second degré afin qu'il renvoie les parties réelles et imaginaires des racines, dans le cas de , ils sont complexes. Supposons que les coefficients sont réels.

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

Je voudrais revenir les parties réelles et imaginaires sous la forme x + yi

Répondre

4

Vous devez imprimer votre complex numbers dans le format que vous souhaitez. E.g .:

(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

Un grand merci pour l'aide et le pourboire. Je vais écrire d'une manière plus propre à partir de maintenant. –