Codificación aprenderaprogramar.com: CU00144A
PARADOJA DEL SI (IF ... THEN ... ELSE) BURLADO POR UN INTERVALO. INCORRECCIÓN DE COMPARACIONES DOBLES.
Supongamos que se nos presenta un problema con una decisión tal que si una variable toma un valor comprendido en un intervalo hay que mostrar un mensaje y si está fuera de ese intervalo, otro mensaje.
Podríamos escribir (variable = A, intervalo 50 – 75, mensaje si está dentro del intervalo es Arabia, si está fuera es Eusebio):
Si 50 < A < 75 Entonces Mostrar “Arabia” SiNo Mostrar “Eusebio” FinSi |
También:
Si A > 50 y A < 75 Entonces Mostrar “Arabia” SiNo Mostrar “Eusebio” FinSi |
En principio, si A = 160 en ambos casos deberíamos obtener en pantalla el mensaje “Eusebio”. Sin embargo, con la sintaxis 50 < A < 75 nos podemos encontrar con que el ordenador nos devuelve “Arabia” ¿Por qué? Pues simplemente porque el lenguaje utilizado no admita comparaciones dobles del tipo x < y < z. Ante esta situación, o bien se produce un error o bien se evalúa x < y y si se cumple, se pasan a ejecutar las instrucciones contenidas en el Entonces.
Este “resultado inesperado” puede ocasionar un buen quebradero de cabeza, ya que en un programa extenso no será nada fácil detectar este error. Como remedio, usaremos siempre la escritura de condiciones una detrás de otra y no de forma múltiple, tanto en el pseudocódigo como en el código. Y como dice el refrán, “a perro muerto se acabó la rabia”.
Para hacer un comentario o consulta utiliza los foros aprenderaprogramar.com, abiertos a cualquier persona independientemente de su nivel de conocimiento.