예제 #1
0
        /// <summary>
        ///
        /// REALIZA LAS OPERACIONES PARA LLEGAR A LA ECUACION DEL PLANO SIMPLIFICADA Y FINALIZA LA
        /// EXPLICACION
        ///
        ///
        /// </summary>
        ///
        private void FinalizarResolucion()
        {
            lbExplicacion.Text = " Una vez planteada la ecuación, podemos continuar realizando los productos y sumas y despejar el termino independiente. \n Con esto obtenemos la ecuación simplificada de este plano.";
            if (!directa)
            {
                label1.Text += "\n" + Racional.AString(vector.Componentes[0] * punto1.Coordenadas[0]) + " - " + Racional.AString(vector.Componentes[0]) + "X +" + Racional.AString(vector.Componentes[1] * punto1.Coordenadas[1]) + " - " + Racional.AString(vector.Componentes[1]) + "Y +" + Racional.AString(vector.Componentes[2] * punto1.Coordenadas[2]) + " - " + Racional.AString(vector.Componentes[2]) + "Z = 0";
            }
            label2.Show();
            label2.Location  = new Point(label1.Location.X, label1.Location.Y + label1.Height + 10);
            label2.BackColor = Color.Chartreuse;
            Plano plano = new Plano(vector, punto1);

            ecuacion    = plano.EcuacionDelPlano();
            label2.Text = ecuacion.ToString();
            int altoletra = 400 / label2.Text.Length;

            label2.Font = new Font("Dejavu Sans", altoletra);
            btContinuar.Hide();
            btCentrar.PerformClick();
            if (defecto)
            {
                btArriba.PerformClick();
                btArriba.PerformClick();
            }
        }
예제 #2
0
        public ActionResult DeleteConfirmed(int id)
        {
            Ecuacion ecuacion = db.Ecuacions.Find(id);

            db.Ecuacions.Remove(ecuacion);
            db.SaveChanges();
            return(RedirectToAction("Index"));
        }
예제 #3
0
 public ActionResult Edit([Bind(Include = "ecuacion_id,ecuacion_a,ecuacion_b,ecuacion_c")] Ecuacion ecuacion)
 {
     if (ModelState.IsValid)
     {
         db.Entry(ecuacion).State = EntityState.Modified;
         db.SaveChanges();
         return(RedirectToAction("Index"));
     }
     return(View(ecuacion));
 }
예제 #4
0
        public ActionResult Create([Bind(Include = "ecuacion_id,ecuacion_a,ecuacion_b,ecuacion_c")] Ecuacion ecuacion)
        {
            if (ModelState.IsValid)
            {
                db.Ecuacions.Add(ecuacion);
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }

            return(View(ecuacion));
        }
예제 #5
0
        // GET: Ecuacion/Delete/5
        public ActionResult Delete(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            Ecuacion ecuacion = db.Ecuacions.Find(id);

            if (ecuacion == null)
            {
                return(HttpNotFound());
            }
            return(View(ecuacion));
        }
예제 #6
0
        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);
        }
