5 - Estructura condicional if

Cuando hay que tomar una decisión aparecen las estructuras condicionales. En nuestra vida diaria se nos presentan situaciones donde debemos decidir.
¿Elijo la carrera A o la carrera B?
¿Me pongo este pantalón?
Para ir al trabajo, ¿elijo el camino A o el camino B?
Al cursar una carrera, ¿elijo el turno mañana, tarde o noche?

Estructura condicional simple

Cuando se presenta la elección tenemos la opción de realizar una actividad o no realizar ninguna.

Representación gráfica:

estructura condicional simple en Kotlin

Podemos observar: El rombo representa la condición. Hay dos opciones que se pueden tomar. Si la condición da verdadera se sigue el camino del verdadero, o sea el de la derecha, si la condición da falsa se sigue el camino de la izquierda.

Se trata de una estructura CONDICIONAL SIMPLE porque por el camino del verdadero hay actividades y por el camino del falso no hay actividades.

Por el camino del verdadero pueden existir varias operaciones, entradas y salidas, inclusive ya veremos que puede haber otras estructuras condicionales.

Problema 1

Ingresar el sueldo de una persona, si supera los 3000 pesos mostrar un mensaje en pantalla indicando que debe abonar impuestos.

Proyecto10 - Principal.kt


fun main(parametro: Array<String>) {
    print("Ingrese el sueldo del empleado:")
    val sueldo = readLine()!!.toDouble()
    if (sueldo > 3000) {
        println("Debe pagar impuestos")
    }
}

La palabra clave "if" indica que estamos en presencia de una estructura condicional; seguidamente disponemos la condición entre paréntesis. Por último encerrada entre llaves las instrucciones de la rama del verdadero.

Es necesario que las instrucciones a ejecutar en caso que la condición sea verdadera estén encerradas entre llaves { }, con ellas marcamos el comienzo y el fin del bloque del verdadero.

Pero hay situaciones donde si tenemos una sola instrucción por la rama del verdadero podemos obviar las llaves y hacer nuestro código más conciso:

    if (sueldo > 3000) 
        println("Debe pagar impuestos")

En los problemas de aquí en adelante no dispondremos las llaves si tenemos una sola instrucción.

Ejecutando el programa e ingresamos un sueldo superior a 3000 pesos. Podemos observar como aparece en pantalla el mensaje "Debe pagar impuestos", ya que la condición del if es verdadera.

Volvamos a ejecutar el programa y carguemos un sueldo menor o igual a 3000 pesos. No debe aparecer mensaje en pantalla.

Estructura condicional compuesta

Cuando se presenta la elección tenemos la opción de realizar una actividad u otra. Es decir tenemos actividades por el verdadero y por el falso de la condición. Lo más importante que hay que tener en cuenta que se realizan las actividades de la rama del verdadero o las del falso, NUNCA se realizan las actividades de las dos ramas.

Representación gráfica:

estructura condicional compuesta en Kotlin

En una estructura condicional compuesta tenemos entradas, salidas, operaciones, tanto por la rama del verdadero como por la rama del falso.

Problema 2

Realizar un programa que solicite ingresar dos números enteros distintos y muestre por pantalla el mayor de ellos (suponemos que el operador del programa ingresa valores distintos, no valida nuestro programa dicha situación)

Proyecto11 - Principal.kt


fun main(parametro: Array<String>) {
    print("Ingrese primer valor:")
    val valor1 = readLine()!!.toInt()
    print("Ingrese segundo valor:")
    val valor2 = readLine()!!.toInt()
    if (valor1 > valor2)
        print("El mayor valor es $valor1")
    else
        print("El mayor valor es $valor2")
}

Se hace la entrada de valor1 y valor2 por teclado. Para saber cual variable tiene un valor mayor preguntamos si el contenido de valor1 es mayor (>) que el contenido de valor2 en un if, si la respuesta es verdadera imprimimos el contenido de valor1, en caso que la condición sea falsa se ejecuta la instrucción seguida a la palabra clave else donde mostramos el contenido de valor2:

    if (valor1 > valor2)
        print("El mayor valor es $valor1")
    else
        print("El mayor valor es $valor2")

Como podemos observar nunca se imprimen valor1 y valo2 simultáneamente.

Las llaves son opcionales porque tenemos una sola actividad por cada rama del if, en forma alternativa podemos escribir:

    if (valor1 > valor2) {
        print("El mayor valor es $valor1")
    }
    else {
        print("El mayor valor es $valor2")
    }

Operadores

En una condición deben disponerse únicamente variables, valores constantes y operadores relacionales.

Operadores Relacionales:

>  (mayor)	
<  (menor)
>= (mayor o igual)
<= (menor o igual)
== (igual)
!= (distinto)
+ (más)
- (menos)
* (producto)
/ (división)
% (resto de una división)  Ej.:  x = 13 % 5  {se guarda 3}

Hay que tener en cuenta que al disponer una condición debemos seleccionar que operador relacional se adapta a la pregunta.

Ejemplos:

	Se ingresa un número multiplicarlo por 10 si es distinto a 0.   (!=)
	Se ingresan dos números mostrar una advertencia si son iguales.  (==)

Los problemas que se pueden presentar son infinitos y la correcta elección del operador sólo se alcanza con la práctica intensiva en la resolución de problemas.

Problema 3

Se ingresan por teclado 2 valores enteros. Si el primero es menor al segundo calcular la suma y la resta, luego mostrarlos, sino calcular el producto y la división.

Proyecto12 - Principal.kt


fun main(parametro: Array<String>) {
    print("Ingrese el primer valor:")
    val valor1 = readLine()!!.toInt()
    print("Ingrese el segundo valor:")
    val valor2 = readLine()!!.toInt()
    if (valor1 < valor2) {
        val suma = valor1 + valor2
        val resta = valor1 - valor2
        println("La suma de los dos valores es: $suma")
        println("La resta de los dos valores es: $resta")
    } else {
        val producto = valor1 * valor2
        val division = valor1 / valor2
        println("El producto de los dos valores es: $producto")
        println("La división de los dos valores es: $division")
    }
}

En este problema tenemos varias actividades por la rama del verdadero del if por lo que las llaves son obligatorias:

    if (valor1 < valor2) {
        val suma = valor1 + valor2
        val resta = valor1 - valor2
        println("La suma de los dos valores es: $suma")
        println("La resta de los dos valores es: $resta")
    } else {
        val producto = valor1 * valor2
        val division = valor1 / valor2
        println("El producto de los dos valores es: $producto")
        println("La división de los dos valores es: $division")
    }

La misma situación se produce por la rama del falso, es decir por el else debemos encerrar obligatoriamente con las llaves el bloque.

Problemas propuestos

  • Se ingresan tres notas de un alumno, si el promedio es mayor o igual a siete mostrar un mensaje "Promocionado".
  • Se ingresa por teclado un número entero comprendido entre 1 y 99, mostrar un mensaje indicando si el número tiene uno o dos dígitos.

    (Tener en cuenta que condición debe cumplirse para tener dos dígitos, un número entero)
Solución
Proyecto13


fun main(parametro: Array<String>) {
    print("Ingrese primer nota:")
    val nota1 = readLine()!!.toInt()
    print("Ingrese segunda nota:")
    val nota2 = readLine()!!.toInt()
    print("Ingrese tercer nota:")
    val nota3 = readLine()!!.toInt()
    var promedio = (nota1 + nota2 + nota3) / 3
    if (promedio >= 7)
        println("Promocionado")
}




Proyecto14

fun main(parametro: Array<String>) {
    print("Ingrese un valor comprendido entre 1 y 99:")
    val num = readLine()!!.toInt()
    if (num < 10)
        println("Tiene un dígito")
    else
        println("Tiene dos dígitos")
}