Erreur étrange, aidez-moi à comprendre svp!

Fermé
Charyb - Modifié le 5 oct. 2019 à 19:44
 Utilisateur anonyme - 6 oct. 2019 à 00:35
aidez-moi à comprendre svp!

L'énoncé:
On vous fournit fournit trois variables réelles (float) a, b, et c, représentant les coefficients d'une équation du second degré : a x² + b x + c = 0.
Vous devez calculer les racines du polynôme :
si il n'y en a pas, vous affichez "pas de racine"
si il en a une, vous l'afficherez
si il y en a deux, vous afficherez les deux, la plus petite en premier

Toutes les valeurs doivent être affichées avec 3 décimales.

Vous avez a votre disposition les fonctions:
-void affiche(String c), qui affiche la chaine de caractères passée en paramètre.
-void afficheReel(float f), qui affiche le réel passé en paramètre.
-void afficheReels(float f, float f2), qui affiche les réels passés en paramètres, l'un après l'autre.
-float sqrt(float x), qui retourne la racine carrée de la valeur passée en paramètre.



Mon programme:

if ((b*b - 4*a*c)<0)
affiche ("pas de racine");


if ((b*b - 4*a*c) == 0 && (-b/(2*a)) == (-1*0))
      afficheReel((-b/(2*a)) *-1);
els​‌‍‌​‍e 
      afficheReel((-b/(2*a)) *1);



if ((b*b - 4*a*c)>0)
afficheReels ((-b-sqrt(b*b - 4*a*c))/(2*a) , (-b+sqrt(b*b - 4*a*c))/(2*a));


Pas d'erreur de compil. En fait, quand le discriminant est positif, cela m'affiche: "Sortie console
-0.750-1.000 -0.500" au lieu de "Sortie attendue -1.000 -0.500". De plus, j'ai essayé sans les 2 dernières lignes, et cela m'affiche -0,750. Ce qui signifie que l'erreur vient du 2e paragraphe. Mais la, le discriminant est égal à 0. Il est pas supérieur. Est-ce que Java considère que 0>0 ou que (-1*0)>0?? Car j'en ai bien l'impression.
A voir également:

1 réponse

Utilisateur anonyme
6 oct. 2019 à 00:35
Bonsoir

déroulons ton code (voir les commentaires)
if ((b*b - 4*a*c)<0)//ça n'est pas le cas, alors on n'affiche pas "pas de racine"
   affiche ("pas de racine");


if ((b*b - 4*a*c) == 0 && (-b/(2*a)) == (-1*0))//ça n'est pas le cas, donc on n'affiche pas non plus (-b/(2*a)) *-1
      afficheReel((-b/(2*a)) *-1);
els​‌‍‌​‍e //mais comme il y a un esle, on affiche (-b/(2*a)) *1
      afficheReel((-b/(2*a)) *1);



if ((b*b - 4*a*c)>0)// c'est le cas, donc àn affiche les 2 racines
afficheReels ((-b-sqrt(b*b - 4*a*c))/(2*a) , (-b+sqrt(b*b - 4*a*c))/(2*a));


Tu aurais pu trouver cela par toi même en exécutant ton code en pas à pas pour observer ce qu'il se passe.
Apprendre à coder passe par apprendre à débugger.
https://forums.commentcamarche.net/forum/oldest/2228552-eclipse-execution-pas-a-pas
0