Пример #1
0
        public string CalcularConfiguraciones()
        {
            string salida = "";

            float[] flujos = new float[nOut];
            for (int i = 0; i < nOut; i++)//Inicializar flujos de salida
            {
                flujos[i] = 0;
            }
            for (int n = 0; n < nConf; n++) //Iterar sobre las configuraciones
            {
                salida += "Configuración de válvulas # " + (n + 1) + "\n";
                for (int i = 0; i < nIn; i++)         //Iterar sobre las salidas segun una configuracion
                {
                    Valvula tmp;                      //Temporal que ira cambiando segun se cambie de valvula donde este parado
                    Salida  sal = new Salida("S", 0); //Salida que corresponde a una entrada segun la configuración
                    //Iterar sobre las valvulas hasta llegar a una salida, es decir que tmp es null y sal queda con una salida
                    for (tmp = Entradas[i].attVal; tmp != null; tmp = Configuraciones[n].Split(' ')[tmp.attNro] == "L" ? tmp.attIzq : tmp.attDer)
                    {
                        sal = Configuraciones[n].Split(' ')[tmp.attNro] == "L" ? tmp.attEndIzq : tmp.attEndDer;
                    }

                    flujos[sal.attNro] += Entradas[i].attFlujo; //Acumulativo de los flujos de entrada
                }
                for (int i = 0; i < nOut; i++)                  //Iterar sobre las salidas
                {
                    salida   += "Salida # " + (i + 1) + " : flujo " + flujos[i] + " galones/min\n";
                    flujos[i] = 0;
                }
            }
            return(salida);
        }
        public string CalcularConfiguraciones()
        {
            string salida = "";

            double[] flujos = new double[numOut];
            for (int i = 0; i < numOut; i++)
            {
                flujos[i] = 0;
            }
            for (int n = 0; n < numConf; n++)
            {
                salida += "Configuración de válvulas # " + (n + 1) + "\n";
                for (int i = 0; i < numIn; i++)
                {
                    Valvula tmp;
                    Salida  sal = new Salida("S", 0);
                    for (tmp = Entradas[i].Val1; tmp != null; tmp = Configuraciones[n].Split(' ')[tmp.Num1] == "L" ? tmp.L1 : tmp.R1)
                    {
                        sal = Configuraciones[n].Split(' ')[tmp.Num1] == "L" ? tmp.EndL1 : tmp.EndR1;
                    }

                    flujos[sal.Num1] += Entradas[i].Flujo1;
                }
                for (int i = 0; i < numOut; i++)
                {
                    salida   += "Salida # " + (i + 1) + " : flujo " + flujos[i] + " galones/min\n ";
                    flujos[i] = 0;
                }
            }
            return(salida);
        }
