internal static string ObtenerLinea(int cantidad, decimal area, decimal perimetro, Idioma idioma, ITraducirForma ITraducirForma)
        {
            if (cantidad > 0)
            {
                var traduccion = String.Empty;
                traduccion = ITraducirForma.TraducirForma(cantidad, idioma);

                return(idioma.getLinea(cantidad, traduccion, area, perimetro));
            }
            return(string.Empty);
        }
예제 #2
0
 public Impresion(List <FormaGeometricaBase> formas, Idioma idioma)
 {
     _formas = formas;
     _idioma = idioma;
     InicializarTextos();
 }
 public abstract string TraducirForma(int cantidad, Idioma idioma);
        public static string Imprimir(IList <FormaGeometrica> formas, Idioma idioma)
        {
            var sb = new StringBuilder();

            if (!formas.Any())
            {
                sb.Append($"<h1>{idioma.getListaVaciaFormas()}</h1>");
            }
            else
            {
                // Hay por lo menos una forma
                // HEADER
                sb.Append($"<h1>{idioma.getListaFormasHeader()}</h1>");

                var numeroCuadrados  = 0;
                var numeroCirculos   = 0;
                var numeroTriangulos = 0;

                var areaCuadrados  = 0m;
                var areaCirculos   = 0m;
                var areaTriangulos = 0m;

                var perimetroCuadrados  = 0m;
                var perimetroCirculos   = 0m;
                var perimetroTriangulos = 0m;

                foreach (var forma in formas)
                {
                    if (forma.GetType() == typeof(Cuadrado))
                    {
                        numeroCuadrados++;
                        areaCuadrados      += forma.CalcularArea();
                        perimetroCuadrados += forma.CalcularPerimetro();
                    }
                    if (forma.GetType() == typeof(Circulo))
                    {
                        numeroCirculos++;
                        areaCirculos      += forma.CalcularArea();
                        perimetroCirculos += forma.CalcularPerimetro();
                    }
                    if (forma.GetType() == typeof(TrianguloEquilatero))
                    {
                        numeroTriangulos++;
                        areaTriangulos      += forma.CalcularArea();
                        perimetroTriangulos += forma.CalcularPerimetro();
                    }
                }

                sb.Append(ObtenerLinea(numeroCuadrados, areaCuadrados, perimetroCuadrados, idioma, new Cuadrado()));
                sb.Append(ObtenerLinea(numeroCirculos, areaCirculos, perimetroCirculos, idioma, new Circulo()));
                sb.Append(ObtenerLinea(numeroTriangulos, areaTriangulos, perimetroTriangulos, idioma, new TrianguloEquilatero()));

                // FOOTER
                sb.Append($"{idioma.getTotal()}:<br/>");
                sb.Append(numeroCuadrados + numeroCirculos + numeroTriangulos + " " + idioma.getFormas() + " ");
                sb.Append(idioma.getPerimetro() + (perimetroCuadrados + perimetroTriangulos + perimetroCirculos).ToString("#.##") + " ");
                sb.Append("Area " + (areaCuadrados + areaCirculos + areaTriangulos).ToString("#.##"));
            }

            return(sb.ToString());
        }
예제 #5
0
        private static string Totales(Dictionary <string, Resultado> resultadoDeFiguras, Idioma idioma, List <FiguraGeometrica> formas)
        {
            StringBuilder sb             = new StringBuilder();
            decimal       perimetroTotal = 0;
            decimal       areaTotal      = 0;

            foreach (var figura in resultadoDeFiguras.Values)
            {
                sb.Append(ObtenerLinea(figura, idioma));
                perimetroTotal += figura.PerimetroTotal;
                areaTotal      += figura.AreaTotal;
            }

            sb.Append(idioma.Total).Append(":<br/>");
            sb.Append(formas.Count).Append(" ").Append(idioma.Formas).Append(" ");
            sb.Append(idioma.Perimetro).Append(" ").Append((perimetroTotal).ToString("#.##")).Append(" ");
            sb.Append(idioma.Area).Append(" ").Append((areaTotal).ToString("#.##"));

            return(sb.ToString());
        }
        private static string ObtenerLinea(Idioma idioma, IEnumerable <FormaGeometrica> listaDeFormas, decimal perimetro, decimal area)
        {
            string nombreDeLaFigura = listaDeFormas.Count() == 1 ? idioma.Traducir(listaDeFormas.First().Nombre()): idioma.Traducir(listaDeFormas.First().NombrePlural());

            return($"{listaDeFormas.Count()} {nombreDeLaFigura} | {idioma.Traducir("Area")} {area:#.##} | {idioma.Traducir("Perimetro")} {perimetro:#.##} <br/>");
        }
