示例#1
0
 public override void btNuevo_Click(object sender, EventArgs e)
 {
     if (matriz != null)
     {
         foreach (TextBox t in matriz)
         {
             t.Dispose();
         }
     }
     if (adjunta != null)
     {
         foreach (Label l in adjunta)
         {
             l.Dispose();
         }
     }
     defecto = false;
     btDefecto.Show();
     EtiquetaFilas.Show();
     tbFilas.ResetText();
     tbFilas.Show();
     lbExplicacion.Show();
     lbExplicacion.Text = "Introducir números enteros. \n\n( Pulsar el botón 'E' para resolución de ejemplo con valores por defecto. )";
     btContinuar.Hide();
     label1.Hide();
     label2.Hide();
     tbFilas.Focus();
 }
示例#2
0
 public override void Cargar(object sender, EventArgs e)
 {
     this.MinimumSize = new Size(1300, 700);
     this.Text        = "Determinante de una matriz cuadrada.";
     lbExplicacion.Show();
     lbExplicacion.Text = "Introducir un número entero.\n\n(Pulsar el botón [E] para ejemplo con valores por defecto.)";
     EtiquetaFilas.Show();
     EtiquetaFilas.AutoSize = true;
     EtiquetaFilas.Location = new Point(EtiquetaFilas.Location.X, lbExplicacion.Location.Y + 120);
     EtiquetaFilas.Text     = "Cantidad de filas y columnas de la matriz: ";
     tbFilas.Show();
     tbFilas.Location   = new Point(EtiquetaFilas.Location.X + EtiquetaFilas.Size.Width + 10, EtiquetaFilas.Location.Y);
     tbFilas.TextAlign  = HorizontalAlignment.Center;
     btDefecto.Location = new Point(tbFilas.Location.X + tbFilas.Size.Width + 5, EtiquetaFilas.Location.Y);
     tbFilas.Focus();
     tbFilas.KeyPress      += tbOrden_KeyPress;
     btDefecto.Click       += btDefecto_Click;
     btContinuar.Click     += btContinuar_Click;
     btNuevo.Click         += btNuevo_Click;
     radioButton1.Click    += rbSeleccion_Click;
     radioButton2.Click    += rbSeleccion_Click;
     radioButton3.Click    += rbSeleccion_Click;
     Temporizador1.Tick    += Temporizador1_Tick;
     Temporizador1.Interval = 1000;
 }
示例#3
0
 public override void Cargar(object sender, EventArgs e)
 {
     this.Text = "Multiplicación y división de polinomios";
     lbExplicacion.Show();
     lbExplicacion.Text = "Introduzca el primer polinomio:";
     if (!directa)
     {
         lbExplicacion.Text += "\n\nO pulse el botón [E] para resolución de ejemplo con valores por omisión.";
     }
     EtiquetaFilas.Show();
     EtiquetaFilas.Location = new Point(20, lbExplicacion.Height + 20);
     EtiquetaFilas.Text     = "Primer polinomio:";
     EtiquetaFilas.AutoSize = true;
     tbFilas.Show();
     tbFilas.Location  = new Point(EtiquetaFilas.Location.X + EtiquetaFilas.Width + 10, EtiquetaFilas.Location.Y);
     tbFilas.Size      = new Size(600, tbFilas.Height);
     tbFilas.KeyPress += Cajas_KeyPress;
     tbFilas.Focus();
     if (directa)
     {
         btDefecto.Hide();
     }
     btDefecto.Location = new Point(tbFilas.Location.X + tbFilas.Width + 10, tbFilas.Location.Y);
     timer1             = new Timer();
     timer1.Interval    = 1500;
     timer1.Tick       += timer1_Tick;
 }
示例#4
0
        /// <summary>
        ///
        ///  CAMBIA EL CONTENIDO Y EL NOMBRE DE LA ETIQUETA PARA EL ORDEN DE LA MATRIZ, Y MUESTRA EL
        ///  VALOR DEL DETERMINANTE, EN LA CAJA DE TEXTO DONDE SE INTRODUJO EL ORDEN EL DE LA MISMA.
        ///
        /// </summary>

        internal void MostrarResultado()
        {
            EtiquetaFilas.Text = " El determinante de la matriz introducida es: ";
            Racional resultado = Matematicas.AlgebraLineal.Determinante(matrizracional);

            tbFilas.Size       = new Size(Racional.AString(resultado).Length * 15, tbFilas.Size.Height);
            tbFilas.Text       = Racional.AString(resultado);
            tbFilas.BackColor  = Color.GreenYellow;
            lbExplicacion.Text = "";
            EtiquetaFilas.Focus();
        }
