Contenido del curso

Actividad 10

 

Crear mi propia Calculadora

Esta será la última Actividad propuesta de la sección de Programación y Ejercicios básicos. Para terminar, vamos a emplear muchos de los conceptos mostrados y practicados hasta este momento y crearemos una Calculadora.

Para ello, necesitaremos crear una Clase llamada Calculadora, que nos permita encapsular el funcionamiento de la misma a través de sus métodos. Esta dispondrá de un método privado para realizar cada operación matemática, y un único método público donde se interprete la operación a ejecutar y nos devuelva únicamente el resultado. Deberá aceptar como entrada por el Serial una operación completa de la forma:

[Número_1]   [Símbolo_de_la_Operación]  [Número_2]

Los espacios entre los números y el símbolo nos servirán para identificar cada entrada del usuario por el Monitor.

Esta herramienta se controlará por el Monitor Serial, y nos permitirá realizar las operaciones más básicas (sumar, restar, multiplicar y dividir) así como otras más complejas (potencias y porcentajes).

A continuación, se muestran ejemplos de cada operación que se deben enviar por el Monitor Serial y resolverse correctamente:

"23 + 46", "71 - 34", "52 - 89", "59 * 3", "124 / 4", "-89 / 7",

"2 ^ 8", "-3 ^ 4", "5 % 452"


Recuerda que, si vas a definir métodos en un clase que no están pensados para ser accesibles por el
usuario, sino que se implementan para que otros métodos, públicos o privados, hagan uso de ellos,
puedes utilizar el nivel de private. Los métodos privados se definen igual que cualquier otro método, lo
único que debes tener en cuenta es que, por conveniencia y para no confundirlos con métodos públicos,
el nombre del método suele comenzar con una "_". Por ejemplo:

class Prueba {

    public:

        String metodoPublico() {

            return _metodoPrivado();

        }

    private:

        String _metodoPrivado() {

            return "Hola Mundo";

        }

}
Cuando tenemos un String con mucha información, y queremos seleccionar solamente una parte de esta
cadena que nos interesa, debemos utilizar la función substring. Esta nos permite sacar un fragmento
que le indiquemos de una cadena de caracteres mucho mayor. Se le deben indicar, el índice de la
cadena, a partir del cual queremos que comience el recorte, y de manera opcional el índice donde
terminarlo. A continuación, se muestra un ejemplo de uso de la función:

String cadena_grande = "53.589 Soy una cadena muy larga pero solo necesito los dos primeros valores.";
String valores_utiles = cadena_grande.substring(0, 6); // Aquí tenemos "53.589"

Hay que tener en cuenta que el segundo índice no es inclusivo, es decir, si le indicamos como en el
ejemplo que recorte hasta el índice número 6, él interpreta que debe excluir de la nueva cadena ese
índice, por lo que alcanzará hasta el índice número 5.
Supongamos que tenemos una cadena de caracteres, de la que queremos extraer un fragmento.
Podemos usar la función de la pista anterior (substring), pero desconocemos la ubicación exacta de la
información que queremos retirar. Sin embargo, sabemos que la cadena tiene entre datos un símbolo
concreto o palabra, que hace de indicadora de la ubicación del dato que queremos. Para este caso, es
ideal utilizar las funciones indexOf, que nos devuelve un número entero que representa el índice donde se
encuentra este símbolo o palabra, y lastIndexOf, que hace lo mismo pero buscando desde el final de la
cadena. Ambas devuelven un -1 si no llegaran a encontrar nada que coincida con lo indicado. Veamos
un ejemplo de uso de estas funciones:

String cadena_grande = "TextoFIN sin valor|53.589FIN más texto sin valor|";

int primer_indice = cadena_grande.indexOf("|"); // Devolverá el índice 19
int segundo_indice = cadena_grande.lastIndexOf("FIN"); // Devolverá el índice 26

String valores_utiles = cadena_grande.substring(primer_indice + 1, segundo_indice);
// Ahora en valores_utiles tenemos la cadena "53.589" sustraída de la cadena original

