Example #1
0
        static void Main(string[] args)
        {
            try
            {
                var espacio = new Espacio(new List <Planeta>
                {
                    new Planeta(500, 1, true, "Ferengi"),
                    new Planeta(1000, 5, false, "Vulcano"),
                    new Planeta(2000, 3, true, "Betasoide")
                });

                var builder = new SqlConnectionStringBuilder();
                builder.DataSource     = "servidor-meli-clima.database.windows.net";
                builder.UserID         = "admin-meli";
                builder.Password       = "******";
                builder.InitialCatalog = "clima";
                using (var connection = new SqlConnection(builder.ConnectionString))
                {
                    connection.Open();
                    using (var command = new SqlCommand())
                    {
                        command.Connection = connection;
                        for (var i = 0; i < 3652; ++i)
                        {
                            espacio.CalcularClima();
                            var sql = new StringBuilder();
                            sql.Append("insert into dias(diaId, tipoClimaId) values(");
                            sql.Append(espacio.DiaActual);
                            sql.Append(",");
                            sql.Append((int)espacio.TipoPeriodo);
                            sql.Append(");");
                            command.CommandText = sql.ToString();
                            command.ExecuteNonQuery();

                            espacio.AvanzarDia();
                        }
                    }
                }
            }
            catch (SqlException e)
            {
                Console.WriteLine(e.ToString());
            }

            Console.WriteLine("Terminado.");
            Console.ReadLine();
        }
Example #2
0
        /// <summary>
        /// Simula la evolución del sistema solar por una cantidad de días, y registra datos
        /// sobre los períodos climáticos.
        /// </summary>
        /// <param name="dias">Cantidad de días de la simulación. Se parte desde el día 0.</param>
        /// <param name="angulo1">Ángulo inicial del primer planeta (500km)</param>
        /// <param name="angulo2">Ángulo inicial del segundo planeta (1000km)</param>
        /// <param name="angulo3">Ángulo inicial del tercer planeta (2000km)</param>
        public static void Simular(
            int dias,
            double angulo1 = 0,
            double angulo2 = 0,
            double angulo3 = 0)
        {
            if (dias <= 0)
            {
                throw new ArgumentException("La cantidad de días debe ser mayor a 0.");
            }

            var espacio = new Espacio(new List <Planeta>
            {
                new Planeta(500, 1, true, "Ferengi", angulo1),
                new Planeta(1000, 5, false, "Vulcano", angulo2),
                new Planeta(2000, 3, true, "Betasoide", angulo3)
            });

            // Para registrar el valor máximo de intensidad de lluvia en toda la simulación.
            var intensidadMaximaLluvia = 0d;
            // Flags para determinar en qué período climático se encuentra la simulación.
            var periodoSequia = false;
            var periodoLluvia = false;
            var periodoCOPT   = false;
            // Lista de períodos donde se registra toda la información que se imprime al final de la simulación.
            var periodos = new List <Periodo>();

            // Por cada día, se analiza si hay que abrir o cerrar un período climático.
            for (var i = 0; i < dias; ++i)
            {
                espacio.CalcularClima();
                if (espacio.Sequia)
                {
                    if (!periodoSequia)
                    {
                        // Cerrar período anterior si estaba abierto.
                        if (periodos.Count > 0 && !periodos[periodos.Count - 1].DiaFinal.HasValue)
                        {
                            periodos[periodos.Count - 1].DiaFinal = espacio.DiaActual - 1;
                            periodoLluvia          = false;
                            periodoCOPT            = false;
                            intensidadMaximaLluvia = 0;
                        }

                        // Comienza período de sequía
                        periodoSequia = true;
                        periodos.Add(new Periodo(espacio.DiaActual, TipoPeriodo.Sequia));
                    }
                    // Si ya estaba en período de sequía, sigue acumulando días.
                }
                else if (espacio.Lluvia)
                {
                    if (!periodoLluvia)
                    {
                        // Cerrar período anterior si estaba abierto.
                        if (periodos.Count > 0 && !periodos[periodos.Count - 1].DiaFinal.HasValue)
                        {
                            periodos[periodos.Count - 1].DiaFinal = espacio.DiaActual - 1;
                            periodoSequia = false;
                            periodoCOPT   = false;
                        }

                        // Comienza período de lluvia
                        periodoLluvia = true;
                        periodos.Add(new Periodo(espacio.DiaActual, TipoPeriodo.Lluvia));
                    }

                    // Se va actualizando la intensidad pico día a día.
                    if (espacio.IntensidadLluvia > intensidadMaximaLluvia)
                    {
                        intensidadMaximaLluvia = espacio.IntensidadLluvia;
                        periodos[periodos.Count - 1].DiaPicoIntensidadLluvia = espacio.DiaActual;
                        periodos[periodos.Count - 1].IntensidadLluvia        = intensidadMaximaLluvia;
                    }
                    // Si ya estaba en período de lluvia, sigue acumulando días.
                }
                else if (espacio.COPT)
                {
                    if (!periodoCOPT)
                    {
                        // Cerrar período anterior si estaba abierto.
                        if (periodos.Count > 0 && !periodos[periodos.Count - 1].DiaFinal.HasValue)
                        {
                            periodos[periodos.Count - 1].DiaFinal = espacio.DiaActual - 1;
                            periodoSequia          = false;
                            periodoLluvia          = false;
                            intensidadMaximaLluvia = 0;
                        }

                        // Comienza período de COPT
                        periodoCOPT = true;
                        periodos.Add(new Periodo(espacio.DiaActual, TipoPeriodo.COPT));
                    }
                    // Si ya estaba en período de COPT, sigue acumulando días.
                }
                else
                {
                    // Cerrar período anterior si estaba abierto.
                    if (periodos.Count > 0 && !periodos[periodos.Count - 1].DiaFinal.HasValue)
                    {
                        periodos[periodos.Count - 1].DiaFinal = espacio.DiaActual - 1;
                        periodoSequia          = false;
                        periodoLluvia          = false;
                        periodoCOPT            = false;
                        intensidadMaximaLluvia = 0;
                    }
                }

                espacio.AvanzarDia();
            }

            Print(periodos);
        }