Condicional IF en C# [Parte 2 – Anidacion]

Como hemos visto anteriormente, podemos anidar varios IF para crear múltiples caminos y consecuencias. Esto se llama anidación y puede darse de dos maneras: agregando varios IF de manera secuencial, o poniendo un IF dentro de otro. Cualquier forma es válida, lo único que tenemos que tener en cuenta, es tratar de no abusar de ello, de encontrar la mejor forma de no programar muchos caminos dentro de tu programa. Ahora vamos a ver como se ve esto en C#.

            // IF Anidado
            if (true)
            {
                if (true)
                {
                    if (true)
                    {
                        // Hacemos algo
                    }
                }
                else
                {
                    // Hacemos otra cosa
                }
            }
            else
            {
                if (true)
                {
                    // Hacemos algo mejor
                }
                else
                {
                    // O hacemos algo peor
                }
            }

Y como se ve de manera secuencial.

            // IF secuencial

            if (true)
            {
                // Hacemos algo
            }
            else if (true)
            {
                // Hacemos otra cosa
            }
            else if (true)
            {
                // Hacemos algo mejor
            }
            else
            {
                // O no... 
            }

También podemos combinar ambos métodos y hacer cosas increíbles.

Entonces, ¿es buena práctica poner muchos IF’s? Ni si, ni no, todo depende de lo que tengas que programar, si te piden hacer un programa que requiera hacer muchas evaluaciones, no te va a quedar de otra que hacerlo. Lo que si tienes que considerar es que el código se entienda, recuerda que no vas a hacer el único programador que haga mantenimiento a ese programa. Por lo tanto, hay que invertir tiempo en hacer un buen análisis, para que nuestro código quede lo más óptimo posible.


Vamos a los ejercicios que no hay nada más que explicar en la teoría.

Ejercicio 1. Cree un programa que calcule el descuento en las compras de un supermercado. Considerar las siguientes premisas.

  • Si el producto se compró el día sábado, se debe aplicar el 3% de descuento.
  • Si el producto se compró el día domingo, se debe aplicar el 5% de descuento.
  • Si se compró otro día, se debe aplicar el 8% de descuento.
  • Si el producto es de tipo electrodoméstico, se aplicará 2% más al descuento.
  • Si el producto es de tipo gamer, se aplicará el 5% más al descuento.
  • Si el producto es de tipo ferretería, se aplicará el 4% más al descuento.

Solicitar la fecha de compra, el tipo de producto y el valor total de compra. Mostrar el total de descuento, y el valor neto a pagar.

using System;

namespace CondicionalAnidada1
{
    class Program
    {
        static void Main(string[] args)
        {
            // Declaramos nuestras variables.
            int type;
            DateTime date;
            double productPrice;
            double discount = 0; // Iniciamos en 0 porque será una sumatoria.
            double discountValue;
            double total;

            // Solicitamos al usuario que ingrese los datos correspondientes.
            Console.Write("Ingrese la fecha de compra (dd/mm/yyyy): ");
            // Validamos si el formato es correcto.
            if(DateTime.TryParse(Console.ReadLine(), out date))
            {
                // La validación es correcta.
                // Ahora validamos que día es.
                if ((int)date.DayOfWeek == 6)
                {
                    discount = discount + 3;
                    
                }
                else if((int)date.DayOfWeek == 0) // Domingo es 0 en idioma gringo.
                {
                    discount = discount + 5;
                }
                else
                {
                    discount = discount + 8;
                }
            }
            else
            {
                // Si no es correcta, dejamos un mensaje y terminamos el programa.
                Console.WriteLine("Ingrese una fecha correcta.");
                Environment.Exit(1);
            }

            // Solicitamos el tipo de producto.
            Console.WriteLine("Opciones 1. Electrodoméstico || 2. Gamer || 3. Ferretería ");
            Console.Write("Ingrese el número de opción: ");
            if (int.TryParse(Console.ReadLine(), out type))
            {
                // Validamos que ha ingresado un número correcto.
                // Ahora validaremos si ha ingresado una opción correcta.
                if (type == 1)
                {
                    discount = discount + 2;
                }
                else if (type == 2)
                {
                    discount = discount + 5;
                }
                else if (type == 3)
                {
                    discount = discount + 4;
                }
            }
            else
            {
                Console.WriteLine("Ingrese una opción correcta.");
                Environment.Exit(1);
            }

            Console.Write("Ingrese precio del producto: ");
            // Podriamos valdiar con el tryparse, pero solo lo convertimos ya que no vamos a hacer algo adicional.
            productPrice = double.Parse(Console.ReadLine());

            // Calculamos el valor del descuento.
            discountValue = Math.Round(productPrice * (discount / 100), 2);

            // Calculamos el total, restando el precio del producto con el valor del descuento.
            total = productPrice - discountValue;

            // Realizamos la impresión de nuestros resultados.
            Console.WriteLine("Estimado cliente, el valor final de su producto es el siguiente:");
            Console.WriteLine("Precio:" + productPrice.ToString());
            Console.WriteLine("Descuento (" + discount + "%): " + discountValue.ToString());
            Console.WriteLine("Total: " + total.ToString());


        }   
    }
}

