2017-04-15 6 views
1

J'ai donc écrit un programme de formule quadratique en C#, comment puis-je prendre le programme de formule quadratique et le modifier pour que le programme affiche correctement le nombre de solutions.Comment montrer des solutions pour la formule quadratique

s'il y a deux solutions,

(x - x1)(x - x2) = 0 

s'il n'y a qu'une seule solution,

(x - x0)^2 = 0 

s'il n'y a pas de solutions,

Pas de solution.

Ceci est le programme, si quelqu'un pouvait montrer la solution à cela pour moi ce serait merveilleux, je suis vraiment bloqué sur la façon de le faire.

using System; 

namespace quadraticequation 
{ 
class MainClass 
{ 
    public static void Main(string[] args) 
    { 
     Console.WriteLine("Enter a number for a"); //ask the user for information 
     double a = double.Parse(Console.ReadLine()); //Gets a from the user 
     Console.WriteLine("Enter a number for b"); //asks the user for information 
     double b = double.Parse(Console.ReadLine()); //Gets b from the user 
     Console.WriteLine("Enter a number for c"); //asks the user for information 
     double c = double.Parse(Console.ReadLine()); //Gets c from the user 

     //double.Parse --> is used to convert a number or string to a double. 
     //Console.ReadLine() --> is used to take the input from the user. 

     //We call a function here 
     Quadratic(a, b, c); 

    } 
    //We need to create a new function 

    public static void Quadratic(double a, double b, double c) 
    { 
     double deltaRoot = Math.Sqrt(b * b - 4 * a * c); //Math.Sqrt takes the square root of the number 


     if (deltaRoot >= 0) // we use an if statement here to handle information 
     { 
      double x1 = (-b + deltaRoot)/2 * a; //We write the information for x1 here 
      double x2 = (-b - deltaRoot)/2 * a; //We write the information for x2 here 
      Console.WriteLine("x1 = " + x1 + " x2 = " + x2); //we use this to write the roots 



     } 
     else // we use an else statement so that we dont return an error when there are no roots 
     { 
      Console.WriteLine("There are no roots"); 

     } 



    } 
} 
} 
+2

Ai-je raison de supposer que vous voulez seulement * * Les vraies solutions, et non plus complexes? –

Répondre

3

Je pense que vous devez revoir votre deuxième degré formule solution -compétences. Vous écrivez:

double deltaRoot = Math.Sqrt(b * b - 4 * a * c);

Mais le test est en fait si b -4 × a × c est supérieur ou égal à zéro: en effet qui est en fait la raison pour laquelle nous vérifions: parce que nous ne pouvons pas prendre la racine carrée d'un nombre négatif (ouais il existe complexes nombres qui peuvent prendre la racine carrée d'un nombre négatif, mais ignorons cela pour l'instant).

La solution est donc de l'écrire comme:

public static void Quadratic(double a, double b, double c) { 
    double delta = b*b-4*a*c; //only delta 

    if (delta > 0) { 
     double deltaRoot = Math.Sqrt(delta); 
     double x1 = (-b + deltaRoot)/(2 * a); //We write the information for x1 here 
     double x2 = (-b - deltaRoot)/(2 * a); //We write the information for x2 here 
     Console.WriteLine("x1 = " + x1 + " x2 = " + x2); //we use this to write the roots 
    } else if(delta == 0) { 
     double x1 = -b/(2*a); 
     Console.WriteLine("x1 = " + x1); //we use this to write the roots 
    } else { 
     Console.WriteLine("There are no roots"); 
    } 

}

Vous avez aussi écrire (-b + deltaRoot)/(2*a) (avec (2*a)), sinon vous multiplier(-b + deltaRoot)/2 avec a à la place. Une remarque finale est que les comparaisons d'égalité avec les points flottants sont très délicates, donc delta == 0 échouera souvent puisque le résultat peut être quelque chose 1e-20 -ish, qui est simplement une erreur lors de l'exécution de l'arithmétique en virgule flottante. Il est donc préférable d'utiliser une petite gamme de valeurs.

Cela donne:

csharp> MainClass.Quadratic(1,1,1); 
There are no roots 
csharp> MainClass.Quadratic(1,1,0); 
x1 = 0 x2 = -1 
csharp> MainClass.Quadratic(1,0,0); 
x1 = 0 
+0

Merci beaucoup d'avoir expliqué cela. –