;;; Fichier equation.drs / 4 fevrier 2000 ;;; Resolution d'une equation du second degre, representee par la liste ;;; de ses coefficients: (define (resolution a b c) (let ((d (discriminant a b c))) (cond ((= a 0) (- (/ c b))) ;...premier degre ((< d 0) 'pas-de-solution) ((= d 0) (/ (- b) (* 2 a))) ;...une racine double (else (list (/ (- (- b) (sqrt d)) (* 2 a)) ;...deux racines (/ (+ (- b) (sqrt d)) (* 2 a))))))) (define (discriminant a b c) (- (* b b) (* 4 a c))) ;;; Ecriture de l'equation: (define (affiche-solutions a b c) (display "RESOLUTION DE L'EQUATION:") (newline) (ecrire-equation a b c) (newline) (ecrire-solution (resolution a b c)) (newline) 'fin) (define (ecrire-equation a b c) (ecrire-terme a 2 #t) (ecrire-terme b 1 (= a 0)) (ecrire-terme c 0 (and (= a 0) (= b 0))) (display " = 0")) (define (ecrire-terme coef puis BOOL) ;...BOOL=#t --> 1er terme non nul (cond ((= coef 0) (display "")) (BOOL (ecrire-coefficient coef puis) (ecrire-puissance puis)) (else (ecrire-operation coef) (ecrire-coefficient (abs coef) puis) (ecrire-puissance puis)))) (define (ecrire-operation coef) (if (< coef 0) (display " - ") (display " + "))) (define (ecrire-coefficient coef puis) (cond ((= puis 0) (display coef)) ((= coef -1) (display "-")) ((= coef 1) (display "")) (else (display coef)))) (define (ecrire-puissance puis) (cond ((= puis 0) (display "")) ((= puis 1) (display "X")) (else (display "X") (display puis)))) (define (ecrire-solution solution) (cond ((null? solution) (ecrire-pas-de-solution)) ((number? solution) (display "La solution est: ") (newline) (display solution)) (else (display "Les solutions sont: ") (newline) (display (car solution)) (newline) (display (cadr solution))))) (define (ecrire-pas-de-solution) (display "Pas de solution")) ;;; Fonction qui fabrique l'equation a partir de ses racines: (define (fabrique-equation rac1 rac2) (list 1 (- (+ rac1 rac2)) (* rac1 rac2)))