Estructura de control condicional simple (if)

La estructura condicional se utiliza para tomar decisiones, si la «expresión booleana» regresa un resultado verdadero (true) se ejecuta el un bloque de código, si no se omite y el flujo termina en la siguiente instrucción fuera de la estructura if.

Diagrama de flujo

La estructura condicional se utiliza para tomar decisiones, si la «expresión booleana» regresa un resultado verdadero (true) se ejecuta el un bloque de código, si no se omite y el flujo termina en la siguiente instrucción fuera de la estructura if.

esquema

Diagrama sintáctico

La condicional simple, omitiendo else, puede representarse con el siguiente diagrama sintáctico:

esquema

Se escribe la palabra reservada if y en medio de dos paréntesis la «expresión booleana» que se evaluará, después se coloca la sentencia (nula, simple o compuesta) que se ejecuta si el resultado es verdadero. En caso contrario esta sentencia se omite y continua con la siguiente sentencia después de la estructura.

Codificación en Java

if con una sentencia simple:

if( expresión_booleana )

sentencia; // si expresión_booleana == true

Sentencia puede ser compuesta o un bloque:

if( expresión_booleana ){// si expresión_booleana == true

sentencia;

sentencia;

sentencia;

}

La base y la altura de un triángulo deben ser números positivos, asignarle el valor de 1 si el número no es positivo.

if( (base <= 0) || (altura <=0) )

System.out.println( "Revise las entradas, deben ser positivas.”);

if( base <= 0 ) {

System.out.println( " La base debe ser un número positivo.”);

System.out.println( "A la base se asignará a un valor igual a 1.”);

base = 1;

}

if( altura <= 0 ) {

System.out.println( " La altura debe ser un número positivo. " );

System.out.println( " A la altura se asignará a un valor igual a 1. " );

altura = 1;

}

Si hay necesidad de hacer operaciones booleanas como el or || se recomienda agrupar con paréntesis para evita ambigüedades.

Observa que cuando se escribe una sentencia no se usan llaves de bloque, en el caso de requerir más de una sentencia como acción a realizar si se cumple la condición, debera iniciarse un bloque de instrucciones (sentencia compuesta, como en el segundo y tercer if) y se encierra entre las llaves de inicio { y fin }. esto puede ocurrir, incluso cuando sea una sóla instrucción (tercer if), por lo que el primer if podría quedar así, es cuestión de estilo:

if( (base <= 0) || (altura <= 0) ) {

System.out.println( "Revise las entradas, deben ser positivas.”);

}

Se desea crear un método setter para asignar el radio de un circulo, que sólo permita asignar valores positivos o cero. Implemente el método utilizando una estructura condicional simple (if):

public void setRadio( double value ) {

if( value<0 ) // si es negativo

value = -value; // se cambia el signo

this.radio = value; // siempre se asigna un valor positivo o cero.

}

Ejemplo de diagrama sintáctico:

Al utilizar un cajero automático, las personas tienen tres oportunidades para escribir su clave NIP para tener acceso a un retiro. Si se detectan tres intentos el cajero retiene la tarjeta (el método también avisa al usuario, espera a que lea el mensaje y reinicia el cajero a la pantalla de inicio).

Ejercicios de codificaciones

Observa el ejemplo y completa los ejercicios.

Ejemplo

Al utilizar un cajero automático, las personas tienen tres oportunidades para escribir su clave NIP para tener acceso a un retiro. Si se detectan tres intentos el cajero retiene la tarjeta (el método también avisa al usuario, espera a que lea el mensaje y reinicia el cajero a la pantalla de inicio).

Diagrama de flujo

La estructura completa aparece en el siguiente diagrama:

esquema

if( intento==3 )

cajero.retenerTarjeta();// avisa al usuario, y regresa a la pantalla principal

Identificación de la estructura

Se trata de una condicional simple, ya que es una decisión con dos flujos que avanzan, y en el flujo de la sentencia verdadera se coloca debajo de la decisión.

esquema

if( intento==3 )

cajero.retenerTarjeta();

Decisión

La expresión booleana aparece dentro del rombo, se codifica dentro de los paréntesis de la condición.

esquema

if( intento==3 )

cajero.retenerTarjeta();

Sentencia

esquema

En este caso se trata de una sentencia única por lo que puede ponese como una sentencia sencilla:

if( intento==3 )

cajero.retenerTarjeta();

O bien, como una sentencia compuesta, agregando las llaves de un bloque (observa que no va punto y coma después de la llave de cierre).

if( intento==3 ) {

cajero.retenerTarjeta();

}

Ejercicio de arrastrar

Al implementar un método setter para cambiar el valor de la base de un triángulo, se decide implementar un algoritmo que se representa en un diagrama de flujo. Si se detecta que el parámetro value es negativo se cambia el signo.

esquema
esquema
esquema
esquema

Ejercicio de completar

Completa los espacios en blanco para que el siguiente diagrama de flujo corresponda con la codificación en Java.

esquema
if( a==0 )

System.out.println( "a debe ser distinto de cero" );

Es una estructura if()

Recuerda no cambiar el operador de comparación == con el de asignación=. En los diagramas de flujo, las comparaciones aparecen con un símbolo normal de igualdad y las asignaciones como una flecha hacia la izquierda ($\gets$);

Ejercicio de completar

Completa los espacios en blanco para que el siguiente diagrama de flujo corresponda con la codificación en Java.

La estatura de una persona adulta debe estar en metros para poder calcular su indice de masa corporal. Se considera que normalmente las estaturas se ubican entre 1.20 y 2.20 metros, sin embargo, los capturistas suelen introducir la cantidad en centimetros así que en el método getter decidió hacer una corrección si se detecta que los datos vienen en centímetros:

public void setEstatura(double value) {

if ( (120 <= value) && (value <=220) )

value = value / 100; // convertir de centímetros a metros

estatura = value;

this.calcularIMC();

}

En este caso dividimos entre 100 el valor enviado como parámetro (value) y se lo volvemos a asignar a value para realizar la conversión de centímetros a metros (100cm=1m). Recuerda que en el operador de asignación se resuelve la expresión que se encuentra del lado derecho y se asigna posteriormente a la variable del lado derecho.

Ejercicio de escritura

Escribe el código en Java que corresponde al siguiente diagrama de flujo.

Si el indice de masa corporal de una persona adulta no se ubica entre 20 y 25, el programa debe indicarle que consulte a su médico:

System.out.println( "Su indice de masa corporal es: " + persona.getIMC() );

System.out.println( "Su IMC se interpreta como: " + persona.geInterpretación IMC() );

if( persona.getIMC()<20 || persona.getIMC()>25 )

System.out.println( "Consulte a su médico" );

Se utiliza una sentencia condicional simple. Si el IMC es menor que 20 (imc<20) o el IMC es mayor que 25 (imc>25) el paciente debe darse una indicación de consultar a su médico. Como se ve previamente, el IMC se recupera con el método getIMC() sobre el objeto persona.