Consulta pregunta cuestionario

Consulta pregunta cuestionario

de German Astol Iriarte -
Número de respuestas: 2

Buenas tardes, en la prueba de ayer me tocó esta pregunta, quizás esté comprendiendo mal. 

En esta respuesta tanto 2 como 5 cumplen las condiciones, ya que 5/4 es menor a 10 y el conector es un o

Error en pregunta

En respuesta a German Astol Iriarte

Re: Consulta pregunta cuestionario

de Eduardo Fernandez -
Hola,

No entendimos dónde se aplica lo que escribiste sobre que 5/4<10.

El caso con i=5 y j=5 es incorrecto. Esto debido a que (i*j+i < j*j+4) se corresponde con (30<29) y por tanto da falso.
Al ser falso y haber un || (doble or), tiene que hacerse la evaluación de la segunda expresión (j/(j-i) < 10) que es equivalente a (5/0 < 10), pero al hacer 5/0 el resultado es Inf (infinito) e Inf<10 da falso. O sea que no entra al if y no va a ejecutar ningún disp(...) del código.

El caso con i=2 y j=2 es correcto. Esto debido a que (i*j+i < j*j+4) se corresponde con (6<8) y por tanto da verdadero. Al ser verdadero y haber un || (doble or) ya sabemos que el resultado será verdadero. O sea que sí entra al primer if. Luego en el segundo if la condición es i==j, que en este caso es (2==2, verdadero) y por tanto también entra a ese if y ejecuta disp('SI'), por lo que escribe el texto 'SI' en pantalla.

Por último, aclaro que en las versiones de Octave que manejamos, en los if y while siempre se ejecutan los operadores & y | como si fuesen && y ||. Siempre la ejecución es perezosa o lazy aunque usemos & y | .

Espero haber aclarado las dudas de esta pregunta,
Eduardo