Pb avec java calcul de l'equation du 2em degr
Résolu/Fermé
Profil bloqué
-
19 avril 2011 à 21:26
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 - 26 nov. 2012 à 19:37
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 - 26 nov. 2012 à 19:37
A voir également:
- Pb avec java calcul de l'equation du 2em degr
- Waptrick java football - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
- Calcul moyenne excel - Guide
- Jeux java itel football - Télécharger - Jeux vidéo
- Waptrick java ✓ - Forum Mobile
2 réponses
KX
Messages postés
16733
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 janvier 2024
3 015
20 avril 2011 à 13:56
20 avril 2011 à 13:56
Si tu fais la racine carrée d'un nombre négatif le résultat vaut NaN (Not a Number).
Il faut distinguer différents cas selon le signe de delta.
Remarque : ton code marche quand même lorsque delta est positif (ex: a=1, b=0, c=-1)
Il faut distinguer différents cas selon le signe de delta.
Double delta = b*b - 4*a*c; switch (delta.compareTo(0.0)) { case 0 : // delta=0, x est l'unique solution réelle case 1 : // delta>0, x1 et x2 sont deux solutions réelles distinctes case -1 : // delta<0, z1 et z2 sont deux solutions complexes conjuguées }
Remarque : ton code marche quand même lorsque delta est positif (ex: a=1, b=0, c=-1)
cloridee
Messages postés
47
Date d'inscription
lundi 16 janvier 2012
Statut
Membre
Dernière intervention
9 juin 2023
8
26 nov. 2012 à 19:13
26 nov. 2012 à 19:13
Bon voilà, pour tous ceux qui cherche encore le code d'un programme en java qui donne les solutions d'une équation de second degrés, je viens vous la donné
Elle est parfaite : respect des normes de codage, respect des 80 caractères max par clones, bien commenté, ...
En tant qu'étudiant en première année de DUT informatique vous pouvez me faire confiance.
Ce programme à une gestion des erreurs de saisie clavier, il calcule aussi les équations de degré 1 si vous rentrez une valeur nulle pour la valeur où se trouve le " x² "
Bref, voilà le code, à vous de modifier le " package " pour le bon fonctionnement du programme :
/*
* Delta.java
* Programme pour calculer les racines d'une équation de second degré
*/
package Programmes;
import java.util.Scanner;
/**
* Ce programme demande à l'utilisateur de rentrer les valeurs d'une équation
* de second degré, le programme calculera ensuite le delta, puis les racines
* ( si possible ) de cette équation. Si le delta est négatif, aucun résultat
* à l'équation ne sera donné
* @author ??????
* @version 1.0
*/
public class Delta {
/**
* Programme principal
* @param args non utilisé
*/
public static void main ( String[] args ) {
// Déclaration du Scanner pour la saisie de données
Scanner sc = new Scanner(System.in);
// Declaration des variables
double a, // la valeur du nombre suivit de x² de l'équation
b, // la valeur du nombre suivit de x de l'équation
c, // la valeur du dernier nombre de l'équation
delta, // la valeur du delta qui sera calculé
racineUn, // la 1ere racine qui sera trouvé, si delta bon
racineDeux; // la 2eme racine qui sera trouvé, si delta bon
// Demande à l'utilisateur du premier chiffre de l'équation + vérif
System.out.print("L'equation de second degres est de type : "
+ " ax^2 + bx + c \nDonnez a : ");
while (!sc.hasNextDouble()) {
System.err.print("\" " + sc.nextLine() + " \" n'est pas correct, "
+ "\nVeuillez rentrer une valeur decimale ( ex :"
+ " 4 / 8 / 8.5 / 14.45 ). \nRedonez a : ");
}
a = sc.nextDouble();
sc.nextLine();
while ( Double.isInfinite(a) ) {
System.err.print("\"a\" est incorect, chiffre trop grand. "
+ "Redonnez a : ");
while (!sc.hasNextDouble()) {
System.err.print("\" " + sc.nextLine() + " \" n'est pas "
+ "correct.\nVeuillez rentrer une valeur "
+ "decimale ( ex : 4 / 8 / 8.5 / 14.45 )."
+ "\nRedonez a : ");
}
a = sc.nextDouble();
sc.nextLine();
}
// Demande à l'utilisateur du deuxieme chiffre de l'équation + vérif
System.out.print("Donnez b : ");
while (!sc.hasNextDouble()) {
System.err.print("\" " + sc.nextLine() + " \" n'est pas correct, "
+ "\nVeuillez rentrer une valeur decimale ( ex :"
+ " 4 / 8 / 8.5 / 14.45 ). \nRedonez b : ");
}
b = sc.nextDouble();
sc.nextLine();
while ( Double.isInfinite(b) ) {
System.err.print("\"b\" est incorect, chiffre trop grand. "
+ "Redonnez b : ");
while (!sc.hasNextDouble()) {
System.err.print("\" " + sc.nextLine() + " \" n'est pas "
+ "correct.\nVeuillez rentrer une valeur"
+ " decimale ( ex : 4 / 8 / 8.5 / 14.45 )."
+ "\nRedonez b : ");
}
b = sc.nextDouble();
sc.nextLine();
}
// Demande à l'utilisateur du troisième chiffre de l'équation
System.out.print("Donnez c : ");
while (!sc.hasNextDouble()) {
System.err.print("\" " + sc.nextLine() + " \" n'est pas correct, "
+ "\nVeuillez rentrer une valeur decimale ( ex :"
+ " 4 / 8 / 8.5 / 14.45 ). \nRedonez c : ");
}
c = sc.nextDouble();
sc.nextLine();
while ( Double.isInfinite(c) ) {
System.err.print("\"c\" est incorect, chiffre trop grand. "
+ "Redonnez c : ");
while (!sc.hasNextDouble()) {
System.err.print("\" " + sc.nextLine() + " \" n'est pas "
+ "correct.\nVeuillez rentrer une valeur "
+ "decimale ( ex : 4 / 8 / 8.5 / 14.45 )."
+ "\nRedonez c : ");
}
c = sc.nextDouble();
sc.nextLine();
}
// Calcul de delta :
delta = ( b * b ) - 4 * a * c;
/* Vérification que DELTA ne soit un chiffre infini si l'utilisateur
* rentre des valeurs trop grandes pour a, b ou c
*/
if ( Double.isInfinite(delta) ) {
System.err.println("La valeur de Delta est trop grande, le "
+ "resultat ne peut etre genere et donne.");
} else {
/* Les differents cas de la valeur de delta :
* Premierement vérification que "a" ne soit pas égal à 0 pour ne
* pas que le programme donne une valleur "NaN" / " Infinity
* Cas 1 : delta est un chiffre négatif donc racines non réelles,
* impossible.
* Cas 2 : delta est égal à 0 : solution = 0
* Cas 3 : delta est un chiffre positif donc racines réelles et
* calcul des racines
*/
if ( a == 0 ) {
// Cas de degres un
racineUn = - c / b;
// Vérification de la saisie
if ( b == 0 && c == 0 ) {
System.err.println("Erreur : \"a\", \"b\" et \"c\" ne doivent "
+ "pas etre egal a 0.");
} else if ( Double.isNaN(racineUn) ) {
// Le cas ou b = 0 et c = 0
System.err.println("Les valeurs donnees sont incorrectes."
+ " \"b\" et \"c\" ne doivent pas etre"
+ " egal a 0");
} else if ( b == 0 ) {
System.err.println("L'equation est absurde et n'a donc "
+ "pas de solutions.");
} else if ( c == 0 ) {
System.out.println("Racine = " + 0);
} else {
System.out.println("Une seule Racine = " + racineUn);
}
} else if ( delta < 0 ) {
// Cas 1
System.out.println("La valeur de delta est negative (" + delta
+ ") les solutions de l'equation sont donc"
+ " impossibles.");
} else if ( delta == 0 ) {
// Cas 2
System.out.println("La valeur de delta est egale a " + delta
+ " donc la solution de l'equation est egale"
+ " a 0");
} else {
// Cas 3
System.out.println("La valeur de delta est positive (" + delta
+ ") , deux racines reelles sont donc "
+ "distinctes : ");
// Calcul des racines
racineUn = ( - b + Math.sqrt(delta)) / ( 2 * a );
racineDeux = ( - b - Math.sqrt(delta)) / ( 2 * a );
// On affiche le résultat :
System.out.println("\nValeur 1 : " + racineUn + "\nValeur 2 "
+ ": " + racineDeux);
}
}
System.out.print("Fin du programme.");
}
}
Par contre, le copié / collé à décalé un peu tout le code, donc si vous avez la flemme de le remettre en place comme moi, contacté-moi et je peux vous l'envoyer en .java avec un code propre et parfait.
Cordialement.
Elle est parfaite : respect des normes de codage, respect des 80 caractères max par clones, bien commenté, ...
En tant qu'étudiant en première année de DUT informatique vous pouvez me faire confiance.
Ce programme à une gestion des erreurs de saisie clavier, il calcule aussi les équations de degré 1 si vous rentrez une valeur nulle pour la valeur où se trouve le " x² "
Bref, voilà le code, à vous de modifier le " package " pour le bon fonctionnement du programme :
/*
* Delta.java
* Programme pour calculer les racines d'une équation de second degré
*/
package Programmes;
import java.util.Scanner;
/**
* Ce programme demande à l'utilisateur de rentrer les valeurs d'une équation
* de second degré, le programme calculera ensuite le delta, puis les racines
* ( si possible ) de cette équation. Si le delta est négatif, aucun résultat
* à l'équation ne sera donné
* @author ??????
* @version 1.0
*/
public class Delta {
/**
* Programme principal
* @param args non utilisé
*/
public static void main ( String[] args ) {
// Déclaration du Scanner pour la saisie de données
Scanner sc = new Scanner(System.in);
// Declaration des variables
double a, // la valeur du nombre suivit de x² de l'équation
b, // la valeur du nombre suivit de x de l'équation
c, // la valeur du dernier nombre de l'équation
delta, // la valeur du delta qui sera calculé
racineUn, // la 1ere racine qui sera trouvé, si delta bon
racineDeux; // la 2eme racine qui sera trouvé, si delta bon
// Demande à l'utilisateur du premier chiffre de l'équation + vérif
System.out.print("L'equation de second degres est de type : "
+ " ax^2 + bx + c \nDonnez a : ");
while (!sc.hasNextDouble()) {
System.err.print("\" " + sc.nextLine() + " \" n'est pas correct, "
+ "\nVeuillez rentrer une valeur decimale ( ex :"
+ " 4 / 8 / 8.5 / 14.45 ). \nRedonez a : ");
}
a = sc.nextDouble();
sc.nextLine();
while ( Double.isInfinite(a) ) {
System.err.print("\"a\" est incorect, chiffre trop grand. "
+ "Redonnez a : ");
while (!sc.hasNextDouble()) {
System.err.print("\" " + sc.nextLine() + " \" n'est pas "
+ "correct.\nVeuillez rentrer une valeur "
+ "decimale ( ex : 4 / 8 / 8.5 / 14.45 )."
+ "\nRedonez a : ");
}
a = sc.nextDouble();
sc.nextLine();
}
// Demande à l'utilisateur du deuxieme chiffre de l'équation + vérif
System.out.print("Donnez b : ");
while (!sc.hasNextDouble()) {
System.err.print("\" " + sc.nextLine() + " \" n'est pas correct, "
+ "\nVeuillez rentrer une valeur decimale ( ex :"
+ " 4 / 8 / 8.5 / 14.45 ). \nRedonez b : ");
}
b = sc.nextDouble();
sc.nextLine();
while ( Double.isInfinite(b) ) {
System.err.print("\"b\" est incorect, chiffre trop grand. "
+ "Redonnez b : ");
while (!sc.hasNextDouble()) {
System.err.print("\" " + sc.nextLine() + " \" n'est pas "
+ "correct.\nVeuillez rentrer une valeur"
+ " decimale ( ex : 4 / 8 / 8.5 / 14.45 )."
+ "\nRedonez b : ");
}
b = sc.nextDouble();
sc.nextLine();
}
// Demande à l'utilisateur du troisième chiffre de l'équation
System.out.print("Donnez c : ");
while (!sc.hasNextDouble()) {
System.err.print("\" " + sc.nextLine() + " \" n'est pas correct, "
+ "\nVeuillez rentrer une valeur decimale ( ex :"
+ " 4 / 8 / 8.5 / 14.45 ). \nRedonez c : ");
}
c = sc.nextDouble();
sc.nextLine();
while ( Double.isInfinite(c) ) {
System.err.print("\"c\" est incorect, chiffre trop grand. "
+ "Redonnez c : ");
while (!sc.hasNextDouble()) {
System.err.print("\" " + sc.nextLine() + " \" n'est pas "
+ "correct.\nVeuillez rentrer une valeur "
+ "decimale ( ex : 4 / 8 / 8.5 / 14.45 )."
+ "\nRedonez c : ");
}
c = sc.nextDouble();
sc.nextLine();
}
// Calcul de delta :
delta = ( b * b ) - 4 * a * c;
/* Vérification que DELTA ne soit un chiffre infini si l'utilisateur
* rentre des valeurs trop grandes pour a, b ou c
*/
if ( Double.isInfinite(delta) ) {
System.err.println("La valeur de Delta est trop grande, le "
+ "resultat ne peut etre genere et donne.");
} else {
/* Les differents cas de la valeur de delta :
* Premierement vérification que "a" ne soit pas égal à 0 pour ne
* pas que le programme donne une valleur "NaN" / " Infinity
* Cas 1 : delta est un chiffre négatif donc racines non réelles,
* impossible.
* Cas 2 : delta est égal à 0 : solution = 0
* Cas 3 : delta est un chiffre positif donc racines réelles et
* calcul des racines
*/
if ( a == 0 ) {
// Cas de degres un
racineUn = - c / b;
// Vérification de la saisie
if ( b == 0 && c == 0 ) {
System.err.println("Erreur : \"a\", \"b\" et \"c\" ne doivent "
+ "pas etre egal a 0.");
} else if ( Double.isNaN(racineUn) ) {
// Le cas ou b = 0 et c = 0
System.err.println("Les valeurs donnees sont incorrectes."
+ " \"b\" et \"c\" ne doivent pas etre"
+ " egal a 0");
} else if ( b == 0 ) {
System.err.println("L'equation est absurde et n'a donc "
+ "pas de solutions.");
} else if ( c == 0 ) {
System.out.println("Racine = " + 0);
} else {
System.out.println("Une seule Racine = " + racineUn);
}
} else if ( delta < 0 ) {
// Cas 1
System.out.println("La valeur de delta est negative (" + delta
+ ") les solutions de l'equation sont donc"
+ " impossibles.");
} else if ( delta == 0 ) {
// Cas 2
System.out.println("La valeur de delta est egale a " + delta
+ " donc la solution de l'equation est egale"
+ " a 0");
} else {
// Cas 3
System.out.println("La valeur de delta est positive (" + delta
+ ") , deux racines reelles sont donc "
+ "distinctes : ");
// Calcul des racines
racineUn = ( - b + Math.sqrt(delta)) / ( 2 * a );
racineDeux = ( - b - Math.sqrt(delta)) / ( 2 * a );
// On affiche le résultat :
System.out.println("\nValeur 1 : " + racineUn + "\nValeur 2 "
+ ": " + racineDeux);
}
}
System.out.print("Fin du programme.");
}
}
Par contre, le copié / collé à décalé un peu tout le code, donc si vous avez la flemme de le remettre en place comme moi, contacté-moi et je peux vous l'envoyer en .java avec un code propre et parfait.
Cordialement.
KX
Messages postés
16733
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 janvier 2024
3 015
26 nov. 2012 à 19:37
26 nov. 2012 à 19:37
Est-ce que tu acceptes les critiques aussi, ou est-ce que ton code est trop "parfait" ?
Copié/Collé/Exécuté !
C'est bien de préciser des exemples de valeurs autorisées, faudrait-il encore qu'elles soient bonnes !
En fonction de la langue (et en français en particulier), c'est une virgule qu'il faut mettre, donc " 8,5 "
As-tu entendu parler des nombres complexes ? Car les solutions à cette équation existent...
Si Δ<0, alors les solutions sont -b/2a ± i√(-Δ))/2a
Et enfin, le meilleur pour la fin :
Là le résultat est carrément faux, la solution de cette équation c'est x=1.
Je n'ai même pas regardé le code, j'ai juste exécuté ton programme et testé quelques cas...
Alors replonge toi un peu dans ton programme, la "perfection" n'est pas pour aujourd'hui !
Copié/Collé/Exécuté !
Donnez a : 8.5 " 8.5 " n'est pas correct, Veuillez rentrer une valeur decimale ( ex : 4 / 8 / 8.5 / 14.45 ).
C'est bien de préciser des exemples de valeurs autorisées, faudrait-il encore qu'elles soient bonnes !
En fonction de la langue (et en français en particulier), c'est une virgule qu'il faut mettre, donc " 8,5 "
Donnez a : 1 Donnez b : 0 Donnez c : 1 La valeur de delta est negative (-4.0) les solutions de l'equation sont donc impossibles.
As-tu entendu parler des nombres complexes ? Car les solutions à cette équation existent...
Si Δ<0, alors les solutions sont -b/2a ± i√(-Δ))/2a
Et enfin, le meilleur pour la fin :
Donnez a : 1 Donnez b : -2 Donnez c : 1 La valeur de delta est egale a 0.0 donc la solution de l'equation est egale a 0
Là le résultat est carrément faux, la solution de cette équation c'est x=1.
Je n'ai même pas regardé le code, j'ai juste exécuté ton programme et testé quelques cas...
Alors replonge toi un peu dans ton programme, la "perfection" n'est pas pour aujourd'hui !
20 avril 2011 à 20:56