Calculadora-Duda

Iniciado por h0oke, 17 Julio 2009, 01:08 AM

0 Miembros y 1 Visitante están viendo este tema.

h0oke

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?

ny0x

pues ni modo si quieres averiguarlo tendras que usar ingenieria inversa o hacer tu propio metodo  :xD

seba123neo

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.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

h0oke

 :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

Skeletron

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

cobein

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.
http://www.advancevb.com.ar
Más Argentino que el morcipan
Aguante el Uvita tinto, Tigre, Ford y seba123neo
Karcrack es un capo.

h0oke

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?

cobein

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.

http://www.advancevb.com.ar
Más Argentino que el morcipan
Aguante el Uvita tinto, Tigre, Ford y seba123neo
Karcrack es un capo.

h0oke

Me sorprendes cobein  ::).

Bien, ahora que lo mencionas, en vb se pueden redimensionar los datos estructurados, muchas gracias.

Un saludo.