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; }
public Entrada(string nombre, Valvula val, double flujo) { this.Nombre = nombre; this.Val = val; this.Flujo = flujo; }
public Entrada(string name, Valvula val, float flujo) { Name = name ?? throw new ArgumentNullException(nameof(name)); Val = val ?? throw new ArgumentNullException(nameof(val)); Flujo = flujo; }