48/2(9+3) ¿jerarquia de operaciones? (Valoración de 5.00 sobre 5, resultante de 1 votos)

Temas de actualidad, anécdotas, presentaciones y esas otras cuestiones no-ingenieriles
por
#265547
Todas las opciones [288, 2 y error de sintaxis] se pueden obtener según donde se ejecute la operacion 48/2(9+3).

Éste es un problema clásico de ambigüedad en una gramática de cualquier asignatura de compiladores.

Todos tenemos claro que el criterio por defecto tanto en cualquier lenguaje de programación como en matemáticas es:
- Los paréntesis se evalúan primero.
- Las operaciones multiplicar (*) y dividir (/) tienen prioridad sobre sumar (+) y restar (-).
- Se opera de izquierda a derecha.
48/2*(9+3) = 48/2*12 = 24*12 = 288 Cuando la multiplicación es explícita lo hacen así todas las calculadoras y lenguajes.

Pero 48/2*(9+3) y 48/2(9+3) pueden o no ser lo mismo. Algunas calculadoras y algunos lenguajes para 48/2(9+3) dan 2 porque asumen una que la multiplicación implícita (cuando no hay símbolo *) tiene preferencia sobre la multiplicación explícita, así
48/2(9+3) = 48/(2*(9+3)) = 48 /(2*12) = 48 / 24 = 2
De la misma manera que se permite programar:
- Multiplicación implícita: Y=1/2X y se entiende Y=1/(2*X)
- Multiplicación explícita: Y=1/2*X y se entiende Y=(1/2)*X

La mayoría de los lenguajes tienen desactivada por defecto la multiplicación implicita para evitar liar la programación innecesariamente y darán un error de sintaxis salvo que se active a propósito la opción de multiplicación implícita y si se activa habrá que ver cómo está definida la operación en ese lenguaje (unos lenguajes darán 288 y otros 2).

Como anécdota, algunos desastres clásicos muy instructivos atribuibles a una mala programación informática son el Arianne y los fallos de los misiles Patriot frente a los Scud.
http://www.ima.umn.edu/~arnold/disasters/ariane.html
http://www.ima.umn.edu/~arnold/disasters/patriot.html
Avatar de Usuario
por
#265568
http://www.youtube.com/watch?v=vIrBJIJp5UI

Esto hecho a mano no pasaría, con la línea bien colocada como debe ser...
Avatar de Usuario
por
#267897
Tengo una por aquí que me ha traído el niño y no tengo claro cual seria el orden


13-6*2+3*4/2
Avatar de Usuario
por
#267898
tor_nero escribió:13-6*2+3*4/2

(13) - (12) + (6) = 7 ; es este ejemplo, no veo ambigüedades... qeu otras ves posible ??
Avatar de Usuario
por
#267935
Gracias Cueli, me confirmas la opción mas evidente que tenia. Un saludo

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

Permisos de mensaje

No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro
No puede enviar adjuntos en este Foro