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(); }
/// <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); }