public static string Imprimir(List <FormaGeometrica> formas, Idioma idioma) { var sb = new StringBuilder(); double areaCuadrados = 0; double areaCirculos = 0; double areaTriangulos = 0; double areaPoligonos = 0; double areaTrapecios = 0; double areaRectangulos = 0; double areaTotal = 0; double perimetroCuadrados = 0; double perimetroCirculos = 0; double perimetroTriangulos = 0; double perimetroPoligonos = 0; double perimetroTrapecios = 0; double perimetroRectangulos = 0; double perimetroTotal = 0; string esVacia = idioma.ListaVacia(formas); if (esVacia != String.Empty) { sb.Append(esVacia); } else { // Hay por lo menos una forma // HEADER sb.Append(idioma.Header()); var cuadrados = formas.Where(x => x.NameOf() == typeof(Cuadrado).Name.ToString()).ToList(); var circulos = formas.Where(x => x.NameOf() == typeof(Circulo).Name.ToString()).ToList(); var triangulos = formas.Where(x => x.NameOf() == typeof(TrianguloEquilatero).Name.ToString()).ToList(); var poligonos = formas.Where(x => x.NameOf() == typeof(PoligonoRegular).Name.ToString()).ToList(); var trapecios = formas.Where(x => x.NameOf() == typeof(Trapecio).Name.ToString()).ToList(); var rectangulos = formas.Where(x => x.NameOf() == typeof(Rectangulo).Name.ToString()).ToList(); if (cuadrados.Count > 0) { foreach (var cuadrado in cuadrados) { areaCuadrados += cuadrado.CalcularArea(); perimetroCuadrados += cuadrado.CalcularPerimetro(); } sb.Append(idioma.ObtenerLinea(cuadrados.Count, areaCuadrados, perimetroCuadrados, new Cuadrado())); } if (circulos.Count > 0) { foreach (var circulo in circulos) { areaCirculos += circulo.CalcularArea(); perimetroCirculos += circulo.CalcularPerimetro(); } sb.Append(idioma.ObtenerLinea(circulos.Count, areaCirculos, perimetroCirculos, new Circulo())); } if (triangulos.Count > 0) { foreach (var triangulo in triangulos) { areaTriangulos += triangulo.CalcularArea(); perimetroTriangulos += triangulo.CalcularPerimetro(); } sb.Append(idioma.ObtenerLinea(triangulos.Count, areaTriangulos, perimetroTriangulos, new TrianguloEquilatero())); } if (poligonos.Count > 0) { foreach (var poligono in poligonos) { areaPoligonos += poligono.CalcularArea(); perimetroPoligonos += poligono.CalcularPerimetro(); } sb.Append(idioma.ObtenerLinea(poligonos.Count, areaPoligonos, perimetroPoligonos, new PoligonoRegular())); } if (trapecios.Count > 0) { foreach (var trapecio in trapecios) { areaTrapecios += trapecio.CalcularArea(); perimetroTrapecios += trapecio.CalcularPerimetro(); } sb.Append(idioma.ObtenerLinea(trapecios.Count, areaTrapecios, perimetroTrapecios, new Trapecio())); } if (rectangulos.Count > 0) { foreach (var rectangulo in rectangulos) { areaRectangulos += rectangulo.CalcularArea(); perimetroRectangulos += rectangulo.CalcularPerimetro(); } sb.Append(idioma.ObtenerLinea(rectangulos.Count, areaRectangulos, perimetroRectangulos, new Rectangulo())); } // FOOTER sb.Append("TOTAL:<br/>"); if (cuadrados.Count > 0) { areaTotal += areaCuadrados; perimetroTotal += perimetroCuadrados; } if (circulos.Count > 0) { areaTotal += areaCirculos; perimetroTotal += perimetroCirculos; } if (triangulos.Count > 0) { areaTotal += areaTriangulos; perimetroTotal += perimetroTriangulos; } if (poligonos.Count > 0) { areaTotal += areaPoligonos; perimetroTotal += perimetroPoligonos; } if (trapecios.Count > 0) { areaTotal += areaTrapecios; perimetroTotal += perimetroTrapecios; } if (rectangulos.Count > 0) { areaTotal += areaRectangulos; perimetroTotal += perimetroRectangulos; } sb.Append(formas.Count + " " + idioma.GetFormas() + " "); sb.Append(idioma.GetPerimetro() + " " + perimetroTotal.ToString("#.##") + " "); sb.Append(idioma.GetArea() + " " + areaTotal.ToString("#.##")); } return(sb.ToString()); }