Advertisement
kklevi

equation

Dec 3rd, 2021 (edited)
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.89 KB | None | 0 0
  1. namespace Masodfoku
  2. {
  3.     internal class Equation
  4.     {
  5.         private double a, b, c;
  6.         public Equation(double[] values)
  7.         {
  8.             this.a = values[0]; this.b = values[1]; this.c = values[2];
  9.         }
  10.  
  11.         public Equation(double a, double b, double c)
  12.         {
  13.             this.a = a; this.b = b; this.c = c;
  14.         }
  15.  
  16.         public double FirstDegreeSolution { get; set; }
  17.  
  18.         public double[] SecondDegreeSolution { get; set; }
  19.  
  20.         public string ComplexSolution { get; set; }
  21.  
  22.  
  23.         //Eldönti, hogy másodfokú-e az egyenlet. Ha igen, true
  24.         //értékkel tér vissza.
  25.         public bool SecondDegree()
  26.         {
  27.             return this.a != 0 && Determinant() > 0;
  28.         }
  29.  
  30.         //Eldönti, hogy az egyenlet megoldása csak komplex szám
  31.         //lehet-e. Ehhez az kell, hogy a diszkrimináns negatív legyen.
  32.         public bool Complex()
  33.         {
  34.             return Determinant() < 0;
  35.         }
  36.  
  37.         public void Solve()
  38.         {
  39.             if (Complex())
  40.             {
  41.                 SolveComplex();
  42.             }
  43.             else if (SecondDegree())
  44.             {
  45.                 SolveQuadratic();
  46.             }
  47.             else if (this.a == 0 || Determinant() == 0)
  48.             {
  49.                 SolveSimple();
  50.             }
  51.             else
  52.             {
  53.                 throw new ArgumentException();
  54.             }
  55.         }
  56.  
  57.         private void SolveQuadratic()
  58.         {
  59.             double partOne = -this.b;
  60.             double partTwo = Math.Sqrt(Determinant());
  61.             double partThree = 2 * this.a;
  62.  
  63.             this.SecondDegreeSolution = new double[] { (partOne + partTwo) / partThree, (partOne - partTwo) / partThree };
  64.         }
  65.  
  66.         private void SolveComplex()
  67.         {
  68.             double partOne = -this.b / (2 * this.a);
  69.             double partTwoHelper = Determinant();
  70.             double rootPartTwo = Math.Sqrt(-partTwoHelper);
  71.             double partTwo = rootPartTwo / (2 * this.a);
  72.             this.ComplexSolution = String.Format("{0}+-{1}i", partOne, Math.Round(partTwo, 3));
  73.         }
  74.  
  75.         private void SolveSimple()
  76.         {
  77.             if (a == 0)
  78.                 this.FirstDegreeSolution = -this.c / this.b;
  79.             else if (Determinant() == 0)
  80.                 this.FirstDegreeSolution = -this.b / (2 * this.a);
  81.             else
  82.                 throw new ArgumentException();
  83.         }
  84.  
  85.         public override string ToString()
  86.         {
  87.             if (this.Complex())
  88.                 return this.ComplexSolution;
  89.             else if (this.SecondDegree())
  90.                 return String.Join(", ", this.SecondDegreeSolution);
  91.             else
  92.                 return this.FirstDegreeSolution.ToString();
  93.         }
  94.  
  95.         private double Determinant()
  96.         {
  97.             return Math.Pow(this.b, 2) - 4 * this.a * this.c;
  98.         }
  99.     }
  100. }
  101.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement