2016-06-21 1 views
0

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?

+0

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

Répondre

1

vous multipliez par erreur a au lieu de diviser

(-b + sqrt(delta))/(2*a) 
+2

Wow. Bonne prise car le code est loin d'être un [MCVE] (http://stackoverflow.com/help/mcve). – Codo

+0

Oh mon dieu ne peut pas croire que je n'ai pas vu ça .. J'ai vraiment la tête dans les nuages ​​aujourd'hui, merci beaucoup – tommsyeah

+0

@Codo désolé à ce sujet – tommsyeah