Пример #1
0
        /// <summary>
        ///
        /// PINTA EL FONDO DE LAS CAJAS EN LA FILA POR DEBAJO DE LA FILA ACUAL DE COLOR ROJO, UNA CADA VEZ
        /// QUE SE CUMPLE EL TIEMPO ESTABLECIDO EN EL TEMPORIZADOR
        ///
        /// </summary>

        private void Temporizador1_Tick(object sender, EventArgs e)
        {
            btNuevo.Hide();
            btContinuar.Hide();
            // label7.Location = new Point(matriz[0, 0].Location.X - 300, label2.Location.Y + label2.Height + 10);
            label7.Location    = new Point(50, label2.Location.Y + label2.Height + 10);
            label7.MaximumSize = new Size(1100, 200);
            label7.TextAlign   = ContentAlignment.MiddleLeft;

            if (filaarestar > matriz.GetLength(0))
            {
                filaarestar = columnaaconvertir;
            }

            if (filaactual < matriz.GetLength(0) && columnaactual < matriz.GetLength(0))
            {
                label7.Show();
                matriz[filaarestar, columnaactual].BackColor = Color.Coral;
                label7.Font  = new Font(label7.Font.FontFamily, (int)(15 * Math.Ceiling((double)(1 / (double)label7.Text.Length))));
                label7.Text += matriz[filaarestar, columnaactual].Text + " - " + " ( " + matriz[filaactual, columnaactual].Text + " * " + Racional.AString(producto) + " ) " + " = " + (Racional.AString((Racional.StringToRacional(matriz[filaarestar, columnaactual].Text) - Racional.StringToRacional(matriz[filaactual, columnaactual].Text) * producto)) + "         ");
                matriz[filaarestar, columnaactual].Text = Racional.AString((Racional.StringToRacional(matriz[filaarestar, columnaactual].Text) - Racional.StringToRacional(matriz[filaactual, columnaactual].Text) * producto));
                columnaactual++;
            }
            else if (columnaactual >= matriz.GetLength(0) - 1)
            {
                columnaactual = columnaaconvertir;
                filaarestar++;
                Temporizador1.Stop();
                btContinuar.Show();
                btNuevo.Show();
            }
        }
Пример #2
0
        /// <summary>
        ///
        /// CONSTRUYE EL NUMERO IMAGINARIO CON LOS DATOS INTRODUCIDOS
        ///
        /// </summary>
        ///
        private void LeerImaginario()
        {
            Racional real       = Racional.StringToRacional(tbFilas.Text);
            Racional imaginaria = Racional.StringToRacional(tbcolumnas.Text);

            if (label2.Text == "-")
            {
                imaginaria = new Racional(imaginaria.Numerador * -1, imaginaria.Denominador);
            }
            imaginario = new Imaginario(real, imaginaria);
            if (paso > 0)
            {
                btContinuar.PerformClick();
            }
        }
Пример #3
0
        /// <summary>
        ///
        ///  PINTA EL FONDO DE LAS CAJAS DE TEXTO QUE ESTAN EN LA DIAGONAL A DERECHA
        ///  CUYO INDICE ES PASADO COMO ARGUMENTO. LA MATRIZ ES PASADA COMO ARGUMENTO
        ///  Y DEVUELVE EL STRING DEL PLATEAMIENTO DEL PRODUCTO DE ESOS ELEMENTOS
        ///  Y EL RESULTADO DEL PRODUCTO COMO REFERENCIA
        ///
        /// </summary>


        private string PintarDiagonal(TextBox[,] matriz, int indice, Color color, ref Racional producto)
        {
            int    fila          = 0;
            string planteamiento = "";

            for (int i = 0; i < matriz.GetLength(0); i++)
            {
                if (indice > matriz.GetLength(0) - 1)
                {
                    indice = 0;
                }

                matriz[fila, indice].BackColor = Color.GreenYellow;
                producto      *= Racional.StringToRacional(matriz[fila, indice].Text);
                planteamiento += matriz[fila, indice].Text + " * ";
                indice++;
                fila++;
            }
            planteamiento  = planteamiento.Substring(0, planteamiento.Length - 2);
            planteamiento += " = ";
            return(planteamiento);
        }
