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.htmlhttp://www.ima.umn.edu/~arnold/disasters/patriot.html