예제 #7
0
 public override void AsignarNombresAForma(Idioma idioma)
 {
     nombreFormaSingular = idioma.ImprimirNombreCuadrado(1);
     nombreFormaPlural   = idioma.ImprimirNombreCuadrado(2);
 }
예제 #8
0
 private static string TraducirForma(string figura, int cantidad, Idioma idioma)
 {
     return(cantidad == 1 ? idioma.TraduccionFiguras[figura] : idioma.TraduccionFiguras[figura + "s"]);
 }
        public static string Imprimir(List <FormaGeometrica> formas, int idioma)
        {
            var sb = new StringBuilder();

            if (!formas.Any())
            {
                //FORMAS VACIO
                sb.Append(Idioma.formas_Lista(idioma));
            }
            //AUNQUE SEA UNA FORMA
            else
            {
                sb.Append(Idioma.formas_Reporte(idioma));

                //CALCULO FORMAS
                var numeroCuadrados    = 0;
                var areaCuadrados      = 0m;
                var perimetroCuadrados = 0m;

                var numeroCirculos    = 0;
                var areaCirculos      = 0m;
                var perimetroCirculos = 0m;

                var numeroTriangulos    = 0;
                var areaTriangulos      = 0m;
                var perimetroTriangulos = 0m;

                var numeroTrapecio    = 0;
                var areaTrapecio      = 0m;
                var perimetroTrapecio = 0m;

                var numeroRectangulo    = 0;
                var areaRectangulo      = 0m;
                var perimetroRectangulo = 0m;

                for (var i = 0; i < formas.Count; i++)
                {
                    if (formas[i].Tipo == Cuadrado)
                    {
                        numeroCuadrados++;
                        areaCuadrados      += Calculos.CalcularArea(formas[i], formas[i]._lado, formas[i]._bamayor, formas[i]._bamenor, formas[i]._alturas, formas[i]._brectan);
                        perimetroCuadrados += Calculos.CalcularPerimetro(formas[i], formas[i]._lado, formas[i]._bamayor, formas[i]._bamenor, formas[i]._alturas, formas[i]._brectan);
                    }
                    if (formas[i].Tipo == Circulo)
                    {
                        numeroCirculos++;
                        areaCirculos      += Calculos.CalcularArea(formas[i], formas[i]._lado, formas[i]._bamayor, formas[i]._bamenor, formas[i]._alturas, formas[i]._brectan);
                        perimetroCirculos += Calculos.CalcularPerimetro(formas[i], formas[i]._lado, formas[i]._bamayor, formas[i]._bamenor, formas[i]._alturas, formas[i]._brectan);
                    }
                    if (formas[i].Tipo == TrianguloEquilatero)
                    {
                        numeroTriangulos++;
                        areaTriangulos      += Calculos.CalcularArea(formas[i], formas[i]._lado, formas[i]._bamayor, formas[i]._bamenor, formas[i]._alturas, formas[i]._brectan);
                        perimetroTriangulos += Calculos.CalcularPerimetro(formas[i], formas[i]._lado, formas[i]._bamayor, formas[i]._bamenor, formas[i]._alturas, formas[i]._brectan);
                    }
                    if (formas[i].Tipo == Trapecio)
                    {
                        numeroTrapecio++;
                        areaTrapecio      += Calculos.CalcularArea(formas[i], formas[i]._lado, formas[i]._bamayor, formas[i]._bamenor, formas[i]._alturas, formas[i]._brectan);
                        perimetroTrapecio += Calculos.CalcularPerimetro(formas[i], formas[i]._lado, formas[i]._bamayor, formas[i]._bamenor, formas[i]._alturas, formas[i]._brectan);
                    }
                    if (formas[i].Tipo == Rectangulo)
                    {
                        numeroRectangulo++;
                        areaRectangulo      += Calculos.CalcularArea(formas[i], formas[i]._lado, formas[i]._bamayor, formas[i]._bamenor, formas[i]._alturas, formas[i]._brectan);
                        perimetroRectangulo += Calculos.CalcularPerimetro(formas[i], formas[i]._lado, formas[i]._bamayor, formas[i]._bamenor, formas[i]._alturas, formas[i]._brectan);
                    }
                }

                sb.Append(Calculos.ObtenerLinea(numeroCuadrados, areaCuadrados, perimetroCuadrados, Cuadrado, idioma));
                sb.Append(Calculos.ObtenerLinea(numeroCirculos, areaCirculos, perimetroCirculos, Circulo, idioma));
                sb.Append(Calculos.ObtenerLinea(numeroTriangulos, areaTriangulos, perimetroTriangulos, TrianguloEquilatero, idioma));
                sb.Append(Calculos.ObtenerLinea(numeroTrapecio, areaTrapecio, perimetroTrapecio, Trapecio, idioma));
                sb.Append(Calculos.ObtenerLinea(numeroRectangulo, areaRectangulo, perimetroRectangulo, Rectangulo, idioma));
                //-----------------
                // FOOTER
                sb.Append("TOTAL:<br/>");
                sb.Append(numeroCuadrados + numeroCirculos + numeroTriangulos + numeroTrapecio + numeroRectangulo + " " + Idioma.formas_tipos(idioma) + " ");
                sb.Append(Idioma.formas_Total(idioma) + (perimetroCuadrados + perimetroTriangulos + perimetroCirculos + perimetroTrapecio + perimetroRectangulo).ToString("#.##") + " ");
                sb.Append("Area " + (areaCuadrados + areaCirculos + areaTriangulos + areaTrapecio + areaRectangulo).ToString("#.##"));
            }

            return(sb.ToString());
        }
