public void TestingDerivada() { Termino t1 = new Termino(3, 3); Termino t2 = new Termino(9, 2); t1.Derivar(); Assert.IsTrue(t1.Equals(t2)); }
public void TestingIntegral() { Termino t1 = new Termino(3, 3); Termino t2 = new Termino(9, 2); t2.Integrar(); Assert.IsTrue(t1.Equals(t2)); }
public void TestEquals2() { Termino t1 = new Termino(2, 2); Termino t2 = new Termino(3, 3); Termino t3 = new Termino(3, 0); IPolinomio p1 = new EcuacionesLib.Polinomio(); IPolinomio p2 = new EcuacionesLib.Polinomio(); p1.Insertar(t1); p1.Insertar(t2); p1.Insertar(t3); p2.Insertar(t1); p2.Insertar(t2); //p2.Insertar(t3); Assert.IsFalse(p1.Equals(p2)); }
public void TestTermino() { //Creo dos terminos Termino ter = new Termino("X1", 5); Termino ter2 = new Termino("X2", 3); //Creo la ecuación Ecuacion ecu = new Ecuacion(">=", 120); //Agrego los terminos a la ecuación ecu.Add(ter); ecu.Add(ter2); //Creo un modelo Modelo primerModelo = new Modelo("Primer Modelo Simplex"); //Agrego la ecuacion al modelo primerModelo.Add(ecu); ecu.MostrarEcuacion(); Assert.AreEqual("Max", primerModelo.Objetivo); }
public void Newton() { Termino t1 = new Termino(1, 4); Termino t2 = new Termino(-1, 3); Termino t3 = new Termino(-3, 2); Termino t4 = new Termino(-4, 1); Termino t5 = new Termino(-2, 0); IPolinomio p1 = new EcuacionesLib.Polinomio(); IPolinomio p2; p1.Insertar(t1); p1.Insertar(t2); p1.Insertar(t3); p1.Insertar(t4); p1.Insertar(t5); //p2.Insertar(t3); p2 = (IPolinomio)p1.Clone(); p2.Derivar(); Assert.IsTrue((int)p1.Resolver(EcuacionesLib.Polinomio.Newton(2, 3, p1)) == 0); }
public ActionResult Editar(Termino model, HttpPostedFileBase fichero) { var ter = DbContext.Termino.Find(model.idTermino); ter.nombre = model.nombre; ter.texto = model.texto; ter.link = model.link; if (fichero != null && fichero.ContentLength > 0) { //guardamos el fichero de la foto con nombre ter + id var nombreFichero = fichero.FileName; var extension = nombreFichero.Substring(nombreFichero.LastIndexOf(".", StringComparison.Ordinal)); var rutacompleta = Server.MapPath("~/uploads/fotos") + @"\ter" + ter.idTermino + extension; fichero.SaveAs(rutacompleta); ter.foto = "~/uploads/fotos/comp" + ter.idTermino + extension; } DbContext.SaveChanges(); return(RedirectToAction("index")); }
public ActionResult CrearTermino(Termino model, HttpPostedFileBase fichero) { var ter = new Termino { nombre = model.nombre, texto = model.texto, link = model.link }; DbContext.Termino.Add(ter); DbContext.SaveChanges(); if (fichero != null && fichero.ContentLength > 0) { try { //guardamos el fichero de la foto con nombre ter + id var nombreFichero = fichero.FileName; var extension = nombreFichero.Substring(nombreFichero.LastIndexOf(".", StringComparison.Ordinal)); var rutacompleta = Server.MapPath("~/uploads/fotos") + @"\ter" + ter.idTermino + extension; fichero.SaveAs(rutacompleta); ter.foto = "~/uploads/fotos/ter" + ter.idTermino + extension; } catch (Exception e) { //si falla el anadir la foto, borramos el elemento de la base de datos y devolvemos la vista con un error DbContext.Termino.Remove(ter); DbContext.SaveChanges(); ModelState.AddModelError("UcemeError", Utilidades.ErrorManager.ErrorCodeToString(Utilidades.ErrorCodes.ErrorAddingItem) + " " + e.Message); return(RedirectToAction("index", "Terminos")); } } DbContext.SaveChanges(); return(RedirectToAction("index")); }
private void CopiarAModelo(DBModelo q, Modelo m) { Ecuacion e = null; Termino t = null; //Copio Ecuaciones foreach (var ec in q.Ecuaciones) { e = new Ecuacion("x", 0); foreach (var ti in ec.Terminos) { t = new Termino { Id = ti.Id, Valor = ti.Valor, Variable = ti.Variable }; e.Terminos.Add(t); } e.Id = ec.Id; e.NroEcu = ec.NroEcu; e.Operador = ec.Operador; e.Preparada = ec.Preparada; e.ValorDerecho = ec.ValorDerecho; e.VariableBasica = ec.VariableBasica; m.Ecuaciones.Add(e); e = new Ecuacion("x", 0); } m.Id = q.Id; m.Nombre = q.Nombre; m.Objetivo = q.Objetivo; m.FuncionAOptimizar = new Ecuacion("tmp", 0, 0) { Id = q.FuncionAOptimizar.Id, NroEcu = q.FuncionAOptimizar.NroEcu, Operador = q.FuncionAOptimizar.Operador, Preparada = q.FuncionAOptimizar.Preparada, ValorDerecho = q.FuncionAOptimizar.ValorDerecho, VariableBasica = q.FuncionAOptimizar.VariableBasica }; foreach (var fAOp in q.FuncionAOptimizar.Terminos) { t = new Termino { Id = fAOp.Id, Valor = fAOp.Valor, Variable = fAOp.Variable }; m.FuncionAOptimizar.Terminos.Add(t); } //m.funcionOriginal.Id = model.funcionOriginal.Id; m.FuncionOriginal = new Ecuacion("tmp", 0, 0) { Id = q.FuncionOriginal.Id, NroEcu = q.FuncionOriginal.NroEcu, Operador = q.FuncionOriginal.Operador, Preparada = q.FuncionOriginal.Preparada, ValorDerecho = q.FuncionOriginal.ValorDerecho, VariableBasica = q.FuncionOriginal.VariableBasica }; foreach (var fO in q.FuncionOriginal.Terminos) { t = new Termino { Id = fO.Id, Valor = fO.Valor, Variable = fO.Variable }; m.FuncionOriginal.Terminos.Add(t); } }
public IModelo Get(string nombre) { IModelo result = new Modelo(nombre); using (StreamReader file = new StreamReader(path, true)) { bool encontrado = false; var d = file.ReadLine(); while (!file.EndOfStream && !encontrado) { if (d == "Modelo") { result.Id = Guid.Parse(file.ReadLine()); result.Nombre = file.ReadLine(); if (result.Nombre == nombre) { encontrado = true; result.Objetivo = file.ReadLine(); var next = file.ReadLine(); if (next == "FuncionOriginal") { result.FuncionOriginal.Id = Guid.Parse(file.ReadLine()); result.FuncionOriginal.NroEcu = int.Parse(file.ReadLine()); result.FuncionOriginal.Operador = file.ReadLine(); result.FuncionOriginal.ValorDerecho = decimal.Parse(file.ReadLine()); result.FuncionOriginal.VariableBasica = file.ReadLine(); next = file.ReadLine(); while (next == "FuncionOriginal.Terminos") { var ter = new Termino(); ter.Id = Guid.Parse(file.ReadLine()); ter.Valor = decimal.Parse(file.ReadLine()); ter.Variable = file.ReadLine(); result.FuncionOriginal.Terminos.Add(ter); next = file.ReadLine(); } } if (next == "FuncionAOptimizar") { result.FuncionAOptimizar.Id = Guid.Parse(file.ReadLine()); result.FuncionAOptimizar.NroEcu = int.Parse(file.ReadLine()); result.FuncionAOptimizar.Operador = file.ReadLine(); result.FuncionAOptimizar.ValorDerecho = decimal.Parse(file.ReadLine()); result.FuncionAOptimizar.VariableBasica = file.ReadLine(); next = file.ReadLine(); while (next == "FuncionAOptimizar.Terminos") { var ter = new Termino(); ter.Id = Guid.Parse(file.ReadLine()); ter.Valor = decimal.Parse(file.ReadLine()); ter.Variable = file.ReadLine(); result.FuncionAOptimizar.Terminos.Add(ter); next = file.ReadLine(); } } if (next == "Ecuacion") { while (next == "Ecuacion") { var ec = new Ecuacion("T", 0, 0); ec.Id = Guid.Parse(file.ReadLine()); ec.NroEcu = int.Parse(file.ReadLine()); ec.Operador = file.ReadLine(); ec.ValorDerecho = decimal.Parse(file.ReadLine()); ec.VariableBasica = file.ReadLine(); ec.Preparada = bool.Parse(file.ReadLine()); next = file.ReadLine(); while (next == "Ecuacion.Terminos") { var t = new Termino(); t.Id = Guid.Parse(file.ReadLine()); t.Valor = decimal.Parse(file.ReadLine()); t.Variable = file.ReadLine(); ec.Add(t); next = file.ReadLine(); } result.Ecuaciones.Add(ec); } } } else { d = file.ReadLine(); } } else { d = file.ReadLine(); } } return(result); } }
///<Summary /// /// CONTINUA LA RESOLUCION DE LA DIVISION SEGUN EL PASO EN EL QUE SE ENCUENTRE LA MISMA /// ///</Summary> /// private void ContinuarDivision(object sender, EventArgs e) { if (paso == 0) { // Dibujar el cajetin Pen lapiz = new Pen(Color.Red); lapiz.Width = 1.5F; lineas.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; lineas.DrawLine(lapiz, new Point(0, 30), new Point(0, 0)); lineas.DrawLine(lapiz, new Point(0, 30), new Point(0 + (polinomio2.ToString().Length * 12) + 20, 30)); lbExplicacion.Text = "Escribirmos los dos polinomios uno al lado del otro y cerramos el polinomio divisor entre líneas."; lineas.DrawString(polinomio2.ToString(), new Font("Dejavu Sans", 16), new SolidBrush(Color.Orange), new Point(10, 0)); // Escribir el polinomio a ser dividido en el RichTextBox y añadir los intervalos de color azul a la lista intervalozaul.Add(0); desarrollo.Text = polinomio1.ToString() + "\n"; /* * // Eliminar los espacios en blanco * string lectura = desarrollo.Text; * lectura = lectura.Substring(2); * desarrollo.Text = lectura; */ intervalozaul.Add(desarrollo.Text.Length); // Crear el RichTextBox para el polinomio resultado cocientes = new RichTextBox(); cocientes.Location = new Point(desarrollodivision.Location.X, desarrollo.Location.Y + 40); cocientes.Font = new Font("Dejavu Sans", 16); cocientes.BackColor = desarrollo.BackColor; cocientes.Size = new Size(this.ClientSize.Width, 100); cocientes.BorderStyle = BorderStyle.None; Controls.Add(cocientes); cocientes.Visible = true; cocientes.ForeColor = Color.Chartreuse; CambioColor(); paso++; } else if (paso == 1) { intervalorojo.Add(0); intervalorojo.Add(0); if (resto.ObtenerTermino(0).EsDivisible(polinomio2.ObtenerTermino(0))) // Si el termino es divisible { if (resto.Largo == polinomio1.Largo) // Si es la primera iteracion { lbExplicacion.Text = "Dividimos el primer término del polinomio a dividir entre el primer termino del polinomio divisor, y el resultado lo anotamos bajo la línea trazada anteriormente:"; } else// Para las siguientes iteraciones { lbExplicacion.Text = "Dividimos el primer término del resto obtenido entre el primer termino del polinomio divisor, y el resultado lo anotamos bajo la línea trazada anteriormente:"; } Termino cociente = resto.ObtenerTermino(0) / polinomio2.ObtenerTermino(0); resultado.AñadirTermino(new Termino(cociente)); // Añadir el intervalo a resaltar en rojo en la lista int iniciorojo = cocientes.Text.Length; intervalorojo[0] = iniciorojo; cocientes.Text += cociente.ToString(); intervalorojo[1] = (cocientes.Text.Length - iniciorojo); Resaltes(0, 0); paso++; } else // Si los terminos no son divisibles, finalizar la division { lbExplicacion.Text = "Como el primer término del resto no es divisible por el primer término del polinomio divisor, no se puede continuar la división. Se ha obtenido el cociente y resto finales."; cocientes.ForeColor = Color.Chartreuse; btContinuar.Hide(); } } else if (paso == 2) // Para los pasos pares { CambioColor(); this.Invalidate(); lbExplicacion.Text = "Multiplicamos cada termino del polinomio divisor por el término obtenido anteriormente, y el resultado lo añadimos a un polinomio que anotamos debajo del polinomio a ser dividido."; contador = 0; // Puesta a cero del contador que se usara para finalizar el temporizador // Convertir el primer termino del polinomio divisor en un polinomio para poder realizar la multiplicacion Polinomio aux = new Polinomio(cocientes.Text); Polinomio factor = new Polinomio(new List <Termino> { aux.ObtenerTermino(aux.Terminos.Count - 1) }); // Polinomio factor = new Polinomio(new List<Termino> { resultado.ObtenerTermino(resultado.Terminos.Count - 1) }); // Obtener el polinomio a restar factor.EliminarCeros(); resta = polinomio2 * factor; resta.EliminarCeros(); // Escribir en pantalla con los colores y alto de caracteres adecuados btContinuar.Hide(); intervalonaranja.Add(desarrollo.Text.Length); timer1.Start(); int finalnegro = desarrollo.Text.Length; paso++; } else // Para los pasos impares { intervalorojo.Clear(); this.Invalidate(); lbExplicacion.Text = "Restamos los polinomios anteriores"; intervalonaranja.Add(desarrollo.Text.Length); // Calcular el resto resto = resto - resta; resto.EliminarCeros(); resto.Simplificar(); resto.Ordenar(); // Dibujar la linea para la resta for (int i = 0; i < resto.ToString().Length; i++) { desarrollo.Text += "_"; } int finalnegro = desarrollo.Text.Length - intervalonaranja[intervalonaranja.Count - 1]; intervalonaranja.Add(finalnegro); int inicioazul = desarrollo.Text.Length; // Escribir el resto y cambiarlo a color azul // resto.Ordenar(); desarrollo.Text += "\n" + resto.ToString() + "\n"; int finalazul = desarrollo.Text.Length; intervalozaul.Add(inicioazul); intervalozaul.Add(finalazul - inicioazul); CambioColor(); // desarrollo.Text += "\n"; paso = 1; } }
/// <summary> /// /// METODO AUXILIAR PARA DESPEJAR LA VARIABLE MAS A LA IZQUIERDA DE LA ULTIMA ECUACION DEL /// SISTEMA /// /// </summary> /// <param name="sender"></param> /// <param name="e"></param> /// private void Despejar() { sistemapropio.SustituirValores(resultados); sistemapropio.SimplificarSistema(); sistemapropio.PasarNumerosADerecha(); sistemapropio.BorrarEcuacionesNulas(); // Despejar la variable mas a la izquierda en la ultima ecuacion // lbExplicacion.Text = "Despejamos la variable mas a la izquierda de la última ecuacion del sistema."; rtbDesarrollo.Text += "\nDespejamos la variable mas a la izquierda de la última ecuacion del sistema."; // Si la ultima ecuacion tiene un termino a cada lado, reducir el coeficiente del termino del lado izquierdo a la unidad if (sistemapropio.ObtenerEcuacion(sistemapropio.CantidadDeEcuaciones - 1).CantidadDeTerminosIzquierda == 1 && sistemapropio.ObtenerEcuacion(sistemapropio.CantidadDeEcuaciones - 1).CantidadDeTerminosDerecha == 1) { Racional coeficiente = new Racional(sistemapropio.ObtenerEcuacion(sistemapropio.CantidadDeEcuaciones - 1).ObtenerTerminoIzquierda(0).Coeficiente); sistemapropio.ObtenerEcuacion(sistemapropio.CantidadDeEcuaciones - 1).ObtenerTerminoIzquierda(0).Coeficiente = new Racional(1, 1); Termino derecho = new Termino(sistemapropio.ObtenerEcuacion(sistemapropio.CantidadDeEcuaciones - 1).ObtenerTerminoDerecha(0)); derecho = new Termino(derecho.Coeficiente / coeficiente, derecho.Variables, derecho.Exponentes); sistemapropio.ObtenerEcuacion(sistemapropio.CantidadDeEcuaciones - 1).BorrarLadoDerecho(); sistemapropio.ObtenerEcuacion(sistemapropio.CantidadDeEcuaciones - 1).AñadirTerminoDerecha(derecho); } /* * // Si en la ultima ecuacion del sistema hay mas de un termino en el lado derecho, reducir el coeficiente del termino del lado izquierdo a cero * if (sistemapropio.ObtenerEcuacion(sistemapropio.CantidadDeEcuaciones - 1).CantidadDeTerminosIzquierda > 0) * { * bool variableobtenida = false; * int indice = 0; * while (!variableobtenida) * { * if (sistemapropio.ObtenerEcuacion(sistemapropio.CantidadDeEcuaciones - 1).ObtenerTerminoIzquierda(indice).Coeficiente.Numerador != 0) * { * variable = sistemapropio.ObtenerEcuacion(sistemapropio.CantidadDeEcuaciones - 1).ObtenerTerminoIzquierda(indice).Variables[0]; * variableobtenida = true; * } * else * indice++; * } * * sistemapropio.DespejarVariableIndeterminada(variable); * } */ else { sistemapropio.ObtenerEcuacion(sistemapropio.CantidadDeEcuaciones - 1).Despejar(); Racional coeficiente = new Racional(sistemapropio.ObtenerEcuacion(sistemapropio.CantidadDeEcuaciones - 1).ObtenerTerminoIzquierda(0).Coeficiente); sistemapropio.ObtenerEcuacion(sistemapropio.CantidadDeEcuaciones - 1).ObtenerTerminoIzquierda(0).Coeficiente = new Racional(1, 1); List <Termino> auxx = new List <Termino>(); for (int i = 0; i < sistemapropio.ObtenerEcuacion(sistemapropio.CantidadDeEcuaciones - 1).CantidadDeTerminosDerecha; i++) { auxx.Add(new Termino(sistemapropio.ObtenerEcuacion(sistemapropio.CantidadDeEcuaciones - 1).ObtenerTerminoDerecha(i).Coeficiente / coeficiente, sistemapropio.ObtenerEcuacion(sistemapropio.CantidadDeEcuaciones - 1).ObtenerTerminoDerecha(i).Variables, sistemapropio.ObtenerEcuacion(sistemapropio.CantidadDeEcuaciones - 1).ObtenerTerminoDerecha(i).Exponentes)); } sistemapropio.ObtenerEcuacion(sistemapropio.CantidadDeEcuaciones - 1).BorrarLadoDerecho(); foreach (Termino t in auxx) { sistemapropio.ObtenerEcuacion(sistemapropio.CantidadDeEcuaciones - 1).AñadirTerminoDerecha(t); } } // Eliminar los ceros redundantes del lado derecho List <Termino> aux = new List <Termino>(); // int cuentaceros = 0; for (int i = 0; i < sistemapropio.CantidadDeEcuaciones; i++) { aux.Clear(); if (sistemapropio.ObtenerEcuacion(i).CantidadDeTerminosDerecha > 1) { foreach (Termino t in sistemapropio.ObtenerEcuacion(i).ObtenerLadoDerecho.Terminos) { if (t.Coeficiente != 0) { aux.Add(new Termino(t)); } } sistemapropio.ObtenerEcuacion(i).BorrarLadoDerecho(); foreach (Termino t in aux) { sistemapropio.ObtenerEcuacion(i).AñadirTerminoDerecha(t); } } } // Si no hay terminos en el lado derecho, añadir un cero if (sistemapropio.ObtenerEcuacion(sistemapropio.CantidadDeEcuaciones - 1).CantidadDeTerminosDerecha == 0) { sistemapropio.ObtenerEcuacion(sistemapropio.CantidadDeEcuaciones - 1).AñadirTerminoDerecha(new Termino(0, ' ', 1)); } // lbDesarrollo.Location = new Point(lbExplicacion.Location.X, lbExplicacion.Location.Y + lbExplicacion.Height + 20); //lbDesarrollo.Text = sistemapropio.ToString(); rtbDesarrollo.Text += "\n" + sistemapropio.ToString() + "\n\n"; rtbDesarrollo.SelectionStart = rtbDesarrollo.Text.Length; rtbDesarrollo.ScrollToCaret(); contador2++; }
private void Btn_Procesar_Click(object sender, EventArgs e) { //Creo dos terminos Termino ter = new Termino("X1", 2); Termino ter2 = new Termino("X2", 3); Termino ter3 = new Termino("X1", 2); Termino ter4 = new Termino("X2", 1); Termino ter5 = new Termino("X2", 4); Termino terz1 = new Termino("X1", 8); Termino terz2 = new Termino("X2", 10); var Lter = new List <Termino> { ter, ter2 }; //Creo la ecuación Ecuacion ecu = new Ecuacion(">=", 600, 1); Ecuacion ecu2 = new Ecuacion(">=", 500, 2); Ecuacion ecu3 = new Ecuacion(">=", 600, 3); //Agrego los terminos a la ecuación ecu.Add(ter); ecu.Add(ter2); ecu2.Add(ter3); ecu2.Add(ter4); ecu3.Add(ter5); //Creo un modelo Modelo primerModelo = new Modelo("Primer Modelo Simplex"); //Agrego la ecuacion al modelo primerModelo.Add(ecu); primerModelo.Add(ecu2); primerModelo.Add(ecu3); primerModelo.FuncionOriginal.Operador = "FOrig"; primerModelo.FuncionOriginal.ValorDerecho = 0; primerModelo.FuncionOriginal.NroEcu = -1; primerModelo.FuncionOriginal.Terminos.Add(terz1); primerModelo.FuncionOriginal.Terminos.Add(terz2); primerModelo.MostrarModelo(); primerModelo.Preparo(); // //traigo un modelo desde SQL // //IModeloRepository CSVRepository = new CSVSimplexRepository(); //ShowRepositoryType(CSVRepository); //CSVRepository.Add(primerModelo); //primerModelo.Nombre = "Segundo Modelo Simplex"; //CSVRepository.Add(primerModelo); //primerModelo.Nombre = "Tercer Modelo Simplex"; //CSVRepository.Add(primerModelo); //var output = CSVRepository.Get("Segundo Modelo Simplex"); //CSVRepository.Remove("Segundo Modelo Simplex"); IModeloRepository SQLRepository = new SQLSimplexRepository(); ShowRepositoryType(SQLRepository); primerModelo.Nombre = "Modelo Simplex Preparado"; SQLRepository.Add(primerModelo); //var x = SQLRepository.Get("ModeloModificado00"); //SQLRepository.Remove(x.Id); //SQLRepository.DeleteModelo(mdel.Id); //primerModelo.Nombre = "Segundo Modelo Simplex"; //SQLRepository.Add(primerModelo); //primerModelo.Nombre = "Tercer Modelo Simplex"; //SQLRepository.Add(primerModelo); primerModelo.MostrarModelo(); primerModelo.Proceso(); //SQLRepository.SaveModelo(primerModelo); primerModelo.MostrarModelo(); }