示例#5
0
        /// <summary>
        ///
        ///  INICIA EL METODO DE RESOLUCION PASO A PASO POR EL METODO DE LAS DIAGONALES
        ///
        /// </summary>

        private void rbSeleccion_Click(object sender, EventArgs e)
        {
            if (sender == radioButton1)
            {
                this.Text += "  ( Método de las diagonales )";
                diagonales = true;
                btContinuar.Show();
                paso = 0;
                btContinuar.Location = new Point(900, 200);
                radioButton1.Hide();
                radioButton2.Hide();
                radioButton3.Hide();
                EtiquetaFilas.Hide();
                tbFilas.Hide();
                lbExplicacion.Focus();

                lbExplicacion.Text = " Primero hacemos el producto de los elementos de la diagonal principal y guardamos el resultado.";

                label1.Text = "";
                label1.Show(); // Etiqueta con el planteamiento
                label1.Location  = new Point(matriz[matriz.GetLength(0) - 1, 0].Location.X, (matriz[matriz.GetLength(1) - 1, 0].Location.Y + matriz[0, 0].Height + 10));
                label1.BackColor = Color.SeaGreen;
                label1.ForeColor = Color.Silver;
                label1.TextAlign = ContentAlignment.MiddleLeft;

                string planteamiento = PintarDiagonal(matriz, 0, Color.GreenYellow, ref producto);
                label1.Text = planteamiento + " " + Racional.AString(producto);

                label2.Show(); // Etiqueta para Memo
                label2.Text      = "Memo: ";
                label2.Location  = new Point(label1.Location.X, label1.Location.Y + label1.Height + 10);
                label2.Text     += ":   " + Racional.AString(producto);
                label2.ForeColor = label1.ForeColor;
                label2.TextAlign = ContentAlignment.MiddleLeft;
                label2.BackColor = label1.BackColor;

                productos.Add(producto);
                paso++;
            }
            else if (sender == radioButton2)
            {
                this.Text += "  ( Método de las menores principales. )";
                menores    = true;
                Resolucion();
            }
            else if (sender == radioButton3)
            {
                this.Text += "  ( Método de Gauss. )";
                gauss      = true;
                Resolucion();
            }
        }
示例#6
0
        /// <summary>
        ///
        ///  MUESTRA EN PANTALLA LA MATRIZ DE CAJAS DE TEXTO DEL ORDEN INTRODUCIDO, DONDE SE
        ///  INTRODUCIRAN LOS VALORES Racional DE LA MATRIZ CUYO DETERMINANTE SE QUIERE CALCULAR
        ///
        /// </summary>

        internal void ConstruirMatriz()
        {
            btDefecto.Hide();
            EtiquetaFilas.Hide();
            tbFilas.Hide();
            if (!defecto)
            {
                lbExplicacion.Text = " Introducir enteros o racionales. ( ejemplos; 3 ; 1/3, 5/14 ; etc )";
            }
            if (defecto)
            {
                orden = 3;
            }
            int indicetabulador = 0;

            matriz = new TextBox[orden, orden];
            Point origen = new Point(150, 200);

            for (int i = 0; i < orden; i++)
            {
                for (int j = 0; j < orden; j++)
                {
                    matriz[i, j]           = new TextBox();
                    matriz[i, j].Size      = new Size(50, 20);
                    matriz[i, j].Location  = origen;
                    matriz[i, j].TabIndex  = indicetabulador;
                    matriz[i, j].KeyPress += Matriz_KeyPress;
                    matriz[i, j].TextAlign = HorizontalAlignment.Center;
                    Controls.Add(matriz[i, j]);
                    matriz[i, j].Show();
                    origen.X += 60;
                    indicetabulador++;
                }
                origen.X  = 150;
                origen.Y += 30;
            }
            matriz[0, 0].Focus();
            label1.Show();
            label1.Text      = "Matriz Introducida";
            label1.BackColor = Color.SeaGreen;
            label1.Font      = new Font("Dejavu Sans", 9, FontStyle.Underline);
            label1.Location  = new Point(matriz[0, 0].Location.X, matriz[0, 0].Location.Y - 20);
            if (defecto)
            {
                matriz[0, 0].Text = "3"; matriz[0, 1].Text = "7"; matriz[0, 2].Text = "4";
                matriz[1, 0].Text = "9"; matriz[1, 1].Text = "5"; matriz[1, 2].Text = "1";
                matriz[2, 0].Text = "2"; matriz[2, 1].Text = "4"; matriz[2, 2].Text = "6";
                ConstruirAdjunta();
            }
        }
示例#7
0
 public override void Cargar(object sender, EventArgs e)
 {
     this.MinimumSize = new Size(1300, 700);
     this.Text        = "Matriz adjunta de una matriz cuadrada.";
     EtiquetaFilas.Show();
     tbFilas.Show();
     EtiquetaFilas.Text = "Cantidad de filas y columnas de la matriz:";
     btSalir.Click     += btSalir_Click;
     tbFilas.KeyPress  += tbFilas_KeyPress;
     lbExplicacion.Show();
     lbExplicacion.Text     = "Introducir números enteros. \n\n( Pulsar el botón 'E' para resolución de ejemplo con valores por defecto. )";
     btContinuar.Click     += ResolucionPasoAPaso;
     lbExplicacion.Size     = new Size(lbExplicacion.Size.Width - 15, lbExplicacion.Size.Height);
     btDefecto.Click       += btDefecto_Click;
     btNuevo.Click         += btNuevo_Click;
     EtiquetaFilas.Location = new Point(EtiquetaFilas.Location.X, lbExplicacion.Height + 5);
     tbFilas.Location       = new Point(tbFilas.Location.X, EtiquetaFilas.Location.Y);
     btDefecto.Location     = new Point(btDefecto.Location.X, tbFilas.Location.Y);
 }
示例#8
0
 public override void Cargar(object sender, EventArgs e)
 {
     if (directa)
     {
         btDefecto.Hide();
     }
     this.Text = "Convertir decimales en racional";
     lbExplicacion.Show();
     if (!directa)
     {
         lbExplicacion.Text = "Introducir un número decimal.\n\n O pulse el botón [E] para ejemplo con valores por defecto. ";
     }
     else
     {
         lbExplicacion.Text = "Introducir un número decimal.";
     }
     EtiquetaFilas.Show();
     EtiquetaFilas.Text     = "Decimal:";
     EtiquetaFilas.Location = new Point(100, 100);
     EtiquetaFilas.AutoSize = true;
     tbFilas.Show();
     tbFilas.Location = new Point(EtiquetaFilas.Location.X + EtiquetaFilas.Width + 5, EtiquetaFilas.Location.Y);
     tbFilas.Size     = new Size(105, EtiquetaFilas.Height);
     tbFilas.Focus();
     tbFilas.KeyPress += tbFilas_KeyPress;
     if (directa)
     {
         btDefecto.Hide();
     }
     btDefecto.Location   = new Point(tbFilas.Location.X + tbFilas.Width + 5, tbFilas.Location.Y);
     btContinuar.Click   += btContinuar_Click;
     btContinuar.Location = new Point(EtiquetaFilas.Location.X, EtiquetaFilas.Location.Y + 50);
     label1.Location      = new Point(btContinuar.Location.X, btContinuar.Location.Y + btContinuar.Height + 5);
     label1.BackColor     = Color.Transparent;
     label1.AutoSize      = true;
     label1.TextAlign     = ContentAlignment.MiddleLeft;
     label2.BackColor     = Color.Chartreuse;
     label2.AutoSize      = true;
     label2.TextAlign     = ContentAlignment.MiddleLeft;
 }