예제 #10
0
        /// <summary>
        /// Genera un reporte de formas en el idioma especificado
        /// </summary>
        /// <param name="formas">Lista de formas</param>
        /// <param name="idioma">Idioma</param>
        /// <returns></returns>
        public static string Imprimir(List <FormaGeometrica> formas, Idioma idioma)
        {
            StringBuilder sb           = new StringBuilder();
            string        codigoIdioma = ObtenerCodigoIdioma(idioma);

            List <FormaModel>        datosDeFormasEnLista = new List <FormaModel>();
            Dictionary <string, int> cantidadDeFormas     = new Dictionary <string, int>();

            try
            {
                //No hay formas
                if (!formas.Any())
                {
                    return(string.Format("<h1>{0}</h1>", Traductor.Traducir("Lista vacía de formas!", codigoIdioma)));
                }

                //Hay al menos una forma
                sb.Append(string.Format("<h1>{0}</h1>", Traductor.Traducir("Reporte de Formas", codigoIdioma)));

                foreach (IForma forma in formas)
                {
                    //Obtengo el dato de una forma y lo guardo en un modelo
                    FormaModel unaForma = new FormaModel();
                    unaForma.TipoForma = forma.GetType().Name;   //Nombre
                    unaForma.Perimetro = forma.ObtenerPerimetro; //Perímetro
                    unaForma.Area      = forma.ObtenerArea;      //Área

                    //Busco el índice de la forma en la lista por tipo
                    int index = datosDeFormasEnLista.FindIndex(a => a.TipoForma == unaForma.TipoForma);

                    //Si existe, sumo su perimetro y area para obtener el total de ese tipo de forma
                    if (index > -1)
                    {
                        datosDeFormasEnLista[index].Perimetro += unaForma.Perimetro;
                        datosDeFormasEnLista[index].Area      += unaForma.Area;
                    }
                    //Sino, la agrego a la lista
                    else
                    {
                        datosDeFormasEnLista.Add(unaForma);
                    }
                    //Verifico si la key con el tipo de forma no exista y la agrego.
                    if (!cantidadDeFormas.ContainsKey(unaForma.TipoForma))
                    {
                        cantidadDeFormas.Add(unaForma.TipoForma, 1);
                    }
                    //Si existe, sumo uno en esa key (+1 forma)
                    else
                    {
                        cantidadDeFormas[unaForma.TipoForma] += 1;
                    }
                }

                //Armo el detalle del reporte
                foreach (FormaModel forma in datosDeFormasEnLista)
                {
                    sb.Append(
                        string.Format("{0} {1} | {2}: {3} | {4}: {5} |<br/>",
                                      cantidadDeFormas[forma.TipoForma],
                                      cantidadDeFormas[forma.TipoForma] > 1 ? Traductor.Traducir(forma.TipoForma + "s", codigoIdioma) : Traductor.Traducir(forma.TipoForma, codigoIdioma),
                                      Traductor.Traducir("Perímetro", codigoIdioma),
                                      forma.Perimetro.ToString("#.##"),
                                      Traductor.Traducir("Área", codigoIdioma),
                                      forma.Area.ToString("#.##")
                                      )
                        );
                }


                // FOOTER
                sb.Append(string.Format("{0} :<br/>", Traductor.Traducir("total", codigoIdioma).ToUpper()));
                sb.Append(
                    string.Format("{0} {1}",
                                  cantidadDeFormas.Sum(x => x.Value),
                                  cantidadDeFormas.Sum(x => x.Value) > 1 ? Traductor.Traducir("Formas", codigoIdioma) : Traductor.Traducir("Forma", codigoIdioma)
                                  )
                    );
                sb.Append(Traductor.Traducir(" Perímetro", codigoIdioma) + ": " + formas.Where(x => x is IForma).Sum(x => ((IForma)x).ObtenerPerimetro).ToString("#.##"));
                sb.Append(Traductor.Traducir(" Área", codigoIdioma) + ": " + formas.Where(x => x is IForma).Sum(x => ((IForma)x).ObtenerArea).ToString("#.##"));

                return(sb.ToString());
            }
            catch (Exception e)
            {
                throw e;
            }
        }
