Hola, analizando ayer la calculadora de windows me ha quedado una duda para hacer una implementación en vb.
Pareciera que mi cerebro está algo congelado peor no logro entender la siguiente lógica:
Para realizar las operaciones, uno ingresa un número, escoge la operación, y luego ingresa otro número,..., todo esto N veces. Bien, la calculadora no borra nunca la pantalla entre un número y otro número; lo que yo pienso es que existe una bandera que cambia a un TRUE cuando se escoge una operación, luego cuando se ingresa el próximo número, se analiza si esta bandera está en TRUE, si es así guarda el resultado en una variable, limpia el textbox y uno sigue escribiendo normalmente, ¿esto es correcto?
pues ni modo si quieres averiguarlo tendras que usar ingenieria inversa o hacer tu propio metodo :xD
Hola, queres que le pida el codigo a microsoft ?? no...mejor hace tu propia calculadora...mientras menos les copies mejor :xD, empeza probando con 2 operaciones basicas como resta y suma y despues vas a ver que no es dificil...
saludos.
:xD No es mi idea hacer ingenieria inversa o algo por el estilo, solo pense que existía algún "método", pero como bien dijeron tal vez sea conveniente hacerlo a mi manera.
La razón por la cual lo quiero hacer, es porque la calculadora en otros sistemas por ejemplo en base 2 tiene muchos problemas con números negativos, asi como tampoco en sus otras bases no posee división con decimales.
Un saludo
Creo que la implementacion de "bandera" es lo mas correcto o aproximado a la calculadora de Windows.. si si..
Aunque ojo...
Cuando pones: 3 + 4 = = = =
Recuerda que tiene que seguir sumando a 3 el valor 4... y si no implementas algo para ello, al colcoar el "=", te colocará el nuevo valor y no hará la proxima suma...
Y a que querio llegar con semejante estupidez que acabo de decir?
A que cada "boton" de operacion, tendrá que tener una particularidad diferente.. Cada boton, cada operacion tendrá su codigo.. por lo tanto, no busques un codigo standart para todas las operaciones..
Los numeros haran lo suyo.
+ - * y / haran lo suyo
= Hará lo suyo
Yo te recomiendo guardar en una variable el ultimo resultado y en otra, el ultimo operador..
Porque si haces:
3+1 = + = * = = = = / = + =
Ahí tienes que hacer unas cuantas operaciones, siempre con el ultimo resultado dado y con el ultimo operando...
El DISPLAY se modificará:
luego de precionar el "="
escribiendo un numero luego de "="
escribiendo un numoer luego de precionar un operador luego de "="
y otras varias
La manera logica de resolver esto es usar un pila, basicamente empujas los valores y operadores en la pila y luego resolves recursivamente
Algo asi:
3+4*2
pila
3
+
4
*
2
lo que haces es recorrer la pila resolviendo 1 operacion a la vez, en el orden correcto (*,/,+,-)hasta que quede 1 solo valor.
1- Primer pasada, hay una multiplicacion? si, ok la resolves y volves a llamar a la funcion
3
+
8
2- hay multiplicacion? no
hay division? no
hay suma? si
la resolves
11
en este punto terminas, queda solamente 1 numero.
la misma mecanica la podes aplicar pra usar parentesis, seno, coseno, etc.
Exacto cobein ::) a eso me refería, sin duda.
Una última duda, la pila no es que se determina en la ejecución del programa?, me confundí en esa parte, porque no manejo esos conceptos, unicamente por teoría y menos en vb, pero lo que leí me indica que en medio del programa necesitas hacer uso de "heap", o te refieres a crear una pila de cierto tamaño para la pronta ejecución?
La "pila" puede ser simplemente un array de strings que redimensionas para ir agregando mas datos. Yo usaria un custom type para poder almacenar algunos datos extra, por ejemplo en el caso de numeros negativos, tener un flag asi es mas simple de procesar.
Me sorprendes cobein ::).
Bien, ahora que lo mencionas, en vb se pueden redimensionar los datos estructurados, muchas gracias.
Un saludo.