Je suis novice en matière de rapidité et j'essaie de faire une petite application simple qui résout les équations (linéaires ou quadratiques). L'utilisateur doit entrer les valeurs pour a, b, c (l'équation est: ax^2 + bx + c = 0) et, si a = 0, l'application résout l'équation linéaire, si a! = 0, l'application résout l'équation quadratique (ou dit qu'elle n'a pas de solution). Le problème est que la partie des équations linéaires fonctionne très bien et donne les bons résultats, mais l'application donne de mauvais résultats pour les équations du second degré! Par exemple, si a = 4, b = 12, c = 8, le résultat devrait être x1 = - 1, x2 = -2, mais les solutions que j'obtiens ici sont x1 = -16.0, x2 = -32.0Swift - Le solveur d'équation quadratique donne de mauvais résultats?
x1/x2 semble être droite (0,5), mais les résultats sont tout à fait tort
Voici le code que j'ai écrit
import UIKit
import Foundation
class ViewController: UIViewController {
@IBOutlet weak var EnterA: UITextField!
@IBOutlet weak var EnterB: UITextField!
@IBOutlet weak var EnterC: UITextField!
@IBOutlet weak var LabelYourEquation: UILabel! // gonna deal with this later
@IBOutlet weak var Button: UIButton!
@IBOutlet weak var LabelX1: UILabel!
@IBOutlet weak var LabelX2: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
Hide()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
var a = Double()
var b = Double()
var c = Double()
var delta = Double()
var x1 = Double()
var x2 = Double()
var linearEquation = Bool()
var quadraticEquation = Bool()
func checkEquation() {
if a == 0 {
linearEquation = true
quadraticEquation = false
} else if a != 0 {
quadraticEquation = true
linearEquation = false
}
}
func linearEquationResolution() -> Double {
x1 = -c/b
LabelX2.hidden = true
LabelX1.text = "x = \(x1)"
return x1
}
func Delta() -> Double {
delta = (b * b) - (4 * a * c)
return delta
}
func quadraticEquationResolution() {
if delta >= 0 {
x1 = (-b + sqrt(delta))/2*a
x2 = (-b - sqrt(delta))/2*a
LabelX1.hidden = false
LabelX2.hidden = false
LabelX1.text = "x1 = \(x1)"
LabelX2.text = "x2 = \(x2)"
} else if delta < 0 {
LabelX1.text = "The equation has no solution"
LabelX2.hidden = true
}
}
func solveIt() {
if linearEquation == true {
linearEquationResolution()
} else if quadraticEquation == true {
Delta()
quadraticEquationResolution()
}
}
func Hide() {
LabelX2.hidden = true
LabelX1.hidden = true
}
@IBAction func SolveItAction(sender: AnyObject) {
a = Double(EnterA.text!)!
b = Double(EnterB.text!)!
c = Double(EnterC.text!)!
checkEquation()
solveIt()
}
}
Toutes les idées? Qu'ai-je fait de mal?
Pour des questions futures, taillez votre code jusqu'à un [mcve]. La meilleure façon pour cet exemple aurait été de supprimer le gui et de coder les valeurs qui ne fonctionnent pas. En fait, si vous l'aviez fait vous-même et que vous aviez fait vos calculs vous-même, vous auriez trouvé la seule ligne de code erronée, et probablement repéré votre bug. – Teepeemm