Пример #4
0
        /// <summary>
        ///
        ///  PINTA EL FONDO DE LAS CAJAS DE LA MATRIZ PASADA COMO ARGUMENTO, QUE ESTEN EN LA FILA O
        ///  COLUMNA PASADAS COMO ARGUMENTO Y CALCULA EL DETERMINANTE DE LA MENOR PRINCIPAL
        ///
        /// </summary>

        internal void PintarFilaColumna(TextBox[,] matriz, int fila, int columna, Color color)
        {
            List <Racional> aux = new List <Racional>();

            for (int i = 0; i < matriz.GetLength(0); i++)
            {
                for (int j = 0; j < matriz.GetLength(0); j++)
                {
                    if (i == fila && j != columna || i != fila && j == columna)
                    {
                        matriz[i, j].BackColor = color;
                    }
                    else if (i == fila && j == columna)
                    {
                        matriz[i, j].BackColor = Color.Coral;
                    }
                    else
                    {
                        matriz[i, j].BackColor = Color.White;
                        aux.Add(Racional.StringToRacional(matriz[i, j].Text));
                    }
                }
            }
            Racional[,] matrizaux = new Racional[matriz.GetLength(0) - 1, matriz.GetLength(0) - 1];
            int contador = 0;

            for (int i = 0; i < matrizaux.GetLength(0); i++)
            {
                for (int j = 0; j < matrizaux.GetLength(0); j++)
                {
                    matrizaux[i, j] = aux[contador];
                    contador++;
                }
            }
            determinantemenor = Matematicas.AlgebraLineal.Determinante(matrizaux);
        }
Пример #5
0
        /// <summary>
        ///
        ///  CONSTRUYE UNA MATRIZ DE LA MISMA DIMENSION QUE LA MATRIZ DE LA QUE SE QUIERE OBTENER
        ///  LA ADJUNTA PARA DAR EL RESULTADO
        ///  ,
        /// </summary>

        private void ConstruirAdjunta()
        {
            if (defecto)
            {
                matrizracional = new Racional[orden, orden];
                for (int i = 0; i < matriz.GetLength(0); i++)
                {
                    for (int j = 0; j < matriz.GetLength(0); j++)
                    {
                        matrizracional[i, j] = Racional.StringToRacional(matriz[i, j].Text);
                    }
                }
            }
            if (!directa)
            {
                lbExplicacion.Text = "La matriz adjunta es del mismo tamaño que la matriz inicial.";
            }
            else
            {
                lbExplicacion.Text = "";
            }
            int indicetabulador = 0;

            adjunta = new Label[orden, orden];
            Point origen = new Point(70 + (matriz.GetLength(0) * 100), 200);

            label2.Location  = new Point(90 + (matriz.GetLength(0) * 100), label1.Location.Y);
            label2.Font      = label1.Font;
            label2.Text      = "Matriz adjunta";
            label2.BackColor = Color.SeaGreen;
            label2.Show();
            for (int i = 0; i < orden; i++)
            {
                for (int j = 0; j < orden; j++)
                {
                    adjunta[i, j]           = new Label();
                    adjunta[i, j].BackColor = Color.White;
                    adjunta[i, j].Size      = new Size(50, 20);
                    adjunta[i, j].Location  = origen;
                    adjunta[i, j].TabIndex  = indicetabulador;
                    adjunta[i, j].TextAlign = ContentAlignment.MiddleCenter;
                    Controls.Add(adjunta[i, j]);
                    adjunta[i, j].Show();
                    origen.X += 60;
                    indicetabulador++;
                }
                origen.X  = 70 + (matriz.GetLength(0) * 100);
                origen.Y += 30;
            }
            if (directa)
            {
                Racional[,] resultado = Matematicas.AlgebraLineal.Adjunta(matrizracional);
                for (int i = 0; i < orden; i++)
                {
                    for (int j = 0; j < orden; j++)
                    {
                        adjunta[i, j].Text      = Racional.AString(resultado[i, j]);
                        adjunta[i, j].BackColor = Color.YellowGreen;
                    }
                }
            }
            else
            {
                filaactual             = 0;
                columnaactual          = 0;
                lbExplicacion.Location = new Point(10, 5);
                lbExplicacion.Show();
                if (!directa)
                {
                    btContinuar.Location = new Point(100, matriz[matriz.GetLength(0) - 1, 0].Location.Y + 50);
                    btContinuar.Show();
                }
                resultado = Matematicas.AlgebraLineal.Adjunta(matrizracional);
            }
            lbExplicacion.Focus();
        }