示例#9
0
        public override void Cargar(object sender, EventArgs e)
        {
            if (directa)
            {
                btDefecto.Hide();
            }

            this.Text = "Módulo y argumento de números complejos";

            lbExplicacion.Show();
            lbExplicacion.Text = "Introduzca la parte real e imaginaria del número complejo.\n\nO pulse el botón [E] para ejemplo con valores por defecto.";

            grafica = new Espacio2D(750, 600, new Point(10, lbExplicacion.Height + 15));
            Controls.Add(grafica.Ventana);
            grafica.Ventana.Hide();

            EtiquetaFilas.Show();
            EtiquetaFilas.Text     = "Parte real:";
            EtiquetaFilas.Location = new Point(grafica.Ventana.Location.X + grafica.Ventana.Width + 5, grafica.Ventana.Location.Y);
            EtiquetaFilas.AutoSize = true;

            EtiquetaColumnas.Show();
            EtiquetaColumnas.Location = new Point(EtiquetaFilas.Location.X, EtiquetaFilas.Location.Y + EtiquetaFilas.Height + 5);
            EtiquetaColumnas.Text     = "Parte imaginaria:";
            EtiquetaColumnas.AutoSize = true;

            tbcolumnas.Show();
            tbcolumnas.Location  = new Point(EtiquetaColumnas.Location.X + EtiquetaColumnas.Width + 5, EtiquetaColumnas.Location.Y);
            tbcolumnas.KeyPress += Cajas_KeyPress;

            tbFilas.Show();
            tbFilas.Location  = new Point(tbcolumnas.Location.X, EtiquetaFilas.Location.Y);
            tbFilas.KeyPress += Cajas_KeyPress;

            btDefecto.Location = new Point(tbFilas.Location.X + tbFilas.Width + 10, tbFilas.Location.Y - 2);
        }
