1 votos

Algoritmo utilizado en la calculadora de Mac OS

Estoy tratando de entender el algoritmo utilizado en la calculadora básica de Mac OS pero no pude descifrar la lógica detrás de ciertas operaciones.

Pude entender las siguientes operaciones,

Entrada: 2+3x3=
La salida: 11

Entrada: 2+3x3==
La salida: 33
Explicación: El valor de [ 2+3x3= ] es 11 cuando pulsamos \= de nuevo, se realiza la siguiente operación,

Valor actual ( 11 ) LastUsedOperator( x ) LastPressedNumber( 3 ) [ 11x3 ] = 33

Pero no he podido entenderlas y no entiendo por qué se admiten estas operaciones,

Entrada: 4+3x3x3x=
La salida: 135

Entrada: 4+3x3x3x==
La salida: 3645

Entrada: 4-3x3x3x=
La salida: 81

Entrada: 4+3x3x3x==
La salida: 2187

Me gustaría saber el algoritmo utilizado detrás de estas operaciones.

3voto

Sara Puntos 146

Sinceramente, creo que es un error de la calculadora, aunque posiblemente se podría defender como algún tipo de concesión de usabilidad. Nota: Estoy limitando mi análisis a las calculadoras de punto flotante. La calculadora programadora se comporta de forma diferente.

Las reglas generales parecen ser

  1. Si no introduce un número entre la pulsación de una tecla de operador y la pulsación de = el número que aparece en la pantalla al pulsar = se utiliza como operando. En la mayoría de los casos, al pulsar -= da como resultado cero.
  2. Después de pulsar = una vez, las pulsaciones adicionales aplican el último operador y operando al valor mostrado.
  3. El error es que si hay un operador de baja precedencia (como + ) siendo diferido porque un operador de mayor precedencia (como x ) está computando, el operador de baja precedencia se mueve al final de la ecuación para el cómputo inicial.

Ejemplos de la pregunta original

Entrada: 4+3x3x3x=
La salida: 135 Explicación:

  • 4+3x pone 4 en la pila mientras calcula el 3x de mayor prioridad...
  • 3x3x3 es 27
  • Cuando se termina con x= tiene que decidir qué hacer para la final x para completar la ecuación. Lo que hace es reemplazar el operador final con el operador diferido y desplazar el resto hacia la izquierda, luego toma el número actualmente mostrado, que es 27, y lo agrega como operando final.
    • tenías 4 + (3x3x3x y una pantalla que mostraba 27
    • la calculadora probablemente debería convertir eso en 4 + (3x3x3x27)
    • en lugar de eso hace un salto mayor y lo convierte en (4x3x3x3) + 27
  • Como he dicho, probablemente sea un error. Terminas con
  • 4x3x3x3 + 27 que es 108 + 27 que es 135

Entrada: 4+3x3x3x==
La salida: 3645 Explicación:

  • Del ejemplo anterior, la última operación introducida es x y el último número utilizado es 27, por lo que se obtiene 135 * 27 que es 3645

Entrada: 4-3x3x3x=
La salida: 81 Explicación:

  • Al igual que el primer ejemplo, excepto que 108 - 27 es 81

Entrada: 4+3x3x3x==
La salida: 2187 Explicación:

  • Al igual que el segundo ejemplo, excepto que ahora es 81x27 es 2187

Ejemplos adicionales

Nota: Abajo, ^ representa la x y función de potencia, que tiene mayor precedencia que x .

Entrada: 4+3x2^=
La salida: 38
Explicación:

  • La pantalla muestra "2" cuando = se pulsa, por lo que los operandos son 4,3,2,2 y los operadores +,x,^ se convierten en x,^,+
  • 4*(3^2)+2 -> 4*9+2 -> 36+2 es 38

Entrada: 4+3x2^==
La salida: 1444
Explicación: (4*(3^2)+2)^2 o 38^2

Entrada: 2x2x3^=
La salida: 192
Explicación:

  • 3 está en pantalla cuando se pulsa = , ^ tiene precedencia sobre x, que se desplaza al final, por lo que los operandos son 2,2,3,3 y los operadores x,x,^ se convierten en x,^,x
  • ((2x2)^3)x3 -> 4^3x3 -> 64*3 es 192

Entrada: 5+7x3^=
La salida: 1718
Explicación: 5x(7^3)+3

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X