// Bloques.cs
// Versión 1.0
// Fecha: 6-Enero-2003
// Autor: Juan Manuel Cueva Lovelle
// Ilustra el uso de bloques y el control de flujo

using System;
using System.Collections; //Para usar ArrayList


namespace BloquesControlFlujo
{
    /// <summary>
    /// Ilustra el uso de Bloques de Código y el control de flujo
    /// </summary>
    class Bloques
    {
        /// <summary>
        /// Punto de entrada principal de la aplicación.
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {
            // Ámbito y bloques
            int i=10; //Declaración en bloque padre
            {
            //int i=20;
            //Error i está declarado en el bloque padre

            Console.WriteLine("Esta i vale {0}",i);
            }

            //Si es correcto lo siguiente
            //Declaración en bloques hermanos
                {
                 int j=27;
                 Console.WriteLine("Esta j vale {0}",j);
                }
                {
                 int j=44;
                 Console.WriteLine("Otra j vale {0}",j);
                }

            // Ilustra el if simple
            {
            Console.Write("Dame un entero: ");
            string temp =Console.ReadLine();
            int entero = Int32.Parse(temp);
            if (entero % 2 ==0)
                Console.WriteLine("{0} es par", entero);
            else
                Console.WriteLine("{0} es impar", entero);

            // Ilustra el if en cascada

            if (entero % 2 ==0)
                Console.WriteLine("{0} es múltiplo de 2", entero);
            else if (entero % 3 ==0)
                Console.WriteLine("{0} es múltiplo de 3", entero);
            else if (entero % 5 ==0)
                Console.WriteLine("{0} es múltiplo de 5", entero);
            else if (entero % 7 ==0)
                Console.WriteLine("{0} es múltiplo de 7", entero);
            else
                Console.WriteLine("{0} no es múltiplo de 2,3,5,7", entero);
            }
            // Ilustra switch y goto
            {
            //Etiqueta para goto
            InicioCafe:
            Console.WriteLine("Máquina de café y té: 0=Té 1=Solo 2=Cortado 3=Con Leche");
            Console.Write("Por favor seleccione el código: ");
            string s = Console.ReadLine();
            int n = int.Parse(s);
            int coste = 0;
            switch(n)      
            {        
                case 0:        
                case 1:  
                    coste += 25;
                    break;
                case 2:
                    coste += 25;
                    goto case 1;          
                case 3:
                    coste += 50;
                    goto case 1;        
                default:
                    Console.WriteLine("Selección no válida.");
                    goto InicioCafe;
            }
            if (coste != 0)
                Console.WriteLine("Por favor inserte {0} céntimos de Euro.", coste);
            Console.WriteLine("Gracias");
            }
            // switch con string
            {
            InicioBebida:
            Console.WriteLine("Máquina de bebida: 0=Tónica 1=Cerveza 2=Cachi 3=Cachi-Cachi");
            Console.Write("Por favor seleccione el código: ");
            string s = Console.ReadLine();

            int coste = 0;
            switch(s)      
            {        
                case "0"":        
                case "1"":  
                    coste += 25;
                    break;
                case "2"":
                    coste += 25;
                    goto case "1";          
                case "3"":
                    coste += 50;
                    goto case "1";        
                default:
                    Console.WriteLine("Selección no válida.");
                    goto InicioBebida;
            }
            if (coste != 0)
                Console.WriteLine("Por favor inserte {0} céntimos de Euro.", coste);
            Console.WriteLine("Gracias");
            //Espera una tecla
            Console.ReadLine();
            }

            // Ilustra while
            Console.WriteLine("Ilustra while");

            int contador = 1;

            while (contador < 6)
            {
                Console.WriteLine("contador vale {0}", contador);
                contador++;
            }
            //Espera una tecla
            Console.ReadLine();

            // Ilustra do-while
            Console.WriteLine("Ilustra do-while");
            int x = 0;

            do
            {
                Console.WriteLine("x vale {0}",x);
                x++;
            }
            while(x < 5);
            //Espera una tecla
            Console.ReadLine();

            // Ilustra for
            Console.WriteLine("Ilustra for");
            for (int k = 1; k <= 5; k++)
                Console.WriteLine(k);
            //Espera una tecla
            Console.ReadLine();

            // Ilustra foreach para Colecciones
            {
            Console.WriteLine("Ilustra foreach");
            ArrayList enteros = new ArrayList();

                for (int indice=0;indice<10;indice++)
                    enteros.Add(indice*2);

                foreach (int entero in enteros)
                    Console.WriteLine(entero);

                //Espera una tecla
                Console.ReadLine();
            }
            // Ilustra continue
            Console.WriteLine("Ilustra continue");
            for (int m = 1; m <= 10; m++)
            {
                if (m < 9)
                    continue;
                Console.WriteLine(m); //Escribe 9 10
            }
            //Espera una tecla
            Console.ReadLine();

            // Ilustra break
            Console.WriteLine("Ilustra break");
            long p=0;
            while (true)
            {
                Console.WriteLine(p++);
                if (p>10) break;
            }

            //Espera una tecla
            Console.ReadLine();

        }// Fin de Main
    }// Fin de la clase Bloques
} //Fin del namespace