示例#10
0
 private void btContinuar_Click(object sender, EventArgs e)
 {
     if (paso == 0)
     {
         indicesrojos = new List <int>();
         if (!directa)
         {
             lbExplicacion.Text = "El número imaginario unidad es √-1 y se indica como 'i'. Un número imaginario de coeficiente distinto a la unidad, se indica 'ci' donde c es un número real que es el coeficiente. Tambien se puede expresar en combinación con un número real con la forma: a + ci , donde 'a' y 'c' son números reales, en estos casos se denominan: numeros complejos.\nEl cuadrado del imaginario unidad, es -1.";
         }
         else if (directa)
         {
             lbExplicacion.Text += "\nEl número imaginario unidad es √-1 y se indica como 'i'. Un número imaginario de coeficiente distinto a la unidad, se indica 'ci' donde c es un número real que es el coeficiente. Tambien se puede expresar en combinación con un número real con la forma: a + ci , donde 'a' y 'c' son números reales, en estos casos se denominan: numeros complejos.\nEl cuadrado del imaginario unidad, es -1.";
         }
         rtbExplicaciones.Text = "i: Número imaginario unidad igual a la raiz de -1 ";
         indicesrojos.Add(0);
         indicesrojos.Add(1);
         indicesrojos.Add(rtbExplicaciones.Text.Length);
         rtbExplicaciones.Text += "\n\n2i:  √(-4) = √(4 * -1) = 2√(-1) = 2i Imaginario puro";
         indicesrojos.Add(4);
         indicesrojos.Add(rtbExplicaciones.Text.Length);
         rtbExplicaciones.Text += "\n\n15+2i: Combinacion de un número real (15) más un imaginario (2i). Número complejo.";
         indicesrojos.Add(7);
         indicesrojos.Add(rtbExplicaciones.Text.Length);
         rtbExplicaciones.Text += "\n\ni^2 = -1";
         indicesrojos.Add(5);
         for (int i = 0; i < indicesrojos.Count; i += 2)
         {
             rtbExplicaciones.Select(indicesrojos[i], indicesrojos[i + 1]);
             rtbExplicaciones.SelectionColor = Color.Red;
             rtbExplicaciones.SelectionFont  = new Font("Dejavu Sans", 14, FontStyle.Bold);
         }
         paso++;
     }
     else if (paso == 1)
     {
         if (!directa)
         {
             lbExplicacion.Text = "Un número complejo se puede representar gráficamente, considerando la parte real como el valor de las abcisas ( eje X ), y el coeficiente imaginario como valor de las ordenadas ( eje Y ).\nEn el ejemplo, se puede ver la representación gráfica del complejo: 5 + 9i ";
         }
         else if (directa)
         {
             lbExplicacion.Text += "\nUn número complejo se puede representar gráficamente, considerando la parte real como el valor de las abcisas ( eje X ), y el coeficiente imaginario como valor de las ordenadas ( eje Y ).\nEn el ejemplo, se puede ver la representación gráfica del complejo: 5 + 9i ";
         }
         EtiquetaFilas.Show();
         EtiquetaFilas.Location = new Point(btContinuar.Location.X, btContinuar.Location.Y + btContinuar.Height + 5);
         EtiquetaFilas.Text     = "Parte real:";
         EtiquetaFilas.AutoSize = true;
         tbFilas.Show();
         tbFilas.Location  = new Point(EtiquetaFilas.Location.X, EtiquetaFilas.Location.Y + EtiquetaFilas.Height + 5);
         tbFilas.Width     = EtiquetaFilas.Width;
         tbFilas.Text      = "5";
         tbFilas.KeyPress += Cajas_KeyPress;
         tbFilas.TextAlign = HorizontalAlignment.Center;
         label2.Show();
         label2.BackColor = Color.Transparent;
         label2.Location  = new Point(tbFilas.Location.X + tbFilas.Width + 5, tbFilas.Location.Y);
         label2.Font      = EtiquetaFilas.Font;
         label2.Text      = "+";
         label2.Width     = 3;
         label2.TextAlign = ContentAlignment.MiddleCenter;
         EtiquetaColumnas.Show();
         EtiquetaColumnas.Location = new Point(label2.Location.X + label2.Width + 5, EtiquetaFilas.Location.Y);
         EtiquetaColumnas.Text     = "Parte imaginaria";
         EtiquetaColumnas.AutoSize = true;
         tbcolumnas.Show();
         tbcolumnas.Location  = new Point(EtiquetaColumnas.Location.X, tbFilas.Location.Y);
         tbcolumnas.Width     = EtiquetaColumnas.Width;
         tbcolumnas.Text      = "9";
         tbcolumnas.TextAlign = HorizontalAlignment.Center;
         tbcolumnas.KeyPress += Cajas_KeyPress;
         imaginario           = new Imaginario(5, 9);
         label1.Show();
         label1.BackColor = Color.Transparent;
         label1.Font      = EtiquetaFilas.Font;
         label1.Location  = new Point(tbcolumnas.Location.X + tbcolumnas.Width + 5, tbcolumnas.Location.Y);
         label1.Text      = "i";
         if (!directa)
         {
             grafica = new Espacio2D(750, 600, new Point(10, lbExplicacion.Height + 5));
         }
         else if (directa)
         {
             grafica = new Espacio2D(750, 600, new Point(10, lbExplicacion.Height + 10));
         }
         Controls.Add(grafica.Ventana);
         pnZoom.Show();
         pnZoom.Location = new Point(tbFilas.Location.X, tbFilas.Location.Y + tbFilas.Height + 5);
         btAbajo.Show();
         btAbajo.Click += MoverAbajo;
         btArriba.Show();
         btArriba.Click += MoverArriba;
         btDerecha.Show();
         btDerecha.Click += MoverDerecha;
         btIzquierda.Show();
         btIzquierda.Click += MoverIzquierda;
         btCentrar.Show();
         btCentrar.Click += Centrar;
         btZoomMas.Show();
         btZoomMas.Click += ZoomMas;
         btZoomMenos.Show();
         btZoomMenos.Click += ZoomMenos;
         lbDesplazamiento.Show();
         lbZoomtitulo.Show();
         radioButton1.Show();
         radioButton1.Location = new Point(rtbExplicaciones.Location.X, rtbExplicaciones.Location.Y - 30);
         radioButton2.Show();
         radioButton2.Text     = "Escala Decimal.";
         radioButton1.Text     = "Escala Racional";
         radioButton2.Location = new Point(radioButton1.Location.X + radioButton1.Width + 5, radioButton1.Location.Y);
         if (!directa)
         {
             grafica.PintarLinea(new Punto(new Racional[] { new Racional(0, 1), new Racional(0, 1) }), new Punto(new Racional[] { imaginario.ParteReal, imaginario.ParteImaginaria }), Color.Red, 3, true);
         }
         paso++;
     }
     else if (!directa && paso == 2)
     {
         lbExplicacion.Text = "Introduzca los valores de cualquier imaginario, con coeficientes enteros o racionales, para ver su representacion grafica.";
         tbFilas.Focus();
         tbFilas.SelectAll();
         grafica.PintarLinea(new Punto(new Racional[] { new Racional(0, 1), new Racional(0, 1) }), new Punto(new Racional[] { imaginario.ParteReal, imaginario.ParteImaginaria }), Color.Red, 3, true);
         grafica.Ventana.Invalidate();
         btContinuar.BackColor = Color.SeaGreen;
         btContinuar.Text      = "";
         btContinuar.Size      = new Size(0, 0);
     }
     else if (directa && paso >= 2)
     {
         if (paso > 2)
         {
             grafica.PintarLinea(new Punto(new Racional[] { new Racional(0, 1), new Racional(0, 1) }), new Punto(new Racional[] { imaginario.ParteReal, imaginario.ParteImaginaria }), Color.Red, 3, true);
             grafica.Ventana.Invalidate();
         }
         else if (paso == 2)
         {
             lbExplicacion.Text += "\nIntroduzca los valores de cualquier imaginario, con coeficientes enteros o racionales, para ver su representacion grafica.";
         }
         tbFilas.ResetText();
         tbcolumnas.ResetText();
         label2.Text = "";
         tbFilas.Focus();
         paso++;
     }
 }
