[Précédent]
[Index] | [Corrigé] | [Version imprimable]
[Prochain]

3.1
  Résolution de polynômes de degré 2 - Enoncé
Niveau 0
 
 
But:
  Nous voulons écrire un programme permettant de trouver les zéros de polynômes de degré 2.    
Thème:
  -    
Fichiers:
  -    

Nous voulons écrire un programme permettant de trouver les zéros de polynômes de degré 2 de la forme ax2+bx+c, où les coefficients sont des nombres réels et a est non nul (sans quoi ce ne serait plus un polynôme de degré 2...).

  1. Commencez par ouvrir le fichier (vide) Degre2.java dans votre éditeur favori ou dans Eclipse.
  2. Préparez la "coquille vide" de base accueillant votre programme :

    class Degre2 {
    
        public static void main(String[] args) {
        }
    }

    Nous verrons plus tard dans le cours à quoi correspondent exactement toutes ces lignes, mais pour l'instant considérez cela comme la base minimale pour que votre programme fonctionne.

    On peut maintenant commencer à attaquer notre problème.

  3. Commençons donc par prévoir la place pour les trois coefficients de notre polynôme : a, b et c. Il faut pour cela déclarer des variables.

    Comme nous souhaitons que ces coefficients soient des nombres réels, nous déclarons des variables de type double  :

    class Degre2 {
    
        public static void main(String[] args) {
            double a;
            double b;
            double c;
        }
    }

    Note : on aurait aussi pu écrire en une ligne

    double a,b,c;

  4. Maintenant, le réflexe du bon programmeur : il faut penser à initialiser ces variables. Il nous semble ici naturel de les initialiser à zéro :

    class Degre2 {
    
        public static void main(String[] args) {
            double a = 0.0;
            double b = 0.0;
            double c = 0.0;
        }
    }

  5. Il faut ensuite récupérer les valeurs des paramètres entrés par l'utilisateur. Étant donné que a ne doit pas être nul, nous allons utiliser une boucle dans laquelle nous vérifierons cette condition. Nous pouvons ensuite acquérir les paramètres b et c.

    import java.util.Scanner;
    
    class Degre2 {
    
        private static Scanner scanner = new Scanner(System.in);
    
        public static void main(String[] args) {
            double a = 0.0;
            double b = 0.0;
            double c = 0.0;
    
            // tant que a est nul, demander une valeur a l'utilisateur
            while (a == 0.0) {
                System.out.print("Entrez une valeur non nulle pour a :");
                a = scanner.nextDouble();
            }
    
            System.out.print("Entrez une valeur pour b:");
            b = scanner.nextDouble();
            System.out.print("Entrez une valeur pour c:");
            c = scanner.nextDouble();
        }
    }

  6. Maintenant que nous connaissons tous les paramètres de l'équation, nous pouvons la résoudre. Il nous faut tout d'abord calculer le discriminant delta = b*b - 4*a*c.

    Il faut donc prévoir de la place pour le stocker : une nouvelle variable de type double.

    On peut ici choisir de la déclarer sans initialisation puis de lui affecter la bonne valeur à l'aide d'une autre instruction ou plus simplement de l'initialiser directement avec b*b - 4*a*c puisque toutes ces valeurs sont connues à ce stade là. C'est cette seconde solution qui est choisie ici :

    import java.util.Scanner;
    
    class Degre2 {
    
        private static Scanner scanner = new Scanner(System.in);
    
        public static void main(String[] args) {
            double a = 0.0;
            double b = 0.0;
            double c = 0.0;
    
            // tant que a est nul, demander une valeur a l'utilisateur
            while (a == 0.0) {
                System.out.print("Entrez une valeur non nulle pour a :");
                a = scanner.nextDouble();
            }
            
            System.out.print("Entrez une valeur pour b:");
            b = scanner.nextDouble();
            System.out.print("Entrez une valeur pour c:");
            c = scanner.nextDouble();
            double delta = b * b - 4.0 * a * c;
        }
    }

  7. Pour le calcul de la solution, différents cas peuvent se produire en fonction de la valeur prise par le discriminant, que nous distinguons dans le programme à l'aide de blocs if-else :

    La méthode Java permettant de calculer des racines carrées s'appelle sqrt(), qui vient de l'anglais "square root".
    Il est possible d'utiliser cette méthode (ainsi que d'autres fonctions mathématiques) en précisant la classe (Math) à laquelle elle appartient. Ceci se fait au moyen de la notation Math.sqrt() que nous comprendrons lorsque nous aurons abordé la programmation orientée-objet.

    Le programme complet devient donc :

    import java.util.Scanner;
    
    class Degre2 {
    
        private static Scanner scanner = new Scanner(System.in);
    
        public static void main(String[] args) {
            double a = 0.0;
            double b = 0.0;
            double c = 0.0;
    
            // tant que a est nul, demander une valeur a l'utilisateur
            while (a == 0.0) {
                System.out.print("Entrez une valeur non nulle pour a:");
                a = scanner.nextDouble();
            }
            
            System.out.print("Entrez une valeur pour b:");
            b = scanner.nextDouble();
            System.out.print("Entrez une valeur pour c:");
            c = scanner.nextDouble();
            double delta = b * b - 4.0 * a * c;
            if (delta < 0.0) {
                System.out.println("Pas de solutions reelles");
            } else if (delta > 0.0) {
                System.out.println("Deux solutions : "
                            + (-b - Math.sqrt(delta)) / (2.0 * a)
                            + " et " + (-b + Math.sqrt(delta)) / (2.0 * a));
                
            } else {
                System.out.println("Une solution unique : " + -b / (2.0 * a));
                
            }
        }
    }

 


[Précédent]
[Index] | [Corrigé] | [Version imprimable]
[Prochain]