Calculadora en NXT-G

This entry is part 7 of 11 in the series NXT-G

CalcYa vimos cómo hacer una calculadora en RobotC, hoy queremos enseñaros a programar vuestra propia calculadora en NXT-G. Vamos a hacerlo de forma modular, es decir, haremos usos de “Mi bloque” para cada una de las funciones de la calculadora. Lo primero que debemos hacer es comprobar en cuántas funciones queremos dividir el trabajo, nosotros hemos utilizado 6.

Este es el programa completo

Programa

Como podéis ver leyendo los nombres de los bloques y con algún comentario adicional, podemos hacernos una idea muy clara de lo que hará nuestra calculadora.
Hay que tener en cuenta que, para que los bloques manejen la información correctamente, y sobre todo, sean capaces de intercambiar información unos con otros, debemos hacer que todas las variables utilizadas estén declaradas, no sólo dentro del bloque correspondiente, si no también en el programa principal, os recomiendo la lectura del tutorial de Variables y constantes.

Para poder hacer el programa lo más reutilizable posible, hemos separado 6 funciones:

  • Inicializar variables: CalcInicia

CalcInicia

  • Pedir dígito 1: CalcD1

CalcD1

  • Menú de operaciones disponibles: CalcMenu

CalcMenu

  • Pedir dígito 2: CalcD2

CalcD2

NOTA: Dígito 2 sólo se pide si la operación lo requiere, por ejemplo x^2 no necesita dos dígitos.

  • Calcular el resultado en función de los dígitos y la operación elegida: CalcOperaHay 8 operaciones disponibles
    - Suma

    CalcOpera-Suma

    - Resta

    CalcOpera-Resta

    - Multiplicación

    CalcOpera-Mult

    - División

    CalcOpera-Div

    - √x

    CalcOpera-Raiz

    Para realizar esta operación hemos utilizado el bloque de matemáticas de la versión 2.0, si no tenéis esta versión, podéis descargar el bloque Raiz Cuadrada, de Claude Bauman.

    - x^2

    CalcOpera-x2

    - x^y

    CalcOpera-xy

    Si la operación x^2 es tan simple como hacer x * x, para poder hacer esta operación necesitamos saber cuántas veces debemos hacer la multiplicación de X por si mismo, para esto usamos el contador del bucle, de tal forma que cada nueva iteración será igual al resultado previo por X.

    - 1/x

    CalcOpera-1x

  • Preguntar al usuario si quiere realizar otra operación: CalcOtra

CalcOtra

Si la respuesta es afirmativa, volvemos al principio del bucle, reseteamos las variables y todo vuelve a empezar.

FACTORIAL

Para terminar, a las 8 operaciones que hemos puesto más arriba, hemos añadido una novena, la operación factorial, el factorial de un número entero positivo se define como el producto de todos los números naturales anteriores o iguales a él. Se escribe n! (NOTA: Por definición el factorial de 0 es 1: 0!=1)

Esta operación requiere, por tanto, un control previo del valor de Digito 1 que nos da el usuario, tendremos que comprobar:
- Si es 0, en cuyo caso devolvemos 1
- Si es <0, devolvemos 0 para indicar error (el factorial sólo está definido para valores positivos)
- Si es >0, calculamos el valor.

Para calcular el valor vamos a analizar la definición: 4!= 4*3*2*1 que es lo mismo que decir 4!= 1*2*3*4, ya que el orden de los factores no altera el producto.
Esto nos permite usar el contador interno del bucle para realizar las operaciones, multiplicando el resultado de la iteración previa por el contador +1 – el contador del bucle empieza en 0, al sumarle uno forzamos que la primera multiplicación sea Ant*1-

Este es el programa del factorial (está dentro de CalcOpera, es la operación 9)

CalcOpera-Factorial

Como podéis ver, hemos dado una vuelta de tuerca a las tradicionales calculadoras con sólo 4 operaciones, añadiendo otras muy comunes, que en algún caso son algo más difíciles de implementar, pero que esperamos hayan quedado claras.

Cualquier duda, como siempre, en el foro.

Series Navigation<< Trigonometría en NXT-G (II)IMPORTANTE: Actualización Software Educativo NXT 2.1 >>
facebooktwittergoogle_plusredditpinterestlinkedinmailfacebooktwittergoogle_plusredditpinterestlinkedinmail

facebooktwittergoogle_pluslinkedinrssyoutubefacebooktwittergoogle_pluslinkedinrssyoutube

Comments are closed.