示例#11
0
        /// <summary>
        ///
        ///  LLEVA A CABO LA EXPLICACION PASO A PASO DEL METODO DE RESOLUCION ELEGIDO ANTERIORMENTE
        ///
        /// </summary>

        private void Resolucion()
        {
            if (diagonales) // Resolucion por el metodo de las diagonales
            {
                label3.Location  = new Point(label2.Location.X, label2.Location.Y + label2.Size.Height + 10);
                label3.BackColor = label1.BackColor;
                label4.Location  = new Point(label3.Location.X, label3.Location.Y + label3.Height + 10);
                label3.AutoSize  = true;
                label4.Location  = new Point(label3.Location.X, label3.Location.Y + label3.Height + 10);

                bool ordendos = (matriz.GetLength(0) == 2); // Si la matriz es de orden dos

                lbExplicacion.Text = " Realizamos la misma operacion con todas las diagonales a la derecha.";

                producto = new Racional(1, 1);
                if ((!ordendos & paso < matriz.GetLength(0)) || (ordendos & paso == 0))  // Mientras no se llegue a todas las diagonales a la derecha
                {
                    DespintarCajas();
                    string planteamiento = PintarDiagonal(matriz, paso, Color.GreenYellow, ref producto);
                    label1.Text = planteamiento + " " + Racional.AString(producto);

                    label2.Show();
                    if (producto.Numerador >= 0)
                    {
                        label2.Text += " + ";
                    }
                    if (paso == matriz.GetLength(0))
                    {
                        label2.Text += " = ";
                    }

                    label2.Text += Racional.AString(producto);

                    productos.Add(producto);
                }
                else if ((!ordendos && paso == orden) || (ordendos && paso == 1))// Cuando se hayan realizado todas las diagonales a la derecha
                {
                    Racional totalderecha = 0;
                    foreach (Racional r in productos)
                    {
                        totalderecha += r;
                    }
                    label3.Show(); // Etiqueta para el resultado de las diagonales a la derecha
                    label3.Text      = "Total derecha: " + Racional.AString(totalderecha);
                    label3.Location  = new Point(label2.Location.X, label2.Location.Y + label2.Size.Height + 10);
                    label3.BackColor = label1.BackColor;

                    lbExplicacion.Text = " Una vez realizado el producto de todas las diagonales a la derecha, los sumamos y procedemos a realizar el producto de los elementos de las diagonales a la izquierda.";
                }
                else // Productos de las diagonales a la izquierda
                {
                    if ((!ordendos && descontador >= 0) || (ordendos && paso == 2))
                    {
                        if (descontador == orden - 1)
                        {
                            lbExplicacion.Text = "Comenzamos con el producto de la primera diagonal a la izquierda.";
                        }
                        else
                        {
                            lbExplicacion.Text = " Continuamos realizando el producto de la siguiente diagonal hacia la izquierda: ";
                        }

                        DespintarCajas();
                        producto = 1;
                        string planteamiento = PintarDiagonalIzquierda(matriz, descontador, Color.Coral, ref producto);
                        label1.Text = planteamiento + " = " + Racional.AString(producto);
                        productosizquierda.Add(producto);
                        if (descontador == matriz.GetLength(0) - 1)
                        {
                            label2.Text = " ";
                            label2.Text = "Memo: " + Racional.AString(producto);
                        }
                        else
                        {
                            if (producto.Numerador >= 0)
                            {
                                label2.Text += " + ";
                            }
                            label2.Text += Racional.AString(producto);
                        }
                        descontador--;
                    }
                    else
                    {
                        label2.Text        = " ";
                        lbExplicacion.Text = " Por ultimo restamos al total de la suma de productos de las diagonales a la derecha, el total de la suma de productos de las diagonales a la izquierda. ";
                        Racional totalizquierda = 0;
                        label1.Text = "  ";
                        foreach (Racional r in productosizquierda)
                        {
                            totalizquierda += r;
                        }
                        label4.Show();
                        label4.BackColor = Color.SeaGreen;
                        label4.Text      = "Toltal izquierda:  " + Racional.AString(totalizquierda);
                        Racional totalderecha = 0;
                        foreach (Racional r in productos)
                        {
                            totalderecha += r;
                        }
                        label1.Text = " El determinante o módulo de la matriz es: " + Racional.AString(totalderecha) + " - " + Racional.AString(totalizquierda) + " = " + Racional.AString(totalderecha - totalizquierda);
                        btContinuar.Hide();
                        foreach (TextBox t in matriz)
                        {
                            t.BackColor = Color.White;
                        }
                        lbExplicacion.Focus();
                    }
                }
            } // Fin de la resolucion por el metodo de las diagonales
            else if (menores) // Resolucion por el metodo de las menores principales
            {
                if (paso == 0) // primer paso de la resolucion
                {
                    productos.Clear();
                    producto = 0;
                    btContinuar.Show();
                    btContinuar.Location = new Point(900, 150);
                    radioButton1.Hide();
                    radioButton2.Hide();
                    radioButton3.Hide();
                    EtiquetaFilas.Hide();
                    tbFilas.Hide();
                    label1.BackColor = Color.SeaGreen;
                    label2.BackColor = Color.SeaGreen;
                    // Pintar de negro la fila y columna correspondiente
                    PintarFilaColumna(matriz, 0, 0, Color.Black);
                    lbExplicacion.Focus();
                    // Escribir explicacion en la etiqueta
                    lbExplicacion.Text  = " Primero extraemos la submatriz formada por los elementos cuya fila o columna, no coincida con el elemento numero " + paso.ToString() + " de la matriz, y calculamos el determinante de la misma.";
                    lbExplicacion.Text += " \n\r Mulplicamos el determinante de la submatriz " + Racional.AString(determinantemenor) + " por el elemento numero " + paso.ToString() + " de la matriz. ";
                    lbExplicacion.Text += " \n\r Como el indice del elemento 0 de la matriz es par, guardamos el resultado sin mas.";
                    // Mostrar el planteamiento
                    label1.Show();
                    label1.Location = new Point(matriz[0, 0].Location.X, matriz[matriz.GetLength(0) - 1, 0].Location.Y + matriz[0, 0].Height + 10);
                    label1.Text     = Racional.AString(determinantemenor) + " * " + matriz[0, 0].Text + " = " + Racional.AString(determinantemenor * Racional.StringToRacional(matriz[0, 0].Text));
                    // Mostrar el resultado anterior
                    label2.Show();
                    label2.Location = new Point(label1.Location.X, label1.Location.Y + label1.Height + 10);
                    label2.Text     = "Memo: " + Racional.AString(determinantemenor * Racional.StringToRacional(matriz[0, 0].Text));
                    productos.Add(determinantemenor * Racional.StringToRacional(matriz[0, 0].Text));
                    filaactual    = 0;
                    columnaactual = 1;
                    paso++;
                }
                else if (paso > 0)  // pasos posteriores al primero hasta llegar al orden de la matriz
                {
                    if (paso < matriz.GetLength(0))
                    {
                        // Pintar de negro la fila y columna correspondiente
                        PintarFilaColumna(matriz, filaactual, columnaactual, Color.Black);
                        // Escribir la explicacion en la etiqueta
                        lbExplicacion.Text  = " Continuamos extrayendo la submatriz formada por los elementos cuya fila o columna, no coincida con el elemento numero " + paso.ToString() + " de la matriz, y calculamos el determinante de la misma.";
                        lbExplicacion.Text += " Mulplicamos el determinante de la submatriz " + Racional.AString(determinantemenor) + " por el elemento numero " + paso.ToString() + " de la matriz. ";
                        if (paso % 2 == 0)
                        {
                            lbExplicacion.Text += " \n\r Como el indice del elemento" + paso.ToString() + "  de la matriz es par, guardamos el resultado sin mas.";
                            label1.Show();
                            label1.Text = Racional.AString(determinantemenor) + " * " + matriz[filaactual, columnaactual].Text + " = " + Racional.AString(determinantemenor * Racional.StringToRacional(matriz[filaactual, columnaactual].Text));
                            label2.Show();
                            Racional parcial = determinantemenor * Racional.StringToRacional(matriz[filaactual, columnaactual].Text);
                            if (parcial.Numerador >= 0)
                            {
                                label2.Text += " + ";
                            }
                            label2.Text += Racional.AString(parcial);
                            productos.Add(determinantemenor * Racional.StringToRacional(matriz[filaactual, columnaactual].Text));
                        }
                        else
                        {
                            lbExplicacion.Text += " \n\r Como el indice del elemento " + paso.ToString() + " de la matriz es impar, cambiamos el signo del resultado";
                            label1.Show();
                            label1.Text = Racional.AString(determinantemenor) + " * " + matriz[filaactual, columnaactual].Text + " = " + Racional.AString(determinantemenor * Racional.StringToRacional(matriz[filaactual, columnaactual].Text));
                            label2.Show();
                            Racional parcial = determinantemenor * Racional.StringToRacional(matriz[filaactual, columnaactual].Text) * -1;
                            if (parcial.Numerador >= 0)
                            {
                                label2.Text += " + ";
                            }
                            label2.Text += Racional.AString(parcial);

                            productos.Add(determinantemenor * Racional.StringToRacional(matriz[filaactual, columnaactual].Text) * -1);
                        }
                        columnaactual++;
                        if (columnaactual > matriz.GetLength(0) - 1)
                        {
                            columnaactual = 0;
                            filaactual++;
                        }
                    }
                    else
                    {
                        foreach (Racional r in productos)
                        {
                            producto += r;
                        }
                        label3.AutoSize  = true;
                        label3.Location  = new Point(label2.Location.X, label2.Location.Y + label2.Height + 10);
                        label3.BackColor = Color.SeaGreen;
                        label3.Show();
                        label3.Text = " El determinante de la matriz es la suma de los resultados anteriores: " + Racional.AString(producto);
                        foreach (TextBox t in matriz)
                        {
                            t.BackColor = Color.White;
                        }
                        label1.Hide();
                        lbExplicacion.Hide();
                        btContinuar.Hide();
                        label3.Focus();
                    }
                }
                ////////////////////////////////////
            }  // Fin de la resolucion por el metodo de las menores principales
            // Resolucion por el metodo de Gauss.
            else if (gauss)
            {
                if (paso == 0)
                {
                    lbExplicacion.Focus();
                    foreach (TextBox t in matriz)
                    {
                        t.Location = new Point(t.Location.X + (100 * matriz.GetLength(0)), t.Location.Y);
                    }

                    copiamatriz = new TextBox[matriz.GetLength(0), matriz.GetLength(0)];
                    for (int i = 0; i < matriz.GetLength(0); i++)
                    {
                        for (int j = 0; j < matriz.GetLength(0); j++)
                        {
                            copiamatriz[i, j]           = new TextBox();
                            copiamatriz[i, j].Size      = matriz[i, j].Size;
                            copiamatriz[i, j].TextAlign = HorizontalAlignment.Center;
                            copiamatriz[i, j].Location  = new Point(matriz[i, j].Location.X - (90 * matriz.GetLength(0)), matriz[i, j].Location.Y);
                            Controls.Add(copiamatriz[i, j]);
                            copiamatriz[i, j].Text = matriz[i, j].Text;
                        }
                    }

                    label5.Location = new Point(copiamatriz[0, 0].Location.X, copiamatriz[0, 0].Location.Y - 20);
                    label5.Show(); // Titulo de la matriz
                    label5.Text      = "Matriz original.";
                    label5.BackColor = Color.SeaGreen;
                    label5.Font      = new Font("Dejavu Sans", 10, FontStyle.Underline);
                    label6.Location  = new Point(matriz[0, 0].Location.X, label5.Location.Y);
                    label6.Show(); // Titulo de la matriz copia
                    label6.Text      = "Matriz copia.";
                    label6.Font      = label5.Font;
                    label6.BackColor = Color.SeaGreen;
                    filaactual       = 0;
                    columnaactual    = 0;
                    productos.Clear();
                    producto = 0;
                    btContinuar.Show();
                    btContinuar.Location = new Point(900, 150);
                    radioButton1.Hide();
                    radioButton2.Hide();
                    radioButton3.Hide();
                    EtiquetaFilas.Hide();
                    tbFilas.Hide();
                    lbExplicacion.Show();

                    lbExplicacion.Text  = " Para empezar, tenemos que convertir todos los elementos por debajo del primer elemento de la diagonal principal, en cero. ";
                    producto            = Racional.StringToRacional(matriz[filaarestar, columnaaconvertir].Text) / Racional.StringToRacional(matriz[columnaaconvertir, columnaaconvertir].Text);
                    lbExplicacion.Text += " \n\r Para ello,comenzamos dividiendo el elemento debajo del primer elemento de la diagonal principal por este, y guardamos el cociente.";
                    lbExplicacion.Text += " \n\r Este cociente, lo multiplicamos a cada elemento de la primera fila, y el resultado se lo restamos a cada elemento de la segunda.";

                    label1.Location = new Point(matriz[0, 0].Location.X, matriz[matriz.GetLength(0) - 1, 0].Location.Y + matriz[0, 0].Height + 10);
                    label1.Show();
                    label1.BackColor = Color.SeaGreen;
                    label1.Text      = matriz[filaarestar, columnaaconvertir].Text + " / " + matriz[columnaaconvertir, columnaaconvertir].Text + " = " + Racional.AString(producto);
                    label2.Show();
                    label2.BackColor = Color.SeaGreen;
                    label2.Location  = new Point(label1.Location.X, label1.Location.Y + label1.Height + 10);
                    label2.Text      = "Cociente = " + Racional.AString(producto);
                    filaactual       = 0;
                    label7.Show();
                    label7.BackColor = Color.SeaGreen;
                    label7.ForeColor = Color.Silver;
                    label7.Text      = "Secuencia de operaciones: ";
                    Temporizador1.Start();
                    paso++;
                }
                else if (paso > 0)
                {
                    lbExplicacion.Focus();
                    btContinuar.Hide();
                    label7.Text = "Secuencia de operaciones:  ";
                    // Si ya se ha alcanzado la ultima fila a pero quedan columnas por convertir a cero los elementos por debajo de la diagonal principal
                    if (filaarestar > matriz.GetLength(0) - 1 && columnaaconvertir < matriz.GetLength(0) - 1)
                    {
                        foreach (TextBox t in matriz)
                        {
                            t.BackColor = Color.White; // Repintar todas las celdas con fondo blanco
                        }
                        columnaaconvertir++;
                        filaarestar   = columnaaconvertir + 1;
                        filaactual    = columnaaconvertir;
                        columnaactual = columnaaconvertir;
                    }

                    // Fijar la cantidad de pasos a realizar para convertir todos los elemetos por debajo de la diagonal principal en cero
                    int limite = 0;

                    int orden = matriz.GetLength(0); // Orden de la matriz

                    while (orden > 0)                // Sumar la cantidad de pasos que seran necesarios para convertir la columna en cero
                    {
                        orden--;
                        limite += orden;
                    }

                    if (paso < limite)
                    {
                        lbExplicacion.Text = " Continuamos convitiendo en cero todos los elementos por debajo del elemento " + (paso + 1) + " de la diagonal principal de la matriz.";
                        producto           = Racional.StringToRacional(matriz[filaarestar, columnaaconvertir].Text) / Racional.StringToRacional(matriz[columnaaconvertir, columnaaconvertir].Text);
                        label1.Text        = matriz[filaarestar, columnaaconvertir].Text + " / " + matriz[columnaaconvertir, columnaaconvertir].Text + " = " + Racional.AString(producto);
                        label2.Text        = "Cociente = " + Racional.AString(producto);
                        Temporizador1.Start();
                    }
                    else
                    {
                        lbExplicacion.Text  = " Una vez convertidos en cero todos los elementos por debajo de la diagonal principal, hemos convertido la matriz en una matriz tringular.";
                        lbExplicacion.Text += "\r\n El determinante de las matrices triangulares, es el producto de los elementos de la diagonal principal: ";
                        label2.Hide();
                        label7.Hide();
                        string producto = " ";
                        // Racional resultado = 1;
                        for (int i = 0; i < matriz.GetLength(0); i++)
                        {
                            for (int j = 0; j < matriz.GetLength(0); j++)
                            {
                                if (i == j)
                                {
                                    producto += matriz[i, j].Text + " * ";
                                    // resultado *= Racional.StringToRacional(matriz[i, j].Text);
                                }
                            }
                        }
                        producto = producto.Substring(0, producto.Length - 2);
                        // label1.Text = producto + " = " + Racional.AString(resultado);
                        label1.MaximumSize = new Size(500, 200);
                        label1.Text        = producto + " = " + (Matematicas.AlgebraLineal.Determinante(matrizracional)).ToString();
                    }
                }
            }
        }
