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(); }
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; }
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; }
/// <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(); }
/// <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(); } }
/// <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(); } }
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); }
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; }
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); }
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++; } }
/// <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(); } } } }
/// <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; }
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(); }