En el ejemplo se ha sumado 1 al índice de comienzo del recorte de la cadena original para que no incluya
el símbolo "|" en el nuevo String, ya que primer_indice indica la posición de ese símbolo, mientras que
se ha dejado tal cual el índice de fin de recorte de la cadena, ya que no tiene en cuenta el carácter
ubicado en esa posición a la hora de ejecutar la extracción.
// Creamos la clase necesaria para nuestra Calculadora
class Calculadora {

    // En este caso, tenemos un único método público que se encargará de procesar la operación y ejecutarla
    public:

        // Definimos un método para recibir la operación como cadena de texto, procesarla para obtener
        // ambos números con los que operar y el operador, y, por último, llevar a cabo la operación
        // correspondiente
        float operar(String operacion_completa) {

            // Obtenemos el primer número de la operación dada
            int primer_espacio = operacion_completa.indexOf(" ");
            float numero_1 = operacion_completa.substring(0, primer_espacio).toFloat();
            // Obtenemos el segundo número de la operación dada
            int segundo_espacio = operacion_completa.lastIndexOf(" ");
            float numero_2 = operacion_completa.substring(segundo_espacio + 1).toFloat();
            // Obtenemos el operador indicado en la operación dada
            String operador = operacion_completa.substring(primer_espacio + 1, segundo_espacio);
            // Inicializamos el resultado de la operación para devolver posteriormente
            float resultado_final = 0.00;
            // Comprobamos el operador obtenido y llamamos al método privado necesario para hacer la operación
            if(operador == "+") {   // En el caso de suma pasamos los números al método privado _sumar
                resultado_final = _sumar(numero_1, numero_2);
            } else if(operador == "-") { // Para resta pasamos los números al método privado _restar
                resultado_final = _restar(numero_1, numero_2);
            } else if(operador == "*") { // Para multiplicación pasamos los números al método privado _multiplicar
                resultado_final = _multiplicar(numero_1, numero_2);
            } else if(operador == "/") { // Para división pasamos los números al método privado _dividir
                resultado_final = _dividir(numero_1, numero_2);
            } else if(operador == "^") { // Para potencia pasamos los números al método privado _potencia
                resultado_final = _potencia(numero_1, numero_2);
            } else if(operador == "%") { // Para porcentaje pasamos los números al método privado _porcentaje
                resultado_final = _porcentaje(numero_1, numero_2);
            }
            // Devolvemos el resultado obtenido después de las comprobaciones
            return resultado_final;

        }

    // Tenemos como métodos privados todos aquellos necesarios para cada operación disponible en la Calculadora
    private:

        // Método para hacer la suma de dos números
        float _sumar(float afloat b) {
            return a + b;
        }
        // Método para hacer la resta de dos números
        float _restar(float afloat b) {
            return a - b;
        }
        // Método para hacer la multiplicación de dos números
        float _multiplicar(float afloat b) {
            return a * b;
        }
        // Método para hacer la división de dos números
        float _dividir(float afloat b) {
            return a / b;
        }
        // Método para hacer la potencia de dos números
        float _potencia(float afloat b) {
            return pow(a, b);
        }
        // Método para hacer el porcentaje de dos números
        float _porcentaje(float afloat b) {
            return b * (a / 100);
        }

};

// Creamos nuestro objeto de tipo Calculadora
Calculadora miCalculadora;

void setup() {

    // Inicializamos el monitor serial
    Serial.begin(9600);

}

void loop() {

    // Comprobamos mensaje entrantes por el Monitor Serial
    if(Serial.available()) {

        // Obtenemos la operación a realizar del Monitor Serial como un String
        String operacion = Serial.readString();
        // Obtenemos el resultado de la operación leída pasándola a nuestra Calculadora
        float resultado = miCalculadora.operar(operacion);
        // Mostramos el resultado de la operación obtenida por Serial
        Serial.print("El resultado de ");
        Serial.print(operacion);
        Serial.print(" es ");
        Serial.println(resultado);

    }

}
Vistas
8 Número de vistas
8 Vistas de miembros
0 Vistas públicas
Acciones
0 Gustos
0 No me gusta
0 Comentarios
Compartir en redes sociales
Compartir enlace
Compartir por correo

Por favor iniciar sesión para compartir esto webpage por correo.