public static void Tarea1()
        {
            int              opcion;
            Nombre           n   = new Nombre();
            Perimetro        p   = new Perimetro();
            Radianes         cr  = new Radianes();
            Grados           cg  = new Grados();
            Divisas          div = new Divisas();
            ParOImpar        par = new ParOImpar();
            Semana           s   = new Semana();
            Area             a   = new Area();
            TablaMultiplicar tm  = new TablaMultiplicar();
            Potencia         pot = new Potencia();
            Edades           e   = new Edades();

            do
            {
                Console.Clear();
                Console.WriteLine("\t\t\tEjercicios Tarea 1");
                Console.WriteLine("\n\tCapitulo I\n1. Imprimir Nombre\n2. Agregar Mensajes\n\n\tCapitulo II\n3. Calcular Perimetro de Poligono Regular" +
                                  "\n4. Convertir de Grados a Radianes\n5. Convertir de Grados Centigrados a Grados Fahrenheit\n6. Convertir entre Dolares & Euros\n" +
                                  "\n\tCapitulo III\n7. Par o Impar\n8. Dia de la Semana\n9. Calcular Area o Perimetro de Poligono Regular\n\n\tCapitulo IV\n10.Tabla de Multiplicar" +
                                  "\n11.Calcular Potencia\n12.Promedio de Edades\n13.Salir");

                Console.Write("\nEscriba el numero del programa que desea ejecutar: ");
                opcion = int.Parse(Console.ReadLine());

                switch (opcion)
                {
                case 1:
                    Console.Clear();
                    n.mostrarNombre();
                    break;

                case 2:
                    Console.Clear();
                    n.mensajes();
                    break;

                case 3:
                    Console.Clear();
                    p.calcularPerimetro();
                    break;

                case 4:
                    Console.Clear();
                    cr.convertir();
                    break;

                case 5:
                    Console.Clear();
                    cg.convertir();
                    break;

                case 6:
                    Console.Clear();
                    div.convertir();
                    break;

                case 7:
                    Console.Clear();
                    par.esParOImpar();
                    break;

                case 8:
                    Console.Clear();
                    s.diaSemana();
                    break;

                case 9:
                    Console.Clear();
                    a.calcularAreaOPerimetro();
                    break;

                case 10:
                    Console.Clear();
                    tm.mostrarTabla();
                    break;

                case 11:
                    Console.Clear();
                    pot.elevar();
                    break;

                case 12:
                    Console.Clear();
                    e.calcularPromedio();
                    break;
                }
                Console.ReadKey();
            } while (opcion != 13);
        }
        static void Main()
        {
            int opc = 0;

            do
            {
                Console.Clear();
                Console.WriteLine("Menu de Tareas:");
                Console.WriteLine("1. Tarea 1.");
                Console.WriteLine("2. Tarea 2.");
                Console.WriteLine("3. Tarea 3.");
                Console.WriteLine("4. Salir.\n");
                Console.Write("Seleccione una opcion: ");
                opc = Convert.ToInt32(Console.ReadLine());

                switch (opc)
                {
                case 1:
                    do
                    {
                        System.Console.Clear();
                        Console.WriteLine("Menu de Ejercicios:\n");
                        Console.WriteLine("0. Salir");
                        Console.WriteLine("1. Imprime mi nombre.");
                        Console.WriteLine("2. Agrega más mensajes en la ventana de la consola.");
                        Console.WriteLine("3. Calcula el perímetro de cualquier polígono regular.");
                        Console.WriteLine("4. Transforma de grados a radianes.");
                        Console.WriteLine("5. Transforma de grados centígrados a grados Fahrenheit.");
                        Console.WriteLine("6. Transforma entre dólares y euros y pide el tipo de cambio del día.");
                        Console.WriteLine("7. Le pide al usuario un número y la computadora responde si es par o impar.");
                        Console.WriteLine("8. Le pide al usuario un número del 1 al 7 y escribe el nombre del día que corresponde ese número en la semana.");
                        Console.WriteLine("9. Calcula el perímetro y el área de cualquier polígono regular, pero le pregunta al usuario qué desea calcular.");
                        Console.WriteLine("10. Muestra la tabla de multiplicar del 1 al 10 de cualquier número.");
                        Console.WriteLine("11. Calcula el resultado de un número elevado a cualquier potencia.");
                        Console.WriteLine("12. Calcula el promedio de edad de un grupo de personas y diga cuál es la de edad más grande y cuál es la más joven.\n");

                        Console.Write("Seleccione un programa: ");
                        opc = Convert.ToInt32(Console.ReadLine());
                        Console.WriteLine();

                        switch (opc)
                        {
                        case 0:
                            break;

                        case 1:
                            Nombre n = new Nombre();
                            n.MostrarNombre();
                            break;

                        case 2:
                            Nombre n2 = new Nombre();
                            n2.MostrarMasMensajes();
                            break;

                        case 3:
                            PoligonoRegular pr = new PoligonoRegular();
                            pr.CalcularPerimetro();
                            break;

                        case 4:
                            Convertidor c = new Convertidor();
                            c.ConvertirGradosARadianes();
                            break;

                        case 5:
                            Convertidor c2 = new Convertidor();
                            c2.ConvertirCentigradoAFahrenheit();
                            break;

                        case 6:
                            Divisas d = new Divisas();
                            d.SeleccionarConversion();
                            break;

                        case 7:
                            ParImpar pi = new ParImpar();
                            pi.EvaluarNumero();
                            break;

                        case 8:
                            Semana s = new Semana();
                            s.EvaluarDiaSemana();
                            break;

                        case 9:
                            PerimetroArea pa = new PerimetroArea();
                            pa.CalcularPerimetroArea();
                            break;

                        case 10:
                            TablaMultiplicacion tm = new TablaMultiplicacion();
                            tm.VisualizarTablaMultiplicacion();
                            break;

                        case 11:
                            Potencia p = new Potencia();
                            p.ElevarNum();
                            break;

                        case 12:
                            Promedio pro = new Promedio();
                            pro.CalcularPromedio();
                            break;
                        }
                    } while (opc != 0);
                    break;

                case 2:
                    do
                    {
                        System.Console.Clear();
                        Console.WriteLine("Menu de Ejercicios:\n");
                        Console.WriteLine("0. Salir");
                        Console.WriteLine("1. Hacer una función que calcule el factorial de un número.");
                        Console.WriteLine("2. Hacer una función que dado un número nos regrese una cadena donde se encuentre escrito en palabras.");
                        Console.WriteLine("3. Agregar el cálculo del promedio para el programa con arreglo jagged.");
                        Console.WriteLine("   Agregar el cálculo de la menor calificación para el programa con arreglo jagged.");
                        Console.WriteLine("   Agregar el cálculo de la mayor calificación para el programa con arreglo jagged.");
                        Console.WriteLine("   Modificar el programa de la escuela para que utilice funciones.");
                        Console.WriteLine("4. Crear un programa que pase un arreglo jagged como parámetro a una función.");
                        Console.WriteLine("5. Hacer el programa que calcula el promedio, calificación máxima y mínima de un salón de clases usando el ArrayList.");
                        Console.WriteLine("6. Hacer un programa que funcione como un diccionario, con palabra y definición, usando el Hashtable.");
                        Console.WriteLine("7. Hacer un programa que funcione como una agenda telefónica y que guarde el nombre de la persona y su número telefónico.");
                        Console.WriteLine("8. Hacer un programa que muestre la hora del día en formato AM/FM seguida del año, el día y el mes actual.");
                        Console.WriteLine("9. Hacer un programa que le solicite al usuario dos cadenas y luego las muestre en orden alfabético.\n");

                        Console.Write("Seleccione un programa: ");
                        opc = Convert.ToInt32(Console.ReadLine());
                        Console.WriteLine();

                        switch (opc)
                        {
                        case 0:
                            break;

                        case 1:
                            Factorial f = new Factorial();
                            f.PedirDatos();
                            break;

                        case 2:
                            NumeroEnPalabras n = new NumeroEnPalabras();
                            n.PedirDatos();
                            break;

                        case 3:
                            ProgramaArregloJagged paj = new ProgramaArregloJagged();
                            paj.Metodo();
                            break;

                        case 4:
                            FuncionArregloJagged faj = new FuncionArregloJagged();
                            faj.Metodo();
                            break;

                        case 5:
                            SalonClasesArrayList sc = new SalonClasesArrayList();
                            sc.Calificaciones();
                            break;

                        case 6:
                            DiccionarioHashtable d = new DiccionarioHashtable();
                            d.Diccionario();
                            break;

                        case 7:
                            AgendaTelefonica at = new AgendaTelefonica();
                            at.Agendar();
                            break;

                        case 8:
                            FechaHora fh = new FechaHora();
                            fh.MostrarFechaHora();
                            break;

                        case 9:
                            OrdenAlfabetico oa = new OrdenAlfabetico();
                            oa.Metodo();
                            break;
                        }
                    } while (opc != 0);
                    break;

                case 3:
                    Application.EnableVisualStyles();
                    Application.SetCompatibleTextRenderingDefault(false);
                    Application.Run(new MenuTarea3Form());
                    break;

                case 4:
                    break;

                default:
                    Console.WriteLine("ERROR 101: La opcion que digito no es valida...");
                    Console.ReadKey();
                    break;
                }
            } while (opc != 4);
        }
        //---------------------------------------------------------------------------------------------
        public string ProcesarPago(Comprobante com, ServicioLocal.Business.Complemento.Pagos Pag, Pagoo.Comprobante c)
        {
            string result;

            if (com.TipoDeComprobante != "P")
            {
                result = "CRP101 - El valor del campo TipoDeComprobante debe ser \"P\"";
            }
            else if (c.SubTotal != "0")
            {
                result = "CRP102 - El valor del campo SubTotal debe ser cero \"0\".";
            }
            else if (com.Moneda != "XXX")
            {
                result = "CRP103 - El valor del campo Moneda debe ser \"XXX\".";
            }
            else if (com.FormaPagoSpecified)
            {
                result = "CRP104 - El campo FormaPago no se debe registrar en el CFDI.";
            }
            else if (com.MetodoPagoSpecified)
            {
                result = "CRP105 - El campo MetodoPago no se debe registrar en el CFDI.";
            }
            else if (!string.IsNullOrEmpty(com.CondicionesDePago))
            {
                result = "CRP106 - El campo CondicionesDePago no se debe registrar en el CFDI.";
            }
            else if (com.DescuentoSpecified)
            {
                result = "CRP107 - El campo Descuento no se debe registrar en el CFDI.";
            }
            else if (com.TipoCambioSpecified)
            {
                result = "CRP108 - El campo TipoCambio no se debe registrar en el CFDI.";
            }
            else if (c.Total != "0")
            {
                result = "CRP109 - El valor del campo Total debe ser cero \"0\".";
            }
            else if (com.Receptor != null && com.Receptor.UsoCFDI != "P01")
            {
                result = "CRP110 - El valor del campo UsoCFDI debe ser \"P01\".";
            }
            else
            {
                if (com.Conceptos != null)
                {
                    if (com.Conceptos.Count <ComprobanteConcepto>() != 1)
                    {
                        result = "CRP111 - Solo debe existir un Concepto en el CFDI. ";
                        return(result);
                    }
                    foreach (ComprobanteConcepto conp in com.Conceptos)
                    {
                        if (conp.Impuestos != null)
                        {
                            result = "CRP112 - No se deben registrar apartados dentro de Conceptos";
                            return(result);
                        }
                        if (conp.ComplementoConcepto != null)
                        {
                            result = "CRP112 - No se deben registrar apartados dentro de Conceptos";
                            return(result);
                        }
                        if (conp.CuentaPredial != null)
                        {
                            result = "CRP112 - No se deben registrar apartados dentro de Conceptos";
                            return(result);
                        }
                        if (conp.InformacionAduanera != null)
                        {
                            result = "CRP112 - No se deben registrar apartados dentro de Conceptos";
                            return(result);
                        }
                        if (conp.Parte != null)
                        {
                            result = "CRP112 - No se deben registrar apartados dentro de Conceptos";
                            return(result);
                        }
                        if (conp.ClaveProdServ != "84111506")
                        {
                            result = "CRP113 - El valor del campo ClaveProdServ debe ser \"84111506\".";
                            return(result);
                        }
                        if (!string.IsNullOrEmpty(conp.NoIdentificacion))
                        {
                            result = "CRP114 - El campo NoIdentificacion no se debe registrar en el CFDI.";
                            return(result);
                        }
                        if (conp.Cantidad != 1m)
                        {
                            result = "CRP115 - El valor del campo Cantidad debe ser \"1\".";
                            return(result);
                        }
                        if (conp.ClaveUnidad != "ACT")
                        {
                            result = "CRP116 - El valor del campo ClaveUnidad debe ser \"ACT\".";
                            return(result);
                        }
                        if (!string.IsNullOrEmpty(conp.Unidad))
                        {
                            result = "CRP117 - El campo Unidad no se debe registrar en el CFDI.";
                            return(result);
                        }
                        if (conp.Descripcion != "Pago")
                        {
                            result = "CRP118 - El valor del campo Descripcion debe ser \"Pago\".";
                            return(result);
                        }
                        if (conp.ValorUnitario != 0m)
                        {
                            result = "CRP119 - El valor del campo ValorUnitario debe ser cero \"0\".";
                            return(result);
                        }
                        if (conp.Importe != 0m)
                        {
                            result = "CRP120 - El valor del campo Importe debe ser cero \"0\".";
                            return(result);
                        }
                        if (conp.DescuentoSpecified)
                        {
                            result = "CRP121 - El campo Descuento no se debe registrar en el CFDI.";
                            return(result);
                        }
                    }
                    foreach (Pagoo.ComprobanteConcepto conp2 in c.Conceptos)
                    {
                        if (conp2.ValorUnitario != "0")
                        {
                            result = "CRP119 - El valor del campo ValorUnitario debe ser cero \"0\".";
                            return(result);
                        }
                        if (conp2.Importe != "0")
                        {
                            result = "CRP120 - El valor del campo Importe debe ser cero \"0\".";
                            return(result);
                        }
                        if (conp2.Cantidad != "1")
                        {
                            result = "CRP115 - El valor del campo Cantidad debe ser \"1\".";
                            return(result);
                        }
                    }
                }
                if (com.Impuestos != null)
                {
                    result = "CRP122 - No se debe registrar el apartado de Impuestos en el CFDI.";
                }
                else
                {
                    foreach (PagosPago pagos in Pag.Pago)
                    {
                        if (pagos.FormaDePagoP == "99")
                        {
                            result = "CRP201 - El valor del campo FormaDePagoP debe ser distinto de \"99\".";
                            return(result);
                        }
                        if (pagos.MonedaP == "XXX")
                        {
                            result = "CRP202 - El campo MonedaP debe ser distinto de \"XXX\"";
                            return(result);
                        }
                        if (pagos.MonedaP != "MXN")
                        {
                            if (!pagos.TipoCambioPSpecified)
                            {
                                result = "CRP203 - El campo TipoCambioP se debe registrar.";
                                return(result);
                            }
                        }
                        else if (pagos.TipoCambioPSpecified)
                        {
                            result = "CRP204 - El campo TipoCambioP no se debe registrar.";
                            return(result);
                        }
                        OperacionesCatalogos  o9   = new OperacionesCatalogos();
                        CatalogosSAT.c_Moneda mone = o9.Consultar_Moneda(pagos.MonedaP);
                        if (mone != null)
                        {
                            string varia             = mone.Variacion;
                            OperacionesCatalogos o10 = new OperacionesCatalogos();
                            Divisas divisa           = o10.Consultar_TipoDivisa(pagos.MonedaP);
                            if (divisa != null)
                            {
                                decimal inferior = this.CalculoInferiorPorcentajeMoneda(divisa.PesosDivisa, (int)Convert.ToInt16(varia));
                                decimal superior = this.CalculoSuperiorPorcentajeMoneda(divisa.PesosDivisa, (int)Convert.ToInt16(varia));
                                if (pagos.TipoCambioP < inferior)
                                {
                                    if (string.IsNullOrEmpty(com.Confirmacion))
                                    {
                                        result = "CRP205 - Cuando el valor del campo TipoCambio se encuentre fuera de los límites establecidos, debe existir el campo Confirmacion.";
                                        return(result);
                                    }
                                }
                                if (pagos.TipoCambioP > superior)
                                {
                                    if (string.IsNullOrEmpty(com.Confirmacion))
                                    {
                                        result = "CRP205 - Cuando el valor del campo TipoCambioP se encuentre fuera de los límites establecidos, debe existir el campo Confirmacion";
                                        return(result);
                                    }
                                }
                            }
                        }
                        decimal tot = 0m;
                        if (pagos.DoctoRelacionado == null)
                        {
                            result = "CRP000 - El numero de elementos DoctoRelacionado debe ser mayor a cero";
                            return(result);
                        }
                        if (pagos.DoctoRelacionado.Count <PagosPagoDoctoRelacionado>() == 0)
                        {
                            result = "CRP000 - El numero de elementos DoctoRelacionado debe ser mayor a cero";
                            return(result);
                        }
                        PagosPagoDoctoRelacionado[] doctoRelacionado = pagos.DoctoRelacionado;
                        for (int i = 0; i < doctoRelacionado.Length; i++)
                        {
                            PagosPagoDoctoRelacionado doc = doctoRelacionado[i];
                            if (doc.ImpPagadoSpecified)
                            {
                                tot += doc.ImpPagado;
                            }
                        }
                        if (pagos.Monto <= 0m)
                        {
                            result = "CRP207 - El valor del campo Monto no es mayor que cero \"0\".";
                            return(result);
                        }
                        decimal MontoDocumentos = pagos.Monto;
                        if (pagos.MonedaP != "MXN")
                        {
                            MontoDocumentos *= pagos.TipoCambioP;
                            MontoDocumentos  = decimal.Round(MontoDocumentos, mone.Decimales.Value, MidpointRounding.AwayFromZero);
                        }
                        if (tot > MontoDocumentos)
                        {
                            result = "CRP206 - La suma de los valores registrados en el campo ImpPagado de los apartados DoctoRelacionado no es menor o igual que el valor del campo Monto.";
                            return(result);
                        }
                        string mon = pagos.Monto.ToString();
                        if (mon != null)
                        {
                            if (mon != "0")
                            {
                                string[] split = mon.Split(".".ToCharArray());
                                if (split.Count <string>() <= 1)
                                {
                                    result = "CRP208 - El valor del campo Monto debe tener hasta la cantidad de decimales que soporte la moneda registrada en el campo MonedaP.";
                                    return(result);
                                }
                                if (split[1].Count <char>() != (int)Convert.ToInt16(mone.Decimales))
                                {
                                    result = "CRP208 - El valor del campo Monto debe tener hasta la cantidad de decimales que soporte la moneda registrada en el campo MonedaP.";
                                    return(result);
                                }
                            }
                        }
                        OperacionesCatalogos             o11 = new OperacionesCatalogos();
                        CatalogosSAT.c_TipoDeComprobante TCP = o11.Consultar_TipoDeComprobante(com.TipoDeComprobante);
                        if (TCP != null)
                        {
                            decimal monto        = pagos.Monto;
                            long?   valor_máximo = TCP.Valor_máximo;
                            if (monto > valor_máximo.GetValueOrDefault() && valor_máximo.HasValue)
                            {
                                if (string.IsNullOrEmpty(com.Confirmacion))
                                {
                                    result = "CRP209 - Cuando el valor del campo Monto se encuentre fuera de los límites establecidos, debe existir el campo Confirmacion";
                                    return(result);
                                }
                            }
                        }

                        if (!string.IsNullOrEmpty(pagos.RfcEmisorCtaOrd))
                        {
                            if (pagos.RfcEmisorCtaOrd != "XEXX010101000")
                            {
                                Operaciones_IRFC r = new Operaciones_IRFC();
                                vI_RFC           t = r.Consultar_IRFC(pagos.RfcEmisorCtaOrd);
                                if (t == null)
                                {
                                    result = "CRP210 - El RFC del campo RfcEmisorCtaOrd no se encuentra en la lista de RFC.";
                                    return(result);
                                }
                            }
                            else if (string.IsNullOrEmpty(pagos.NomBancoOrdExt))
                            {
                                result = "CRP211 - El campo NomBancoOrdExt se debe registrar.";
                                return(result);
                            }
                        }
                        if (pagos.FormaDePagoP != "02" && pagos.FormaDePagoP != "03" && pagos.FormaDePagoP != "04" && pagos.FormaDePagoP != "05" && pagos.FormaDePagoP != "06" && pagos.FormaDePagoP != "28" && pagos.FormaDePagoP != "29" && !string.IsNullOrEmpty(pagos.CtaOrdenante))
                        {
                            result = "CRP212 - El campo CtaOrdenante no se debe registrar.";
                            return(result);
                        }
                        if (!string.IsNullOrEmpty(pagos.CtaOrdenante))
                        {
                            OperacionesCatalogos     o10       = new OperacionesCatalogos();
                            CatalogosSAT.c_FormaPago formaPago = o10.Consultar_FormaPago(pagos.FormaDePagoP);
                            if (formaPago.PatroncuentaBeneficiaria != "No" && formaPago.PatroncuentaBeneficiaria != "Opcional")
                            {
                                if (!this.validarExpresion(formaPago.PatroncuentaBeneficiaria, pagos.CtaOrdenante))
                                {
                                    result = "CRP213 - El campo CtaOrdenante no cumple con el patrón requerido.";
                                    return(result);
                                }
                            }
                        }
                        if (pagos.FormaDePagoP != "02" && pagos.FormaDePagoP != "03" && pagos.FormaDePagoP != "04" && pagos.FormaDePagoP != "05" && pagos.FormaDePagoP != "28" && pagos.FormaDePagoP != "29")
                        {
                            if (!string.IsNullOrEmpty(pagos.RfcEmisorCtaBen))
                            {
                                result = "CRP214 - El campo RfcEmisorCtaBen no se debe registrar.";
                                return(result);
                            }
                            if (!string.IsNullOrEmpty(pagos.CtaBeneficiario))
                            {
                                result = "CRP215 - El campo CtaBeneficiario no se debe registrar.";
                                return(result);
                            }
                        }
                        if (pagos.FormaDePagoP != "03" && pagos.TipoCadPagoSpecified)
                        {
                            result = "CRP216 - El campo TipoCadPago no se debe registrar. ";
                            return(result);
                        }
                        int tDoc = 0;
                        if (pagos.DoctoRelacionado != null)
                        {
                            tDoc = pagos.DoctoRelacionado.Count <PagosPagoDoctoRelacionado>();
                        }
                        if (pagos.DoctoRelacionado != null)
                        {
                            doctoRelacionado = pagos.DoctoRelacionado;
                            for (int i = 0; i < doctoRelacionado.Length; i++)
                            {
                                PagosPagoDoctoRelacionado doc = doctoRelacionado[i];
                                if (doc.MonedaDR == "XXX")
                                {
                                    result = "CRP217 - El valor del campo MonedaDR debe ser distinto de \"XXX\"";
                                    return(result);
                                }
                                if (doc.MonedaDR != pagos.MonedaP)
                                {
                                    if (!doc.TipoCambioDRSpecified)
                                    {
                                        result = "CRP218 - El campo TipoCambioDR se debe registrar.";
                                        return(result);
                                    }
                                }
                                else if (doc.TipoCambioDRSpecified)
                                {
                                    result = "CRP219 - El campo TipoCambioDR no se debe registrar.";
                                    return(result);
                                }
                                if (doc.MonedaDR == "MXN" && pagos.MonedaP != "MXN" && doc.TipoCambioDR != 1m)
                                {
                                    result = "CRP220 - El campo TipoCambioDR debe ser \"1\".";
                                    return(result);
                                }
                                if (doc.MetodoDePagoDR == "PPD")
                                {
                                    if (!doc.ImpSaldoAntSpecified)
                                    {
                                        result = "CRP234 - El campo ImpSaldoAnt se debe registrar.";
                                        return(result);
                                    }
                                }
                                if (tDoc > 1 && !doc.ImpPagadoSpecified)
                                {
                                    result = "CRP235 - El campo ImpPagado se debe registrar. ";
                                    return(result);
                                }
                                if (tDoc == 1 && doc.TipoCambioDRSpecified && !doc.ImpPagadoSpecified)
                                {
                                    result = "CRP235 - El campo ImpPagado se debe registrar. ";
                                    return(result);
                                }
                                if (doc.ImpSaldoAntSpecified)
                                {
                                    if (doc.ImpSaldoAnt <= 0m)
                                    {
                                        result = "CRP221 - El campo ImpSaldoAnt debe mayor a cero.";
                                        return(result);
                                    }
                                    string impSal = doc.ImpSaldoAnt.ToString();
                                    if (impSal != null)
                                    {
                                        if (impSal != "0")
                                        {
                                            string[] split = impSal.Split(".".ToCharArray());
                                            if (split.Count <string>() <= 1)
                                            {
                                                result = "CRP222 - El valor del campo ImpSaldoAnt debe tener hasta la cantidad de decimales que soporte la moneda registrada en el campo MonedaDR.";
                                                return(result);
                                            }
                                            if (split[1].Count <char>() != (int)Convert.ToInt16(mone.Decimales))
                                            {
                                                result = "CRP222 - El valor del campo ImpSaldoAnt debe tener hasta la cantidad de decimales que soporte la moneda registrada en el campo MonedaDR.";
                                                return(result);
                                            }
                                        }
                                    }
                                }
                                if (doc.ImpPagadoSpecified)
                                {
                                    if (doc.ImpPagado <= 0m)
                                    {
                                        result = "CRP223 - El campo ImpPagado debe mayor a cero.";
                                        return(result);
                                    }
                                    string impPa = doc.ImpPagado.ToString();
                                    if (impPa != null)
                                    {
                                        if (impPa != "0")
                                        {
                                            string[] split = impPa.Split(".".ToCharArray());
                                            if (split.Count <string>() <= 1)
                                            {
                                                result = "CRP224 - El valor del campo ImpPagado debe tener hasta la cantidad de decimales que soporte la moneda registrada en el campo MonedaDR.";
                                                return(result);
                                            }
                                            if (split[1].Count <char>() != (int)Convert.ToInt16(mone.Decimales))
                                            {
                                                result = "CRP224 - El valor del campo ImpPagado debe tener hasta la cantidad de decimales que soporte la moneda registrada en el campo MonedaDR.";
                                                return(result);
                                            }
                                        }
                                    }
                                }
                                if (doc.ImpSaldoInsolutoSpecified)
                                {
                                    string impSalI = doc.ImpSaldoInsoluto.ToString();
                                    if (impSalI != null)
                                    {
                                        if (impSalI != "0")
                                        {
                                            string[] split = impSalI.Split(".".ToCharArray());
                                            if (split.Count <string>() <= 1)
                                            {
                                                result = "CRP225 - El valor del campo ImpSaldoInsoluto debe tener hasta la cantidad de decimales que soporte la moneda registrada en el campo MonedaDR.";
                                                return(result);
                                            }
                                            if (split[1].Count <char>() != (int)Convert.ToInt16(mone.Decimales))
                                            {
                                                result = "CRP225 - El valor del campo ImpSaldoInsoluto debe tener hasta la cantidad de decimales que soporte la moneda registrada en el campo MonedaDR.";
                                                return(result);
                                            }
                                        }
                                    }
                                    if (doc.ImpSaldoInsoluto < 0m)
                                    {
                                        result = "CRP226 - El campo ImpSaldoInsoluto debe ser mayor o igual a cero y calcularse con la suma de los campos ImSaldoAnt menos el ImpPagado o el Monto.";
                                        return(result);
                                    }
                                    if (doc.ImpSaldoInsoluto != doc.ImpSaldoAnt - doc.ImpPagado)
                                    {
                                        result = "CRP226 - El campo ImpSaldoInsoluto debe ser mayor o igual a cero y calcularse con la suma de los campos ImSaldoAnt menos el ImpPagado o el Monto.";
                                        return(result);
                                    }
                                }
                            }
                        }
                        if (pagos.TipoCadPagoSpecified)
                        {
                            if (pagos.CertPago == null)
                            {
                                result = "CRP227 - El campo CertPago se debe registrar.";
                                return(result);
                            }
                            if (string.IsNullOrEmpty(pagos.CadPago))
                            {
                                result = "CRP229 - El campo CadPago se debe registrar.";
                                return(result);
                            }
                            if (pagos.SelloPago == null)
                            {
                                result = "CRP231 - El campo SelloPago se debe registrar. ";
                                return(result);
                            }
                        }
                        else
                        {
                            if (pagos.CertPago != null)
                            {
                                result = "CRP228 - El campo CertPago no se debe registrar.";
                                return(result);
                            }
                            if (!string.IsNullOrEmpty(pagos.CadPago))
                            {
                                result = "CRP230 - El campo CadPago no se debe registrar.";
                                return(result);
                            }
                            if (pagos.SelloPago != null)
                            {
                                result = "CRP232 - El campo SelloPago no se debe registrar.";
                                return(result);
                            }
                        }
                        if (pagos.DoctoRelacionado != null)
                        {
                            doctoRelacionado = pagos.DoctoRelacionado;
                            for (int i = 0; i < doctoRelacionado.Length; i++)
                            {
                                PagosPagoDoctoRelacionado doc = doctoRelacionado[i];
                                if (doc.MetodoDePagoDR == "PPD")
                                {
                                    if (string.IsNullOrEmpty(doc.NumParcialidad))
                                    {
                                        result = "CRP233 - El campo NumParcialidad se debe registrar.";
                                        return(result);
                                    }
                                    if (!doc.ImpSaldoInsolutoSpecified)
                                    {
                                        result = "CRP236 - El campo ImpSaldoInsoluto se debe registrar.";
                                        return(result);
                                    }
                                }
                            }
                        }
                        if (pagos.Impuestos != null)
                        {
                            result = "CRP237 - No debe existir el apartado de Impuestos.";
                            return(result);
                        }
                        if (pagos.FormaDePagoP != "02" && pagos.FormaDePagoP != "03" && pagos.FormaDePagoP != "04" && pagos.FormaDePagoP != "05" && pagos.FormaDePagoP != "06" && pagos.FormaDePagoP != "28" && pagos.FormaDePagoP != "29" && !string.IsNullOrEmpty(pagos.RfcEmisorCtaOrd))
                        {
                            result = "CRP238 - El campo RfcEmisorCtaOrd no se debe registrar.";
                            return(result);
                        }
                        if (!string.IsNullOrEmpty(pagos.CtaBeneficiario))
                        {
                            OperacionesCatalogos     o10       = new OperacionesCatalogos();
                            CatalogosSAT.c_FormaPago formaPago = o10.Consultar_FormaPago(pagos.FormaDePagoP);
                            if (formaPago.PatroncuentaBeneficiaria != "No" && formaPago.PatroncuentaBeneficiaria != "Opcional")
                            {
                                if (!this.validarExpresion(formaPago.PatroncuentaBeneficiaria, pagos.CtaBeneficiario))
                                {
                                    result = "CRP239 - El campo CtaBeneficiario no cumple con el patrón requerido.";
                                    return(result);
                                }
                            }
                        }
                    }
                    result = "0";
                }
            }
            return(result);
        }//-------------------------------------------------------------------------------------
        static void Main()
        {
            int opcion;

            do
            {
                Console.Clear();
                Console.WriteLine("\n\t\tMenu de los ejercicios");
                Console.WriteLine("\n\t**------Tarea 1------**");
                Console.WriteLine("\n(1)- Imprimir mi nombre nombre y agregarle otro mensaje.");
                Console.WriteLine("(2)- Perimetro de poligono regular.");
                Console.WriteLine("(3)- Conversor de grados a radianes.");
                Console.WriteLine("(4)- Conversor de grados centigrados a fahrenheit.");
                Console.WriteLine("(5)- Conversor de divisas.");
                Console.WriteLine("(6)- Comprobar si un numero es par o impar.");
                Console.WriteLine("(7)- Evaluar numero entre 1 y 7.");
                Console.WriteLine("(8)- Area y perimetro de un poligono.");
                Console.WriteLine("(9)- Tabla de multiplicar.");
                Console.WriteLine("(10)- Potencia de cualquier numero.");
                Console.WriteLine("(11)- Promedio de edad.");

                Console.WriteLine("\n\n\t**------Tarea 2------**");
                Console.WriteLine("\n(12)-Calcular factorial de un numero.");
                Console.WriteLine("(13)-Cadena de numeros escritos en palabras.");
                Console.WriteLine("(14)-Ejercicios del capitulo 6.");
                Console.WriteLine("(15)-Pasar un arreglo Jagged como parametro en funcion.");
                Console.WriteLine("(16)-Calcular promedio, maxima y minima calificaion ArrayList.");
                Console.WriteLine("(17)-Diccionario de palabras.");
                Console.WriteLine("(18)-Agenda telefonica.");
                Console.WriteLine("(19)-Formato de hora AM/PM.");
                Console.WriteLine("(20)-Comparar cadenas.");

                Console.WriteLine("\n\n\t**--------Tarea 3---------**");
                Console.WriteLine("(21)- Menu tarea 3");
                Console.WriteLine("\n\n(22)- Salir.");
                Console.Write("\n|-Digite el numero del programa que desea abrir: ");
                opcion = Convert.ToInt32(Console.ReadLine());
                switch (opcion)
                {
                case 1:
                {
                    Console.Clear();

                    Nombre n = new Nombre();
                    n.metodo();
                    Console.ReadKey();
                    break;
                }

                case 2:
                {
                    Console.Clear();

                    Perimetro p = new Perimetro();
                    p.CalcularP();
                    Console.ReadKey();
                    break;
                }

                case 3:
                {
                    Console.Clear();

                    ConversorGR ObjConversorGR = new ConversorGR();
                    ObjConversorGR.Convertir();
                    Console.ReadKey();
                    break;
                }

                case 4:
                {
                    Console.Clear();

                    ConversorCF ObjConversorCF = new ConversorCF();
                    ObjConversorCF.Convertir();
                    Console.ReadKey();
                    break;
                }

                case 5:
                {
                    Console.Clear();

                    Divisas divisas = new Divisas();
                    divisas.Cambio();
                    Console.ReadKey();
                    break;
                }

                case 6:
                {
                    Console.Clear();

                    Par objPar = new Par();
                    objPar.Comprobar();
                    Console.ReadKey();
                    break;
                }

                case 7:
                {
                    Console.Clear();

                    Semana objSemana = new Semana();
                    objSemana.Evaluar();
                    Console.ReadKey();
                    break;
                }

                case 8:
                {
                    Console.Clear();

                    Area area = new Area();
                    area.Metodo();
                    Console.ReadKey();
                    break;
                }

                case 9:
                {
                    Console.Clear();

                    TablaM tabla = new TablaM();
                    tabla.Evaluar();
                    Console.ReadKey();
                    break;
                }

                case 10:
                {
                    Console.Clear();

                    Potencia potencia = new Potencia();
                    potencia.Calcular();
                    Console.ReadKey();
                    break;
                }

                case 11:
                {
                    Console.Clear();

                    Promedio promedio = new Promedio();
                    promedio.Calcular();
                    Console.ReadKey();
                    break;
                }

                case 12:
                {
                    Console.Clear();

                    Factorial factorial = new Factorial();
                    factorial.Calcular();
                    Console.ReadKey();
                    break;
                }

                case 13:
                {
                    Console.Clear();

                    Numeros numeros = new Numeros();
                    numeros.Evaluar();
                    Console.ReadKey();
                    break;
                }

                case 14:
                {
                    Console.Clear();

                    Escuela escuela = new Escuela();
                    escuela.principal();
                    Console.ReadKey();
                    break;
                }

                case 15:
                {
                    Console.Clear();

                    Jagged jagged = new Jagged();
                    jagged.Comprobar();
                    Console.ReadKey();
                    break;
                }

                case 16:
                {
                    Console.Clear();

                    SalonClases salonDeClases = new SalonClases();
                    salonDeClases.Clases();
                    Console.ReadKey();
                    break;
                }

                case 17:
                {
                    Console.Clear();
                    Diccionario diccionario = new Diccionario();
                    diccionario.metodo();
                    Console.ReadKey();
                    break;
                }

                case 18:
                {
                    Console.Clear();
                    Agenda agenda = new Agenda();
                    agenda.metodo();
                    Console.ReadKey();
                    break;
                }

                case 19:
                {
                    Console.Clear();
                    FormatoAMPM formato = new FormatoAMPM();
                    formato.Metodo();
                    Console.ReadKey();
                    break;
                }

                case 20:
                {
                    Console.Clear();
                    Cadenas cadena = new Cadenas();
                    cadena.metodo();
                    Console.ReadKey();
                    break;
                }

                case 21:
                {
                    Application.EnableVisualStyles();
                    Application.SetCompatibleTextRenderingDefault(false);
                    Application.Run(new MenuTarea());
                    Console.ReadKey();
                    break;
                }

                default:
                {
                    Console.WriteLine("El ejercicio selecionado no esta disponible");
                    break;
                }
                }
            } while (opcion != 22);
        }