public static List<TerminoLineal> PresentaResultadoUnico(SistemaDeEcuaciones sis) { var lista = new List<TerminoLineal>(); for (int i = sis.Count - 1; i >= 0; i--) { TerminoLineal a = new TerminoLineal(); double suma = 0; int j = 0; foreach (TerminoLineal t in sis[i]) { foreach (TerminoLineal tt in lista) { if (t.Literal == tt.Literal) t.Valor = tt.Valor; } if (t.Literal == "_") { suma += t.Coeficiente; } else if (t.Coeficiente != 1) { suma += (-t.Coeficiente) * t.Valor; } else if (t.Coeficiente == 1 && t.Literal != "_" && t.Valor == 0 && i == j) { a.Literal = t.Literal; } j++; } a.Valor = suma; lista.Add(a); } return lista; }
static void Main(string[] args) { SistemaDeEcuaciones se = new SistemaDeEcuaciones(); int i = 0, j = 0; char confirmacion = 's'; do { Console.WriteLine("A continuacion se le solicita los detalles de su ecuacion:" + (i + 1)); EcuacionLineal el = new EcuacionLineal(); j = 0; do { TerminoLineal tl = new TerminoLineal(); Console.WriteLine("Especifique el coeficiente del termino:" + (j + 1)); tl.Coeficiente = int.Parse(Console.ReadLine()); Console.WriteLine("Especifique la literal del termino:" + (j + 1) + "\n(Para indicar el termino constante, especifique '_')"); tl.Literal = Console.ReadLine(); Console.WriteLine("¿Desea especificar otro término para la ecuacion" + (i + 1)+"(s/n)?"); confirmacion = Console.ReadKey().KeyChar; el.Add(tl); j++; } while (confirmacion != 'n'); if (el.Where(x => x.Literal == "_").Count() == 0) el.Add(new TerminoLineal("_", 0)); se.Add(el); i++; Console.WriteLine("¿Desea especificar otra ecuacion (s/n)?"); confirmacion = Console.ReadKey().KeyChar; } while (confirmacion != 'n'); Console.WriteLine("La ecuación inicial es:"); Console.WriteLine(se.ToString()); //Paso 1 mismos términos var s1 = EliminacionDeGaussLinq.IgualaTerminos(se); //Paso 2 orden var _s2 = new SistemaDeEcuaciones(s1.Select(x => x.ordena()).ToList()).ordena(); List<string> l = (from s in _s2[0] select s.Literal).ToList(); var __s2 = new SistemaDeEcuaciones(s1.Select(x => x.ordena(l)).ToList()).ordena(); //Paso 3 Reduccion var s2 = Reduccion.re(__s2, l); //Paso 4 Resultados switch (EliminacionDeGaussLinq.EvaluaNumeroDeResultados(s2)) { case 1: Console.WriteLine("Existen una infinidad de Resultados"); Console.WriteLine(s2.ToString()); //foreach (string s in Reduccion.PresentaInfinidadDeResultados(s2)) // Console.WriteLine(s); break; case 0: Console.WriteLine("Existe sólo un Resultado"); Console.WriteLine(s2.ToString()); foreach (TerminoLineal t in Reduccion.PresentaResultadoUnico(s2)) Console.WriteLine(t.Literal + "=" + t.Valor); break; case -1: Console.WriteLine("La ecuación es incongruente"); Console.WriteLine(s2.ToString()); break; default: Console.WriteLine("La ecuación no se evaluó correctamente"); Console.WriteLine(s2.ToString()); break; } Console.ReadKey(); }
public static List<TerminoLineal> PresentaResultadoInfinito(SistemaDeEcuaciones sis1, double parametro) { SistemaDeEcuaciones sis = sis1; var lista = new List<TerminoLineal>(); bool paso = false; for (int i = sis.Count - 1; i >= 0; i--) { if (sis[i].Where(x => x.Coeficiente == 0).Count() == sis[i].Count) continue; TerminoLineal a = new TerminoLineal(); double suma = 0; for (int j = sis[i].Count - 1; j >= 0; j--) { foreach (TerminoLineal tt in lista) { if (sis[i][j].Literal == tt.Literal) sis[i][j].Valor = tt.Valor; } if (sis[i][j].Coeficiente != 0 && i != j && sis[i][j].Literal != "_" && sis[i][j].Valor == 0) { sis[i][j].Valor = parametro; if (!paso) { lista.Add(sis[i][j]); paso = true; } } } int jj = 0; foreach (TerminoLineal t in sis[i]) { foreach (TerminoLineal tt in lista) { if (t.Literal == tt.Literal) t.Valor = tt.Valor; } if (t.Literal == "_") { suma += t.Coeficiente; } else if (t.Coeficiente != 1 || i != jj) { suma += (-t.Coeficiente) * t.Valor; } else if (t.Coeficiente == 1 && t.Literal != "_" && t.Valor == 0) { a.Literal = t.Literal; } jj++; } if (a.Literal != null) { a.Valor = suma; lista.Add(a); } } return lista; }