Пример #6
0
        /// <summary>
        ///
        ///  COMPRUEBA QUE LOS DATOS INTRODUCIDO EN CADA TextBox EN matriz SEAN
        ///  ADECUADOS PARA PASARLOS A Racional MAS TARDE
        ///  Y CREA LA MATRIZ EN FORMATO Racional Y LA RELLENA CON DATOS DE matriz
        ///  PASADOS A Racional
        /// </summary>

        private void Matriz_KeyPress(object sender, KeyPressEventArgs e)
        {
            matrizracional = new Racional[matriz.GetLength(0), matriz.GetLength(1)];
            TextBox aux = (TextBox)sender;

            if (e.KeyChar == Convert.ToChar(13))                                            // Si se pulsa la tecla intro
            {
                if (aux.Text.Length > 0)                                                    // Si la caja de texto no está vacia.
                {
                    filaactual    = (aux.TabIndex) / matriz.GetLength(0);                   // primer indice de la caja actual
                    columnaactual = (aux.TabIndex) - (matriz.GetLength(0) * filaactual);    // segundo indice de la caja actual
                    if (columnaactual == matriz.GetLength(1) - 1)                           // Si es la ultima caja de la fila
                    {
                        if (aux.TabIndex < ((matriz.GetLength(0)) * (matriz.GetLength(0)))) // Si no es la ultima caja de la matriz.
                        {
                            columnaactual = 0;
                            filaactual++;
                        }
                        else // Si es la ultima caja de la matriz rellenar la matriz en formato Racional
                        {
                            e.Handled = true;
                            for (int i = 0; i < matriz.GetLength(0); i++)
                            {
                                for (int j = 0; j < matriz.GetLength(0); j++)
                                {
                                    matrizracional[i, j] = Racional.StringToRacional(matriz[i, j].Text);
                                    // lbMensajes.Text = Racional.AString(matrizracional[i,j]) + "  ";
                                }
                            }
                            // SIGUIENTE METODO
                            ConstruirAdjunta();
                        }
                    }
                    else // Si no es la ultima caja de la fila
                    {
                        columnaactual++;
                    }
                    try
                    {
                        e.Handled = true;
                        matriz[filaactual, columnaactual].Focus();
                    }
                    catch (IndexOutOfRangeException) // Rellenar la matriz Racional
                    {
                        e.Handled = true;
                        for (int i = 0; i < matriz.GetLength(0); i++)
                        {
                            for (int j = 0; j < matriz.GetLength(1); j++)
                            {
                                matrizracional[i, j] = Racional.StringToRacional(matriz[i, j].Text);
                            }
                        }
                        // SIGUIENTE METODO
                        ConstruirAdjunta();
                    }
                }
                else // Si la caja está vacia
                {
                    aux.Focus();
                }
            }

            else if (e.KeyChar == Convert.ToChar(8)) // Si se pulsa la tecla BackSpace
            {
                e.Handled = false;
            }

            else if (e.KeyChar == '/') // Solo puede haber un caracter
            {
                if (aux.Text.Length > 1 && aux.Text.IndexOf('/') != -1)
                {
                    e.Handled = true;
                }
                else
                {
                    if (aux.Text.Length > 0)
                    {
                        e.Handled = false;
                    }
                    else
                    {
                        e.Handled = true;
                    }
                }
            }

            else if (e.KeyChar == '+' || e.KeyChar == '-')  // Asegurar que los signos + o - esten en la primera posicion.
            {
                if (aux.SelectionLength == aux.Text.Length) // Si todo el texto de la caja está seleccionado, es decir estamos en el primer caracter
                {
                    e.Handled = false;
                }
                else
                {
                    e.Handled = true;
                }
            }

            else if (e.KeyChar < '0' || e.KeyChar > '9') // Asegurar que se introduzcan digitos y no otro tipo de caracteres
            {
                e.Handled = true;
            }
        }
