package main
import (
"bufio"
"fmt"
"os"
"strconv"
"github.com/PaesslerAG/gval"
)
func PedirDatos() map[string]string {
reader := bufio.NewReader(os.Stdin)
fmt.Print("Introduzca su formula (solo puedo manejar dos variables A y B) =>")
formula, err := reader.ReadString('\n')
if err != nil {
fmt.Println("Se ha producido el siguiente error =>", err)
os.Exit(1)
}
fmt.Print("Indique el valor para A =>")
varA, err := reader.ReadString('\n')
if err != nil {
fmt.Println("Se ha producido el siguiente error =>", err)
os.Exit(1)
}
fmt.Print("Indique el valor para B =>")
varB, err := reader.ReadString('\n')
if err != nil {
fmt.Println("Se ha producido el siguiente error =>", err)
os.Exit(1)
}
valores := map[string]string{
//Hay que entregar los valores sin el salto de linea
"formula": formula[:len(formula)-1],
"a": varA[:len(varA)-1],
"b": varB[:len(varB)-1],
}
return valores
}
func main() {
valores := PedirDatos()
fmt.Println("Formula => ", valores["formula"])
//Convertimos a float, el valor de A y B
a, err := strconv.ParseFloat(valores["a"], 64)
if err != nil {
fmt.Println("Se ha producido el siguiente error =>", err)
os.Exit(1)
}
b, err := strconv.ParseFloat(valores["b"], 64)
if err != nil {
fmt.Println("Se ha producido el siguiente error =>", err)
os.Exit(1)
}
fmt.Println("Valor de A =>", a)
fmt.Println("Valor de B =>", b)
//Evaluamos y pasamos los valores de las variable
resultado, err := gval.Evaluate(valores["formula"], map[string]interface{}{
"a": a,
"b": b,
})
if err != nil {
fmt.Println(err)
os.Exit(1)
}
fmt.Printf("Resultado final de la expresion %s => %6.6f\n", valores["formula"], resultado)
}