示例#12
0
        /// <summary>
        ///
        /// REINICIA UN NUEVO FORMULARIO
        ///
        /// </summary>

        public override void btNuevo_Click(object sender, EventArgs e)
        {
            this.Text = "Deteminante de una matriz cuadrada.";
            radioButton1.Hide();
            radioButton2.Hide();
            radioButton3.Hide();
            diagonales = false;
            menores    = false;
            gauss      = false;
            if (copiamatriz != null)
            {
                foreach (TextBox t in copiamatriz)
                {
                    t.Dispose();
                }
            }
            label1.Hide();
            label2.Hide();
            label3.Hide();
            label4.Hide();
            label6.Hide();
            label7.Hide();
            label5.Hide();
            lbExplicacion.Show();
            lbExplicacion.Text = "Introducir un número entero.\n\n(Pulsar el botón [E] para ejemplo con valores por defecto.)";
            btDefecto.Location = new Point(tbFilas.Location.X + tbFilas.Size.Width + 5, EtiquetaFilas.Location.Y);
            if (directa)
            {
                EtiquetaFilas.Text = "Cantidad de filas y columnas de la matriz: ";
                tbFilas.BackColor  = Color.White;
            }
            producto             = new Racional(1, 1);
            productos            = new List <Racional>();
            productosizquierda   = new List <Racional>();
            radioButton1.Checked = false;
            radioButton2.Checked = false;
            radioButton3.Checked = false;
            EtiquetaFilas.Show();
            tbFilas.Show();
            btDefecto.Show();
            orden = 0;
            paso  = 0;
            paso  = 0;
            btContinuar.Hide();
            label3.Text = "Total derecha: ";
            label4.Text = "Total izquierda: ";
            tbFilas.ResetText();
            tbFilas.Focus();
            tbFilas.Size = new Size(60, 26);
            if (matriz != null)
            {
                foreach (TextBox t in matriz)
                {
                    t.Dispose();
                }
            }
            filaactual        = 0;
            columnaactual     = 0;
            columnaaconvertir = 0;
            filaarestar       = 1;
        }