Ejecutamos el código y validamos si todo funciona correctamente.

¿Te funcionó? ¡Felicidades! Vamos por un ejercicio más.


Ejercicio 2. Cree un programa que muestre un mensaje en base a las siguientes condiciones.

  • Si el promedio final de un alumno es menor o igual que 5, indicar que está «Desaprobado».
  • Si el promedio final de un alumno es menor o igual que 10, indicar que está «Vacacional».
  • Si el promedio final de un alumno es menor o igual que 15, indicar que «Requiere mejorar».
  • Si el promedio final de un alumno es menor o igual que 20, indicar que «Supera las expectativas».
  • Si el promedio final está fuera del rango de 1 a 20, indicar al usuario que debe ingresar un promedio correcto.

El programa debe pedir el promedio final del alumno, y mostrar su estado.

using System;

namespace CondicionalAnidada2
{
    class Program
    {
        static void Main(string[] args)
        {
            // Declaramos nuestras variables
            double finalProm;
            string state = "Error"; // Inicializamos en vacío.

            // Solicitamos el promedio final del alumno.
            Console.Write("Ingrese el promedio final del alumno: ");
            finalProm = double.Parse(Console.ReadLine());

            // Evaluamos el promedio.
            if (finalProm >= 0)
            {
                if(finalProm <= 5)
                {
                    state = "Desaprobado";
                }
                else
                {
                    if(finalProm <= 10)
                    {
                        state = "Vacacional";
                    }
                    else
                    {
                        if(finalProm <= 15)
                        {
                            state = "Requiere mejorar";
                        }
                        else
                        {
                            if(finalProm <= 20)
                            {
                                state = "Supera las expectativas";
                            }
                            else
                            {
                                Console.WriteLine("Ingrese un promedio correcto.");
                            }
                        }
                    }
                }
            }
            else
            {
                Console.WriteLine("Ingrese un promedio correcto.");
            }

            Console.WriteLine("El estado del alumno es: " + state);
        }
    }
}

El ejercicio se puede resolver de muchas formas, pero he decidido usar IF anidado. Ahora ejecutamos para ver si funciona.

Si no tuviste ningún problema, ¡perfecto! Ahora te toca a ti.


Ejercicio 3. Cree un programa que pida como opciones calcular el área de un cuadrado, de un círculo, de un triángulo y de un trapecio. Luego que pida los datos correspondientes por opción. Validar de que ingrese una opción correcta.

Ejercicio 4. Cree un programa que asigne el número de asiento de un avión, según el tipo de ticket. Ticket turista (Asientos entre 1 al 20), Ticket económico (Asientos entre 21 al 40), Ticket general (Asientos entre 41 al 50) , Ticket business (asientos entre el 51 y 60). Además, por cada clase, el pasajero puede elegir un tipo de menú. Ticket turista (1 tipo de menú), Ticket económico (2 tipos de menú), Ticket general (3 tipos de menú), Ticket business (4 tipos de menú). El programa debe imprimir el número de asiento y el menú elegido por el pasajero.


Espero que el contenido de esta clase te haya servido de mucho, y si aún tienes dudas, o algo no está claro, déjanos tu comentario para tenerlo en cuenta y explayarnos un poco más (o corregir) en caso sea necesario.

Nos sería de mucha ayuda que compartas el contenido si te ha gustado y te invitamos a seguirnos en nuestras redes sociales de Clase13, estamos en Facebook, Instagram y Twitter como @Clase13lat, de esa manera te enterarás de las últimas novedades de manera rápida. También te invito a seguirme en Instagram como @rodolfopenia donde estaré subiendo contenido adicional para complementar la clase.