Пример #7
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();
                    }
                }
            }
        }
Пример #8
0
        /// <summary>
        ///
        /// CONTRUYE EL PUNTO CON LOS VALORES INTRODUCIDOS EN LAS CAJAS DE TEXTO, CAMBIA EL TEXTO
        /// DEL BOTON ACEPTAR POR CONTINUAR , LO CAMBIA A COLOR VERDE OSCURO y DIBUJA LOS PUNTOS EN
        /// EL AREA GRAFICA
        ///
        /// </summary>
        ///

        private void IniciarResolucion()
        {
            // Valores por defecto
            if (defecto)
            {
                tbPunto1X.Text = "5";
                tbPunto1Y.Text = "3";
                tbPunto2X.Text = "7";
            }
            // Mostrar los controles
            pnZoom.Show();
            btIzquierda.Show();
            btDerecha.Show();
            btArriba.Show();
            btAbajo.Show();
            btCentrar.Show();
            btZoomMas.Show();
            btZoomMenos.Show();
            lbZoomtitulo.Show();
            lbDesplazamiento.Show();
            pnZoom.Location = btContinuar.Location;
            pnParametro.Show();
            pnParametro.Location   = new Point(btContinuar.Location.X, pnZoom.Location.Y + pnZoom.Height + 5);
            btContinuar.Location   = new Point(btContinuar.Location.X, pnParametro.Location.Y + pnParametro.Height + 5);
            lbTituloParametro.Text = "Radianes:";

            lbPorPanel.Hide();
            lbIgualPanel.Hide();
            tbLargoFinal.Hide();
            lbLargoFinal.Hide();
            tbParametro.Location = new Point(tbParametro.Location.X - 50, tbParametro.Location.Y);

            lbTituloParametro.TextAlign = ContentAlignment.MiddleCenter;
            lbTituloParametro.AutoSize  = true;
            lbSegmentoInicial.AutoSize  = true;
            lbTituloParametro.Location  = new Point(lbTituloParametro.Location.X - 30, lbTituloParametro.Location.Y);
            lbSegmentoInicial.Location  = new Point(lbTituloParametro.Location.X + 80, lbTituloParametro.Location.Y);
            tbLargoInicial.Location     = new Point(tbLargoInicial.Location.X + 100, tbLargoInicial.Location.Y);
            tbLargoInicial.Text         = "57,29";
            lbSegmentoInicial.Text      = "Grados: ";
            apintar = new Punto(tbPunto1X.Text + " " + tbPunto1Y.Text + " " + "0");
            radio   = Racional.StringToRacional(tbPunto2X.Text);
            if (radio.Numerador < 0) // El radio no puede ser negativo
            {
                radio = new Racional(radio.Numerador * -1, radio.Denominador);
            }
            anguloradio = 1;
            ventanagrafica.PintarCirculo(apintar, radio, Color.Olive, 2, anguloradio);
            btCentrar.PerformClick();
            if (!directa)
            {
                lbExplicacion.Text = " El radio de la circunferencia en un ángulo determinado, es la hipotenusa de un triángulo rectángulo.\n La imagen representa la circunferencia introducida junto con el triángulo rectángulo en el que: el radio es la hipotenusa, y el largo de los catetos cumple el teorema de Pitágoras.\n Se puede observar como cambia el largo de los catetos cambiando el ángulo en el que se situa la linea del radio pulsando los botones.";
            }
            label1.Show();
            label1.Location  = new Point(btContinuar.Location.X, btContinuar.Location.Y + btContinuar.Height + 5);
            label1.BackColor = Color.Transparent;
            label1.Font      = new Font(label1.Font.FontFamily, 12);
            label1.Text      = "Teorema de Pitágoras aplicado a esta circunferencia:\n";
            double radiodouble = radio.Numerador / radio.Denominador;

            label1.Text += Racional.AString(radio) + "= Ѵ (" + Math.Round(radiodouble * Math.Sin(1), 2).ToString() + "^2 + " + Math.Round(radiodouble * Math.Cos(1), 2).ToString() + "^2 )  ";
            Controls.Add(ventanagrafica.Ventana);
            if (directa)
            {
                ContinuarResolucion();
            }
            paso = 1;
            ventanagrafica.Ventana.Invalidate();
        }
