Go - Duda con Go para permitir al usuario introducir una ecuacion

 
Vista:

Duda con Go para permitir al usuario introducir una ecuacion

Publicado por Julio (1 intervención) el 11/04/2020 18:30:37
Buenas, necesito una ayuda con algo. Soy inexperto utilizando Go pero necesito hacer cierto programa en donde tengo que hacer que se le permita al usuario introducir una ecuacion (una bastante simble ej: A,B =(a+b)) y se haga algo con eso, la cosa es que nose como hacer que se le permita al usuario hacer eso. Alguien podria ayudarme con eso?? Porfa.

Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Francisco
Val: 6
Ha disminuido 1 puesto en Go (en relación al último mes)
Gráfica de Go

Duda con Go para permitir al usuario introducir una ecuacion

Publicado por Francisco (3 intervenciones) el 17/06/2020 02:17:39
Hola

Tienes que usar un evaluador de expresiones

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
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)
 
}

Por consola

1
2
3
4
5
6
7
Introduzca su formula (solo puedo manejar dos variables A y B) =>5+a * 7/b
Indique el valor para A =>3
Indique el valor para B =>7.888
Formula =>  5+a * 7/b
Valor de A => 3
Valor de B => 7.888
Resultado final de la expresion 5+a * 7/b => 7.662272

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar