7 - Estructuras condicionales anidadas

Decimos que una estructura condicional es anidada cuando por la rama del verdadero o el falso de una estructura condicional hay otra estructura condicional.

estructura condicional anidada Kotlin

El diagrama de flujo que se presenta contiene dos estructuras condicionales. La principal se trata de una estructura condicional compuesta y la segunda es una estructura condicional simple y está contenida por la rama del falso de la primer estructura.
Es común que se presenten estructuras condicionales anidadas aún más complejas.

Problema 1

Confeccionar un programa que pida por teclado tres notas de un alumno, calcule el promedio e imprima alguno de estos mensajes:
Si el promedio es >=7 mostrar "Promocionado".
Si el promedio es >=4 y <7 mostrar "Regular".
Si el promedio es <4 mostrar "Reprobado".

Proyecto18 - Principal.kt

fun main(parametros: Array<String>) {
    print("Ingrese primer nota:")
    val nota1 = readln().toInt()
    print("Ingrese segunda nota:")
    val nota2 = readln().toInt()
    print("Ingrese tercer nota:")
    val nota3 = readln().toInt()
    val promedio = (nota1 + nota2 + nota3) / 3
    if (promedio >= 7)
        print("Promocionado")
    else
        if (promedio >= 4)
            print("Regular")
        else
            print("Libre")
}

Primero preguntamos si el promedio es superior o igual a 7, en caso afirmativo va por la rama del verdadero del if mostrando un mensaje que indica "Promocionado" (con comillas indicamos un texto que debe imprimirse en pantalla).
En caso que la condición nos de falso, por la rama del falso aparece otra estructura condicional if, porque todavía debemos averiguar si el promedio del alumno es superior o igual a cuatro o inferior a cuatro.

Estamos en presencia de dos estructuras condicionales compuestas.

En ninguno de los bloques del verdadero y falso de los dos if hemos dispuesto llaves de apertura y cerrado debido a que hay una sola instrucción en el mismo.

Si utilizamos if como expresiones podemos codificar el mismo programa en forma más concisa con el siguiente código:

Proyecto18 - Principal.kt

fun main(parametros: Array<String>) {
    print("Ingrese primer nota:")
    val nota1 = readln().toInt()
    print("Ingrese segunda nota:")
    val nota2 = readln().toInt()
    print("Ingrese tercer nota:")
    val nota3 = readln().toInt()
    val promedio = (nota1 + nota2 + nota3) / 3
    val estado = if (promedio >= 7) "Promocionado" else if (promedio >= 4) "Regular" else "Libre"
    print("Estado del alumno $estado")
}

Problemas propuestos

  • Se cargan por teclado tres números distintos. Mostrar por pantalla el mayor de ellos.
  • Se ingresa por teclado un valor entero, mostrar una leyenda que indique si el número es positivo, nulo o negativo.
  • Confeccionar un programa que permita cargar un número entero positivo de hasta tres cifras y muestre un mensaje indicando si tiene 1, 2, o 3 cifras. Mostrar un mensaje de error si el número de cifras es mayor.
  • Un postulante a un empleo, realiza un test de capacitación, se obtuvo la siguiente información: cantidad total de preguntas que se le realizaron y la cantidad de preguntas que contestó correctamente. Se pide confeccionar un programa que ingrese los dos datos por teclado e informe el nivel del mismo según el porcentaje de respuestas correctas que ha obtenido, y sabiendo que:

    	Nivel máximo:	Porcentaje>=90%.
    	Nivel medio:	Porcentaje>=75% y <90%.
    	Nivel regular:	Porcentaje>=50% y <75%.
    	Fuera de nivel:	Porcentaje<50%.
    
    
Solución
Proyecto19

fun main(parametro: Array<String>) {
    print("Ingrese primer valor:")
    val valor1 = readln().toInt()
    print("Ingrese segundo valor:")
    val valor2 = readln().toInt()
    print("Ingrese tercer valor:")
    val valor3 = readln().toInt()
    if (valor1 > valor2)
        if (valor1 > valor3)
            print(valor1)
        else
            print(valor3)
     else
        if (valor2 > valor3)
            print(valor2)
        else
            print(valor3)
}




Proyecto20

fun main(parametro: Array<String>){
    print("Ingrese un valor entero:")
    val valor = readln().toInt()
    if (valor == 0)
        println("Se ingresó el cero")
    else
        if (valor > 0)
            println("Se ingresó un valor positivo")
        else
            println("Se ingresó un valor negativo")
}




Proyecto21

fun main(parametro: Array<String>) {
    print("Ingrese un valor entero con 1,2 o 3 cifras:");
    val valor = readln().toInt()
    if ( valor < 10)
        println("Tiene un dígito")
    else
        if ( valor < 100)
            println("Tiene dos dígitos")
        else
            if ( valor < 1000)
                println("Tiene tres dígitos")
            else
                println("Error en la entrada de datos.")
}




Proyecto22

fun main(parametro: Array<String>) {
    print("Ingrese la cantidad total de preguntas del examen:")
    val totalPreguntas = readln().toInt()
    print("Ingrese la cantidad total de preguntas contestadas correctamente:")
    val totalCorrectas = readln().toInt()
    val porcentaje = totalCorrectas * 100 / totalPreguntas;
    if ( porcentaje >= 90)
        println("Nivel máximo")
    else
        if (porcentaje >= 75)
            System.out.print("Nivel medio")
        else
            if ( porcentaje >= 50)
                println("Nivel regular")
            else
                println("Fuera de nivel")
}