예제 #7
0
        /// <summary>
        ///
        /// CONTRUYE EL SISTEMA IGUALANDO LAS DOS PRIMERAS ECUACIONES PARAMETRICAS DE CADA
        /// RECTA Y CONTINUA LA EXPLICACION
        ///
        /// </summary>
        ///
        private void ContinuarResolucion()
        {
            lbExplicacion.Text = " El punto de intersección en caso de que exista, será un punto que estará en las dos rectas, por lo tanto cumplirá las ecuaciones paramétricas de ambas.\n Si llamamos t al parametro de la recta 1 y s al parametro de la recta 2, e igualamos las dos primeras ecuaciones de cada recta, podemos calcular el valor del parametro que hay que aplicar en la ecuación de cada recta para determinar las coordenadas del punto de intersección";

            ecuaciones1 = linea1.EcuacionesParametricas();
            ecuaciones2 = linea2.EcuacionesParametricas();
            Ecuacion ecuacion1 = new Ecuacion(new List <Termino>(), new List <Termino>());
            Ecuacion ecuacion2 = new Ecuacion(new List <Termino>(), new List <Termino>());

            ecuacion1.ObtenerLadoDerecho.EliminarCeros();
            ecuacion1.ObtenerLadoIzquierdo.EliminarCeros();
            ecuacion2.ObtenerLadoDerecho.EliminarCeros();
            ecuacion2.ObtenerLadoIzquierdo.EliminarCeros();
            foreach (Termino t in ecuaciones1[0].ObtenerLadoDerecho.Terminos)
            {
                if (t.Variables[0] != ' ')
                {
                    ecuacion1.AñadirTerminoIzquierda(new Termino(t.Coeficiente, 't', t.Exponentes[0]));
                }
                else
                {
                    ecuacion1.AñadirTerminoIzquierda(new Termino(t.Coeficiente, t.Variables[0], t.Exponentes[0]));
                }
            }
            foreach (Termino t in ecuaciones2[0].ObtenerLadoDerecho.Terminos)
            {
                if (t.Variables[0] != ' ')
                {
                    ecuacion1.AñadirTerminoDerecha(new Termino(t.Coeficiente, 's', t.Exponentes[0]));
                }
                else
                {
                    ecuacion1.AñadirTerminoDerecha(new Termino(t.Coeficiente, t.Variables[0], t.Exponentes[0]));
                }
            }
            foreach (Termino t in ecuaciones1[1].ObtenerLadoDerecho.Terminos)
            {
                if (t.Variables[0] != ' ')
                {
                    ecuacion2.AñadirTerminoIzquierda(new Termino(t.Coeficiente, 't', t.Exponentes[0]));
                }
                else
                {
                    ecuacion2.AñadirTerminoIzquierda(new Termino(t.Coeficiente, t.Variables[0], t.Exponentes[0]));
                }
            }
            foreach (Termino t in ecuaciones2[1].ObtenerLadoDerecho.Terminos)
            {
                if (t.Variables[0] != ' ')
                {
                    ecuacion2.AñadirTerminoDerecha(new Termino(t.Coeficiente, 's', t.Exponentes[0]));
                }
                else
                {
                    ecuacion2.AñadirTerminoDerecha(new Termino(t.Coeficiente, t.Variables[0], t.Exponentes[0]));
                }
            }
            if (!directa)
            {
                flotante.Size             = new Size(flotante.Width, flotante.Height + 100);
                flotante.pnParametro.Size = new Size(flotante.pnParametro.Width, flotante.pnParametro.Height + 100);

                flotante.lbTituloParametro.Text += "\n\nSistema igualando las dos primeras ecuaciones:\n";
                double aux1i = ecuacion1.ObtenerTerminoIzquierda(0).Coeficiente.ToDouble();
                double aux2i = 0;
                if (ecuacion1.ObtenerLadoIzquierdo.Largo > 1)
                {
                    aux2i = ecuacion1.ObtenerTerminoIzquierda(1).Coeficiente.ToDouble();
                }
                double aux1d = ecuacion1.ObtenerTerminoDerecha(0).Coeficiente.ToDouble();
                double aux2d = 0;
                if (ecuacion1.ObtenerLadoDerecho.Largo > 1)
                {
                    aux2d = ecuacion1.ObtenerTerminoDerecha(1).Coeficiente.ToDouble();
                }

                flotante.lbTituloParametro.Text += Math.Round(aux1i, 4).ToString() + " t ";
                if (aux2i > 0)
                {
                    flotante.lbTituloParametro.Text += " + ";
                }
                flotante.lbTituloParametro.Text += Math.Round(aux2i, 4).ToString() + ecuacion1.ObtenerTerminoIzquierda(1).Variables[0] + " = ";

                flotante.lbTituloParametro.Text += Math.Round(aux1d, 4).ToString() + " s ";
                if (aux2d > 0)
                {
                    flotante.lbTituloParametro.Text += " + ";
                }
                if (ecuacion1.ObtenerLadoDerecho.Largo > 1)
                {
                    flotante.lbTituloParametro.Text += Math.Round(aux2d, 4).ToString() + ecuacion1.ObtenerTerminoDerecha(1).Variables[0];
                }


                aux1i = ecuacion2.ObtenerTerminoIzquierda(0).Coeficiente.ToDouble();
                if (ecuacion2.ObtenerLadoIzquierdo.Largo > 1)
                {
                    aux2i = ecuacion2.ObtenerTerminoIzquierda(1).Coeficiente.ToDouble();
                }
                aux1d = ecuacion2.ObtenerTerminoDerecha(0).Coeficiente.ToDouble();
                if (ecuacion2.ObtenerLadoDerecho.Largo > 1)
                {
                    aux2d = ecuacion2.ObtenerTerminoDerecha(1).Coeficiente.ToDouble();
                }
                flotante.lbTituloParametro.Text += "\n" + Math.Round(aux1i, 4).ToString() + " t ";
                if (aux2i > 0)
                {
                    flotante.lbTituloParametro.Text += " + ";
                }
                if (ecuacion2.ObtenerLadoIzquierdo.Largo > 1)
                {
                    flotante.lbTituloParametro.Text += Math.Round(aux2i, 4).ToString() + ecuacion2.ObtenerTerminoIzquierda(1).Variables[0] + " = ";
                }
                else
                {
                    flotante.lbTituloParametro.Text += " = ";
                }

                flotante.lbTituloParametro.Text += Math.Round(aux1d, 4).ToString() + " s ";
                if (aux2d > 0)
                {
                    flotante.lbTituloParametro.Text += " + ";
                }
                if (ecuacion2.ObtenerLadoDerecho.Largo > 1)
                {
                    flotante.lbTituloParametro.Text += Math.Round(aux2d, 4).ToString() + ecuacion2.ObtenerTerminoDerecha(1).Variables[0];
                }
            }
            if (directa)
            {
                FinalizarResolucion();
            }
        }
예제 #8
0
        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);
            }
        }
예제 #9
0
        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);
            }
        }
예제 #10
0
        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();
        }