示例#13
0
        private void Opcion(object sender, EventArgs e)
        {
            // Ocultar la etiqueta
            EtiquetaFilas.Hide();
            // Registrar si se trata de una multiplicacion o de una division
            Button pulsado = (Button)sender;

            if (pulsado.Name == "btPerfil") // Multiplicacion
            {
                multiplicacion = true;
            }
            else if (pulsado.Name == "btAlzado") // Division
            {
                multiplicacion = false;
            }

            label3.Show();
            if (multiplicacion)
            {
                label3.Text = "*";
            }
            else
            {
                label3.Text = "/";
            }

            btPerfil.Hide();
            btAlzado.Hide();
            resultado = new Polinomio(new List <Termino>());

            if (directa) // Para resolucion directa
            {
                if (multiplicacion)
                {
                    lbExplicacion.Text = "Producto de los polinomios introducidos:";
                }
                else
                {
                    lbExplicacion.Text = "Cociente de los polinomios introducidos";
                }

                label4.Show();
                label4.BackColor = Color.Transparent;
                label4.Location  = new Point(label1.Location.X, label2.Location.Y + label2.Height + 20);
                label4.ForeColor = Color.Chartreuse;
                label4.Font      = new Font(label4.Font.FontFamily, 20);
                if (multiplicacion)
                {
                    Polinomio resul = polinomio1 * polinomio2;
                    resul.EliminarCeros();
                    resul.Ordenar();
                    label4.Text = "Producto: " + resul.ToString();
                }
                else
                {
                    Polinomio resul = polinomio1.Cociente(polinomio2, ref resto);
                    if (resto.Largo == 0)
                    {
                        resto.AñadirTermino(new Termino("0"));
                    }
                    resul.EliminarCeros();
                    resul.Ordenar();
                    label4.Text = "Cociente: " + resul.ToString() + "    Resto: " + resto.ToString();
                }
                return;
            }
            else // Para resolución paso a paso
            {
                // Crear el RichTextBox
                desarrollo = new RichTextBox();
                desarrollo.Show();
                desarrollo.BackColor   = Color.SeaGreen;
                desarrollo.Location    = new Point(label1.Location.X, label1.Location.Y + 100);
                desarrollo.Font        = new Font("Dejavu Sans", 15);
                desarrollo.BorderStyle = BorderStyle.None;
                desarrollo.Size        = new Size(this.ClientSize.Width, 300);
                this.Controls.Add(desarrollo);

                if (multiplicacion) // Multiplicacion paso a paso
                {
                    btContinuar.Click += ContinuarMultiplicacion;
                }
                else // Division paso a paso
                {
                    // Cambiar el tamaño del RichTextBox segun el largo del producto del polinomio a ser dividido y el primer termino del polinomio divisor
                    Polinomio aux = new Polinomio(new List <Termino>()
                    {
                        polinomio2.ObtenerTermino(0)
                    });
                    desarrollo.Size = new Size((polinomio1 * aux).ToString().Length * 12, 300);
                    // Asignar el manejador adecuado al boton continuar
                    btContinuar.Click += ContinuarDivision;
                    // Copia del polinomio a ser dividido que se irá transformando en la resolucion
                    resto = new Polinomio(polinomio1);
                    // Crar el PictureBox para dibujar las lineas
                    desarrollodivision = new PictureBox();
                    // Crear el objeto Graphics para dibujar los resaltes
                    resaltes = this.CreateGraphics();
                    desarrollodivision.BackColor = Color.Transparent;
                    Controls.Add(desarrollodivision);
                    desarrollodivision.Visible  = true;
                    desarrollodivision.Location = new Point(desarrollo.Location.X + desarrollo.Width + 10, desarrollo.Location.Y);
                    desarrollodivision.Size     = new Size(this.ClientSize.Width, 40);
                    areagrafica = new Bitmap(desarrollodivision.Width, desarrollodivision.Height);
                    desarrollodivision.Image = areagrafica;
                    lineas = Graphics.FromImage(areagrafica);
                }
            }

            btContinuar.Show();
            btContinuar.Location = new Point(20, label2.Location.Y + label2.Height + 10);

            paso = 0;
            btContinuar.PerformClick();
        }