Пример #9
0
 internal void btAceptar_Click(object sender, EventArgs e)
 {
     valorincognita = Racional.StringToRacional(tbValorIncognita.Text);
     this.Hide();
 }
Пример #10
0
 /// <summary>
 ///
 /// REALIZA LA RESOLUCION PASO A PASO
 ///
 /// </summary>
 ///
 private void IniciarResolucion()
 {
     if (paso == 0)
     {
         // Mostrar panel de controles Zoom y desplazamiento
         this.pnZoom.Show();
         pnZoom.Location = new Point(EtiquetaFilas.Location.X, 400);
         btZoomMas.Show();
         btZoomMas.Click += btZoomMas_Click;
         btZoomMenos.Show();
         btZoomMenos.Click += btZoomMenos_Click;
         lbZoomtitulo.Show();
         btCentrar.Show();
         btCentrar.Click += btCentrar_Click;
         lbAjustar.Show();
         btDerecha.Show();
         btDerecha.Click += btDerecha_Click;
         btIzquierda.Show();
         btIzquierda.Click += btIzquierda_Click;
         btArriba.Show();
         btArriba.Click += btArriba_Click;
         btAbajo.Show();
         btAbajo.Click += btAbajo_Click;
         btAjustar.Show();
         btAjustar.Click += btAjustar_Click;
         lbAjustar.Show();
         lbDesplazamiento.Show();
         // Mostrar el area de la grafica
         grafica.Ventana.Show();
         // Mostrar los radioButton para elegir escala decimal o racional
         radioButton1.Show();
         radioButton1.Location = new Point(pnZoom.Location.X, pnZoom.Location.Y - radioButton1.Height - 5);
         radioButton1.Text     = "Escala racional";
         radioButton1.Checked  = true;
         radioButton1.Click   += radioButton1_Click;
         radioButton2.Show();
         radioButton2.Location = new Point(radioButton1.Location.X + radioButton1.Width + 5, radioButton1.Location.Y);
         radioButton2.Text     = "Escala decimal";
         radioButton2.Click   += radioButton2_Click;
         // Construir el complejo y mostrarlo en la etiqueta
         imaginario = new Imaginario(Racional.StringToRacional(tbFilas.Text), Racional.StringToRacional(tbcolumnas.Text));
         label1.Show();
         label1.BackColor = Color.SeaGreen;
         label1.Font      = EtiquetaFilas.Font;
         label1.Location  = new Point(EtiquetaFilas.Location.X, tbcolumnas.Location.Y + tbcolumnas.Height + 5);
         label1.Text      = "Número complejo introducido: ";
         label2.Show();
         label2.BackColor = Color.SeaGreen;
         label2.Font      = label1.Font;
         label2.Location  = new Point(label1.Location.X + label1.Width + 5, label1.Location.Y);
         label2.Text      = imaginario.ToString();
         // Mostrar la representacion grafica del complejo
         grafica.PintarLinea(new Punto(new Racional[] { 0, 0 }), new Punto(new Racional[] { imaginario.ParteReal, imaginario.ParteImaginaria }), Color.Chartreuse, 3, true);
         // Ocultar el boton defecto y mostrar el boton continuar
         btDefecto.Hide();
         btContinuar.Show();
         btContinuar.Location = new Point(EtiquetaFilas.Location.X, pnZoom.Location.Y + pnZoom.Height + 5);
         lbExplicacion.Text   = "En la gráfica se muestra la representación gráfica del complejo introducido. Esta representación se corresponde con la de un vector que vá del punto origen de coordenadas, al punto de coordenada 'X' igual a la parte real del complejo y coordenada 'Y' igual a la parte imaginaria del mismo.";
         lbExplicacion.Focus();
         btContinuar.Click += btContinuar_Click;
         if (directa)
         {
             btContinuar.PerformClick();
         }
     }
     else if (paso == 1)
     {
         lbExplicacion.Text = "El módulo de un número complejo, es igual al módulo del vector representado: ";
         label3.Show();
         label3.Font      = label2.Font;
         label3.BackColor = Color.Chartreuse;
         label3.Location  = new Point(label1.Location.X, label1.Location.Y + label1.Height + 5);
         if (!directa)
         {
             label3.Text = "Módulo = √(" + imaginario.ParteReal.ToString() + "^2 + " + imaginario.ParteImaginaria.ToString() + "^2 ) = " + (imaginario.Modulo).ToDouble().ToString();
         }
         if (directa)
         {
             label3.Text = "Módulo = " + (imaginario.Modulo).ToDouble().ToString();
             btContinuar.PerformClick();
         }
     }
     else if (paso == 2)
     {
         lbExplicacion.Text = "El llamado 'Argumento' de un número complejo, corresponde al ángulo que la representación gráfica del mismo forma con el eje de abcisas:";
         Racional radio = imaginario.Modulo / 2;
         grafica.PintarArco(new Punto(new Racional[] { 0, 0 }), radio, -0.05236D, imaginario.Argumento, Color.Red);
         grafica.Ventana.Invalidate();
         label4.Show();
         label4.Font      = label3.Font;
         label4.BackColor = Color.Chartreuse;
         label4.Location  = new Point(label3.Location.X, label3.Location.Y + label3.Height + 5);
         if (!directa)
         {
             label4.Text = "Argumento = Arcotangente de ( " + imaginario.ParteImaginaria.ToString() + " / " + imaginario.ParteReal.ToString() + " ) = " + imaginario.Argumento.ToString() + " rads";
         }
         if (directa)
         {
             label4.Text = "Argumento = " + imaginario.Argumento.ToString() + " rads";
             btContinuar.PerformClick();
         }
     }
     else if (paso == 3)
     {
         lbExplicacion.Text = "Con el módulo y el argumento, se puede definir tambien un número complejo. En esta definición llamada Polar, se pone primero el módulo del complejo seguido de su argumento ( normalmente en grados sexagesimales ).";
         label5.Show();
         double sexagesimal = imaginario.Argumento * (180D / Math.PI);
         label5.Show();
         label5.Location  = new Point(label4.Location.X, label4.Location.Y + label4.Height + 5);
         label5.Text      = "Forma polar del imaginario: " + Math.Round(imaginario.Modulo.ToDouble(), 2).ToString();
         label5.BackColor = Color.Transparent;
         label6.Show();
         label6.Location  = new Point(label5.Location.X + label5.Width, label5.Location.Y + label5.Height / 2 - 6);
         label6.Text      = Math.Round(sexagesimal, 2).ToString() + "º";
         label6.Font      = new Font("Dejavu Sans", 10);
         label6.BackColor = Color.Transparent;
         if (directa)
         {
             lbExplicacion.Hide();
         }
         btContinuar.Hide();
     }
 }