Exercice calculatrice IOS

Bonjour,

je suis débutant en programmation et je viens de commencer le cours iOS.

je suis actuellement à l’exercice de la calculette et j’ai essayé de faire l’exo sans regarder la correction pour commencer (et je suis content que mon code marche), je sais que mon code n’est pas superbe mais je voudrais vos avis sur mon code avant que je fasse la correction.

merci de vos retours :slight_smile:

//
// ViewController.swift
// calculatrice
//
// Created by Arnaud G on 03/06/2018.
// Copyright © 2018 Arnaud G. All rights reserved.
//

import UIKit

class ViewController: UIViewController {

var resultat: Double = 0
var nb1: Double = 0
var nb2: Double = 0
var operateur: String = ""

func calcul(nb1: Double, nb2: Double, operateur: String) -> Double {
    if operateur == "+" {
        resultat = nb1 + nb2
        resultatLabel.text = String(resultat)
    }
    if operateur == "-" {
        resultat = nb1 - nb2
        resultatLabel.text = String(resultat)
    }
    if operateur == "*" {
        resultat = nb1 * nb2
        resultatLabel.text = String(resultat)
    }
    if operateur == "/" {
        resultat = nb1 / nb2
        resultatLabel.text = String(resultat)
    }
    return resultat
}

func effaceZero() {
    if resultatLabel.text == "0.0" {
        resultatLabel.text = ""
    }
}

//Labe qui affiche les valeurs
@IBOutlet weak var resultatLabel: UILabel!

//tout les boutons des chiffres ici
@IBAction func bouton0(_ sender: Any) {
    effaceZero()
    resultatLabel.text = resultatLabel.text! + "0"
}

@IBAction func bouton1(_ sender: Any) {
    effaceZero()
    resultatLabel.text = resultatLabel.text! + "1"
}

@IBAction func bouton2(_ sender: Any) {
   effaceZero()
    resultatLabel.text = resultatLabel.text! + "2"
}

@IBAction func bouton3(_ sender: Any) {
   effaceZero()
    resultatLabel.text = resultatLabel.text! + "3"
}

@IBAction func bouton4(_ sender: Any) {
    effaceZero()
    resultatLabel.text = resultatLabel.text! + "4"
}

@IBAction func bouton5(_ sender: Any) {
    effaceZero()
    resultatLabel.text = resultatLabel.text! + "5"
}

@IBAction func bouton6(_ sender: Any) {
    effaceZero()
    resultatLabel.text = resultatLabel.text! + "6"
}

@IBAction func bouton7(_ sender: Any) {
    effaceZero()
    resultatLabel.text = resultatLabel.text! + "7"
}

@IBAction func bouton8(_ sender: Any) {
   effaceZero()
    resultatLabel.text = resultatLabel.text! + "8"
}

@IBAction func bouton9(_ sender: Any) {
    effaceZero()
    resultatLabel.text = resultatLabel.text! + "9"
}

//boutons des operations
@IBAction func additionBouton(_ sender: Any) {
    nb1 = Double(resultatLabel.text!)!
    //print(nb1)
    resultatLabel.text = ""
    operateur = "+"
}

@IBAction func soutractionBouton(_ sender: Any) {
    nb1 = Double(resultatLabel.text!)!
    resultatLabel.text = ""
    operateur = "-"
}

@IBAction func BoutonMultiplier(_ sender: Any) {
    nb1 = Double(resultatLabel.text!)!
    resultatLabel.text = ""
    operateur = "*"
}

@IBAction func BoutonDiviser(_ sender: Any) {
    nb1 = Double(resultatLabel.text!)!
    resultatLabel.text = ""
    operateur = "/"
}


//bouton effacement
@IBAction func acBouton(_ sender: Any) {
    resultatLabel.text = ""
}

//bouton neg/pos resultat
@IBAction func changeSigne(_ sender: Any) {
    if resultatLabel.text == "" {
        resultatLabel.text = "0"
    }
    resultatLabel.text = String(Double(resultatLabel.text!)! * -1)
}

//pourcentage
@IBAction func pourcentage(_ sender: Any) {
    resultatLabel.text = String(Double(resultatLabel.text!)! / 100)
}

//resultat
@IBAction func resultatBouton(_ sender: Any) {
    calcul(nb1: nb1, nb2: Double(resultatLabel.text!)!, operateur: operateur)
   /* operateur = ""
    nb1 = 0
    nb2 = 0
    resultat = 0
    */
}

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

}

Hello,

Je ne sais pas si le code fonctionne, mais je vois beaucoup, beaucoup de copier coller.

Exemple :

@IBAction func bouton0(_ sender: Any) {
    effaceZero()
    resultatLabel.text = resultatLabel.text! + "0"
}

@IBAction func bouton1(_ sender: Any) {
    effaceZero()
    resultatLabel.text = resultatLabel.text! + "1"
}

Là, tu as 2 fois le meme code à 1 détails près. En générale c’est le moment de factoriser le code.
Tu peux associer une IBAction à plusieurs boutons.
Et le bouton à un attribut “tag” par exemple.

@IBAction func boutonChiffre(_ sender: Any) {
    effaceZero()
    resultatLabel.text = resultatLabel.text! + sender.tag
}

Sur la fonction de calcul, il y a aussi de la répétition

func calcul(nb1: Double, nb2: Double, operateur: String) -> Double {
    if operateur == "+" {
        resultat = nb1 + nb2
        resultatLabel.text = String(resultat)
    }
    if operateur == "-" {
        resultat = nb1 - nb2
        resultatLabel.text = String(resultat)
    }
    if operateur == "*" {
        resultat = nb1 * nb2
        resultatLabel.text = String(resultat)
    }
    if operateur == "/" {
        resultat = nb1 / nb2
        resultatLabel.text = String(resultat)
    }
    return resultat
}

Tu écris ceci dans tous les “IF” : resultatLabel.text = String(resultat)
Fais le 1 seule fois à la fin.

Et aussi, au lieu de faire des if à chaque fois, fait un if/elseif/elseif comme ca il ne fait pas de vérifications innutiles. (ou alors un switch) :slight_smile:

J’espère que cela va t’aider.

1 « J'aime »

Merci gaveline pour ton retour !!

Oui mon de code fonctionne bien, il fait les calculs simple (testé et approuvé ;))

Oui en relisant mon code j’ai vu aussi j’ai pas mal d’instruction que je pourrais éviter mais a l’état du cours j’ai fait comme expliqué dans les cours précédemment.
J’ai aussi regardé la correction et oui c’est beaucoup beaucoup plus simple mais encore fallait t’il savoir que ça pouvais servir à ça les tag

Merci beaucoup des conseils gaveline c’est super sympas.

1 « J'aime »

Pas de quoi :slight_smile: Avec plaisir.