예제 #11
0
        public static string Imprimir(List <FormasG> formas, Idioma idioma)
        {
            var sb = new StringBuilder();

            if (!formas.Any())
            {
                sb.Append(idioma.traducir("listaVacia"));
            }
            else
            {
                // Hay por lo menos una forma
                // HEADER
                sb.Append(idioma.traducir("Cabecera"));
                #region variablesFormas
                var numeroCuadrados   = 0;
                var numeroCirculos    = 0;
                var numeroTriangulos  = 0;
                var numeroTrapecios   = 0;
                var numeroRectangulos = 0;

                var areaCuadrados   = 0m;
                var areaCirculos    = 0m;
                var areaTriangulos  = 0m;
                var areaTrapecios   = 0m;
                var areaRectangulos = 0m;

                var perimetroCuadrados   = 0m;
                var perimetroCirculos    = 0m;
                var perimetroTriangulos  = 0m;
                var perimetroTrapecios   = 0m;
                var perimetroRectangulos = 0m;
                #endregion
                for (var i = 0; i < formas.Count; i++)
                {
                    if (formas[i].GetType().Equals(typeof(Cuadrado)))
                    {
                        numeroCuadrados++;
                        areaCuadrados      += formas[i].area;
                        perimetroCuadrados += formas[i].perimetro;
                    }
                    if (formas[i].GetType().Equals(typeof(Circulo)))
                    {
                        numeroCirculos++;
                        areaCirculos      += formas[i].area;
                        perimetroCirculos += formas[i].perimetro;
                    }
                    if (formas[i].GetType().Equals(typeof(TrianguloEquilatero)))
                    {
                        numeroTriangulos++;
                        areaTriangulos      += formas[i].area;
                        perimetroTriangulos += formas[i].perimetro;
                    }
                    if (formas[i].GetType().Equals(typeof(Trapecio)))
                    {
                        numeroTrapecios++;
                        areaTrapecios      += formas[i].area;
                        perimetroTrapecios += formas[i].perimetro;
                    }
                    if (formas[i].GetType().Equals(typeof(Rectangulo)))
                    {
                        numeroRectangulos++;
                        areaRectangulos      += formas[i].area;
                        perimetroRectangulos += formas[i].perimetro;
                    }
                }

                //Arreglo por error en muchos decimales
                #region redondeo
                areaCuadrados        = RedondearNumeroGrande(areaCuadrados);
                areaCirculos         = RedondearNumeroGrande(areaCirculos);
                areaTriangulos       = RedondearNumeroGrande(areaTriangulos);
                areaTrapecios        = RedondearNumeroGrande(areaTrapecios);
                areaRectangulos      = RedondearNumeroGrande(areaRectangulos);
                perimetroCuadrados   = RedondearNumeroGrande(perimetroCuadrados);
                perimetroCirculos    = RedondearNumeroGrande(perimetroCirculos);
                perimetroTriangulos  = RedondearNumeroGrande(perimetroTriangulos);
                perimetroTrapecios   = RedondearNumeroGrande(perimetroTrapecios);
                perimetroRectangulos = RedondearNumeroGrande(perimetroRectangulos);
                #endregion
                sb.Append(ObtenerLinea(numeroCuadrados, areaCuadrados, perimetroCuadrados, numeroCuadrados > 1 ? idioma.traducir("Cuadrados") : idioma.traducir("Cuadrado"), idioma));
                sb.Append(ObtenerLinea(numeroCirculos, areaCirculos, perimetroCirculos, numeroCirculos > 1 ? idioma.traducir("Circulos") : idioma.traducir("Circulo"), idioma));
                sb.Append(ObtenerLinea(numeroTriangulos, areaTriangulos, perimetroTriangulos, numeroTriangulos > 1 ? idioma.traducir("Triangulos") : idioma.traducir("Triangulo"), idioma));
                sb.Append(ObtenerLinea(numeroTrapecios, areaTrapecios, perimetroTrapecios, numeroTrapecios > 1 ? idioma.traducir("Trapecios") : idioma.traducir("Trapecio"), idioma));
                sb.Append(ObtenerLinea(numeroRectangulos, areaRectangulos, perimetroRectangulos, numeroRectangulos > 1 ? idioma.traducir("Rectangulos") : idioma.traducir("Rectangulo"), idioma));

                // FOOTER
                sb.Append(idioma.traducir("TOTAL") + ":<br/>");
                sb.Append(numeroCuadrados + numeroCirculos + numeroTriangulos + numeroTrapecios + numeroRectangulos + " " + (idioma.traducir("formas")) + " ");
                sb.Append(idioma.traducir("Perimetro") + " " + (perimetroCuadrados + perimetroTriangulos + perimetroCirculos + perimetroTrapecios + perimetroRectangulos).ToString("#.##") + " ");
                sb.Append(idioma.traducir("Area") + " " + (areaCuadrados + areaCirculos + areaTriangulos + areaTrapecios + areaRectangulos).ToString("#.##"));
            }

            return(sb.ToString());
        }
예제 #12
0
        private static string ObtenerLinea(int cantidad, decimal area, decimal perimetro, string tipo, Idioma idioma)
        {
            if (cantidad > 0)
            {
                return($"{cantidad} {tipo} | " + idioma.traducir("Area") + " " + area + " | " + idioma.traducir("Perimetro") + " " + perimetro + " <br/>");
            }

            return(string.Empty);
        }
예제 #13
0
 public abstract void AsignarNombresAForma(Idioma idioma);