Modo consola
Primer número: 1
Operación: +
Segundo número: 4
Resultado: 5
Primer número: r
Error
Primer número: 4
Operación: m
Error
Primer número: 1
Operación: /
Segundo número: 0
No se puede dividir por cero
Primer número: 4
Operación: -
Segundo número: 6
Resultado: -2
Primer número:
...
enum OperacionCalculadora {
case sumar, restar, multiplicar, dividir
init?(_ boton:String) {
switch boton {
case "+": self = .sumar
case "-": self = .restar
case "*": self = .multiplicar
case "/": self = .dividir
default: return nil
}
}
func calcular(_ n1: Int, _ n2: Int) -> Int {
switch self {
case .sumar: return n1 + n2
case .restar: return n1 - n2
case .multiplicar: return n1 * n2
case .dividir: return n1 / n2
}
}
}
var n1:Int? = 0, n2:Int? = 0
var operacion:OperacionCalculadora? = nil
var pantalla:String = "0"
func actualizaNumero(_ boton:String) -> Int? {
n1 = Int(pantalla)
n2 = Int(boton)
if n2 != nil {
pantalla = boton
}
return n2
}
func actualizaOperacion(_ boton:String) -> OperacionCalculadora? {
operacion = OperacionCalculadora(boton)
return operacion
}
func realizaCalculo() -> Bool {
if n2 == 0 && operacion == .dividir {
print("No se puede dividir por cero\n")
return false
}
pantalla = String(operacion!.calcular(n1!, n2!))
return true
}
repeat {
print("Primer número: ", terminator:"")
if actualizaNumero(readLine()!) == nil {
print("Error\n")
continue
}
print("Operación: ", terminator:"")
if actualizaOperacion(readLine()!) == nil {
print("Error\n")
continue
}
print("Segundo número: ", terminator:"")
if actualizaNumero(readLine()!) == nil {
print("Error\n")
continue
}
if realizaCalculo() == true {
print("Resultado: " + pantalla + "\n")
}
} while true
Aplicación iOS
//
// ViewController.swift
// Calculadora
//
import UIKit
class ViewController: UIViewController {
@IBOutlet var pantalla: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
}
enum OperacionCalculadora {
case sumar, restar, multiplicar, dividir
init?(_ boton:String) {
switch boton {
case "+": self = .sumar
case "-": self = .restar
case "*": self = .multiplicar
case "/": self = .dividir
default: return nil
}
}
func calcular(_ n1: Int, _ n2: Int) -> Int {
switch self {
case .sumar: return n1 + n2
case .restar: return n1 - n2
case .multiplicar: return n1 * n2
case .dividir: return n1 / n2
}
}
}
var n1:Int? = 0, n2:Int? = 0, borraNumero = false
var operacion:OperacionCalculadora? = nil
// Ejecutar al pulsar los botones del 0 al 9
@IBAction func actualizaNumero(_ boton:UIButton) {
if pantalla.text == "0" || borraNumero == true {
pantalla.text = ""
borraNumero = false
}
pantalla.text = pantalla.text! + boton.currentTitle!
}
// Ejecutar al pulsar los botones de +, -, *, /
@IBAction func actualizaOperacion(_ boton:UIButton) {
operacion = OperacionCalculadora(boton.currentTitle!)
n1 = Int(pantalla.text!)!
borraNumero = true
}
// Ejecutar al pulsar el botón de =
@IBAction func realizaCalculo() {
n2 = Int(pantalla.text!)!
if n2 == 0 && operacion == .dividir {
muestraError("No se puede dividir por cero")
}
else {
pantalla.text = String(operacion!.calcular(n1!, n2!))
}
borraNumero = true
}
func muestraError(_ mensaje:String) {
let alert = UIAlertController(title:"Error", message:mensaje, preferredStyle:.alert)
let action = UIAlertAction(title:"OK", style:.default, handler:nil)
alert.addAction(action)
show(alert, sender:nil)
}
}