Пример #3
0
        public SistemaIrrigacion(string[] sis, int nroLines)
        {
            string[] split;
            int      j = 0, k = 0, l = 0, m = 0;

            for (int n = 0; n < nroLines; n++)
            {
                split = sis[n].Split(' ');
                if (n == 0)// Leer los tamaños
                {
                    nIn      = Convert.ToInt32(split[0]);
                    nOut     = Convert.ToInt32(split[1]);
                    nVal     = Convert.ToInt32(split[2]);
                    Entradas = new Entrada[nIn];
                    Valvulas = new Valvula[nVal];
                    Salidas  = new Salida[nOut];
                }
                else if (n == 1)//Asignar flujos de entradas
                {
                    for (int i = 0; i < nIn; i++)
                    {
                        Entradas[i] = new Entrada(Convert.ToSingle(split[i]));
                    }
                }
                else if (n < (nIn + 2))//Asignar nombres a las Entradas y la Valvula que le corresponde
                {
                    Entradas[j].attName = split[0];
                    Valvulas[j]         = new Valvula(split[1], j);
                    Entradas[j].attVal  = Valvulas[j];
                    j++;
                }
                else if (n < (nOut + nIn + 2))//Asignar nombres a las Salidas
                {
                    Salidas[k] = new Salida(sis[n], k);
                    k++;
                }
                else if (n < (nVal + nOut + nIn + 2))//Asignamiento a las valvulas
                {
                    int pos;
                    Valvulas[l] = Valvulas[l] ?? new Valvula(split[0], l);
                    //Asignar por izquierda
                    pos = Convert.ToInt32(Regex.Replace(split[1], @"[^\d]", "")) - 1; //Obtener solo los numeros de un texto con Regex.Replace
                    if (split[1][0] == 'S')
                    {
                        Valvulas[l].attEndIzq = Salidas[pos];
                    }
                    else
                    {
                        Valvulas[pos]      = Valvulas[pos] ?? new Valvula(split[1], pos);
                        Valvulas[l].attIzq = Valvulas[pos];
                    }
                    //Asignar por derecha
                    pos = Convert.ToInt32(Regex.Replace(split[2], @"[^\d]", "")) - 1;
                    if (split[2][0] == 'S')
                    {
                        Valvulas[l].attEndDer = Salidas[pos];
                    }
                    else
                    {
                        Valvulas[pos]      = Valvulas[pos] ?? new Valvula(split[2], pos);
                        Valvulas[l].attDer = Valvulas[pos];
                    }
                    l++;
                }
                else//Asignamiento de configuraciones
                {
                    Configuraciones[m] = sis[n];
                    m++;
                }
            }
            nConf = m;
        }
        public SistemaIrrigacion(string[] sis, int numLineas)
        {
            string[] Split;
            int      j = 0, k = 0, v = 0, z = 0;

            for (int n = 0; n < numLineas; n++)
            {
                Split = sis[n].Split(' ');

                if (n == 0)
                {
                    numIn    = Convert.ToInt32(Split[0]);
                    numOut   = Convert.ToInt32(Split[1]);
                    numVal   = Convert.ToInt32(Split[2]);
                    Entradas = new Entrada[numIn];
                    Valvulas = new Valvula[numVal];
                    Salidas  = new Salida[numOut];
                }
                else if (n == 1)
                {
                    for (int i = 0; i < numIn; i++)
                    {
                        Entradas[i] = new Entrada(Convert.ToSingle(Split[i]));
                    }
                }
                else if (n < (numIn + 2))
                {
                    Entradas[j].Nombre1 = Split[0];
                    Valvulas[j]         = new Valvula(Split[1], j);
                    Entradas[j].Val1    = Valvulas[j];
                    j++;
                }
                else if (n < (numOut + numIn + 2))
                {
                    Salidas[k] = new Salida(sis[n], k);
                    k++;
                }
                else if (n < (numVal + numOut + numIn + 2))
                {
                    int pos;
                    Valvulas[v] = Valvulas[v] ?? new Valvula(Split[0], v);

                    pos = Convert.ToInt32(Regex.Replace(Split[1], @"[^\d]", "")) - 1;
                    if (Split[1][0] == 'S')
                    {
                        Valvulas[v].EndL1 = Salidas[pos];
                    }
                    else
                    {
                        Valvulas[pos]     = Valvulas[pos] ?? new Valvula(Split[1], pos);
                        Valvulas[v].EndL1 = Valvulas[pos];
                    }

                    pos = Convert.ToInt32(Regex.Replace(Split[2], @"[^\d]", "")) - 1;
                    if (Split[2][0] == 'S')
                    {
                        Valvulas[v].EndR1 = Salidas[pos];
                    }
                    else
                    {
                        Valvulas[pos]  = Valvulas[pos] ?? new Valvula(Split[2], pos); //El operador de fusión nula?? devuelve el valor de su operando izquierdo si no es nulo; de lo contrario, evalúa el operando de la derecha y devuelve su resultado. Los ?? El operador no evalúa su operando de la derecha si el operando de la izquierda se evalúa como no nulo.
                        Valvulas[v].R1 = Valvulas[pos];
                    }
                    v++;
                }
                else
                {
                    Configuraciones[z] = sis[n];
                    z++;
                }
            }
            numConf = z;
        }