Bien, esto es lo que tengo de momento. He añadido que los numeros puedan ser flotantes para abarcar un mayor número de posibilidades y las potencias. Ahora como reto personal estoy intentando hacer que pueda hacer raíces cuadradas, pero se me está complicando un poco y también las puedes obtener elevando a 1/2 osea que... tampoco vamos a enredar el rizo; si consigo hacer esto último subiré la solución también. Gracias a todos.
void setup()
{
Serial.begin(9600);
Serial.println("Introduce operacion: ");
}
void loop(){
String operacion = "";
int signo = 0;
int suma;
int resta;
int multiplicacion;
int division;
int potencia;
int root;
String op1 = "";
String op2 = "";
float Resultado;
int separador;
float Operando1;
float Operando2;
if (Serial.available()>0){
operacion = Serial.readStringUntil('\n');
suma = operacion.indexOf('+');
resta = operacion.indexOf('-');
multiplicacion = operacion.indexOf('*');
division = operacion.indexOf('/');
potencia = operacion.indexOf('^');
root = operacion.indexOf('t');
int longitudOperacion = operacion.length();
if (suma > 0){
signo = 1;
separador = suma;
}
if (resta > 0){
signo = 2;
separador = resta;
}
if (multiplicacion > 0){
signo = 3;
separador = multiplicacion;
}
if (division > 0){
signo = 4;
separador = division;
}
if (potencia > 0){
signo = 5;
separador = potencia;
}
op1 = operacion.substring(0, separador);
op2 = operacion.substring(separador + 1, longitudOperacion);
Operando1 = op1.toFloat();
Operando2 = op2.toFloat();
Serial.print(operacion);
Serial.println(" = ");
switch (signo){// open switch
case 1:
Resultado = Operando1 + Operando2;
break;
case 2:
Resultado = Operando1 - Operando2;
break;
case 3:
Resultado = Operando1 * Operando2;
break;
case 4:
Resultado = Operando1 / Operando2;
break;
case 5:
Resultado = pow(Operando1, Operando2);
break;
}//close switch
Serial.println(Resultado);
}
}
Hola muy buenas, estoy intentando ahora hacer el mismo problema pero usando funciones para que quede un programa más limpio, pero se me está complicando el hacer una función que detecte la operación que el usuario quiere hacer; alguna idea? Esto es lo que tengo de momento
// VARIABLES
String operacion;
int suma;
int resta;
int multiplicacion;
int division;
int potencia;
// FUNCIONES
int detectaOperacion(String operacion1)
{
suma = operacion1.indexOf('+');
resta = operacion1.indexOf('-');
multiplicacion = operacion1.indexOf('*');
division = operacion1.indexOf('/');
potencia = operacion1.indexOf('^');
}
void setup()
{
Serial.begin(9600);
Serial.println("Introduce operacion: ");
}
void loop()
{
if (Serial.available()>0){
operacion = Serial.readStringUntil('/n');
detectaOperacion(operacion);
}
}
Pero claro, en la función detectaOperacion() introducimos una variable tipo String y yo quiero que me devuelva una variable tipo int y claro esto es incoherente; debería intentar plantearlo de otro modo? en vez de intentar "reciclar" el código anterior?
// VARIABLES
String operacion;
String op1;
String op2;
int suma;
int resta;
int multiplicacion;
int division;
int potencia;
int signo;
int separador;
float operando1;
float operando2;
// FUNCIONES
int detectaseparador(String operacion1)
{
suma = operacion.indexOf('+');
resta = operacion.indexOf('-');
multiplicacion = operacion.indexOf('*');
division = operacion.indexOf('/');
potencia = operacion.indexOf('^');
if (suma>0)
{
separador = suma;
}
if (resta>0)
{
separador = resta;
}
if (multiplicacion>0)
{
separador = multiplicacion;
}
if (division>0)
{
separador = division;
}
if (potencia>0)
{
separador = potencia;
}
return separador;
}
void setup()
{
Serial.begin(9600);
Serial.println("Introduce operacion: ");
}
void loop()
{
if (Serial.available()>0){
operacion = Serial.readStringUntil('/n');
detectaseparador(operacion);
op1 = operacion.substring(0, separador);
op2 = operacion.substring(separador + 1);
operando1 = op1.toFloat;
operando2 = op2.toFloat;
}
}
Pero no se me ocurre ninguna forma óptima de implementarlo, porque he hecho una función para poder convertir lo introducido por teclado a números flotantes pero si ahora por ejemplo quiero introducir la parte de detectaOperacion() tendría que repetir parte del código ya hecho. Estube pensando en hacer eso y después hacer una función para cada operación pero no sé... Me parece que sería desperdiciar mucha memoria no? Alguna idea de una implementación más óptima?