/// <summary> /// /// CONVIERTE EL DECIMAL INTRODUCIDO EN RACIONAL, PASO A PASO /// /// </summary> /// private void ResolucionDecimal() { if (paso == 1) { int indicecoma = tbFilas.Text.IndexOf(','); string digits = tbFilas.Text.Substring(indicecoma + 1); digitosdecimales = digits.Length; lbExplicacion.Text += "\nPara pasar a fracción este decimal aperiodico, multiplicamos el número por la potencia de 10 equivalente a la cantidad de digitos después de la coma. En este caso: " + digitosdecimales.ToString(); label1.Show(); numerad = (long)(numero * Math.Pow(10, digitosdecimales)); label1.Text = numero.ToString() + " * 10^" + digitosdecimales.ToString() + " = " + numerad.ToString(); paso++; } else if (paso == 2) { lbExplicacion.Text += "\nEl resultado anterior, será el numerador de la fracción. El denominador, será la potencia de 10 por la que hemos multiplicado el decimal anteriormente, es decir: 10^" + digitosdecimales.ToString(); denominad = (long)Math.Pow(10, digitosdecimales); label1.Text += "\n" + numerad + " / " + denominad.ToString(); paso++; } else { label2.Show(); Racional racio = new Racional(numerad, denominad); lbExplicacion.Text += "\nSimplificando, obtenemos el número racional equivalente al decimal introducido:"; label2.Text = racio.ToString(); label2.Location = new Point(label1.Location.X, label1.Location.Y + label1.Height + 5); btContinuar.Hide(); lbExplicacion.Focus(); } }
/// <summary> /// /// INICIA LA RESOLUCION /// /// </summary> /// private void IniciarResolucion() { btDefecto.Hide(); if (!tbFilas.Text.Contains(',')) { MessageBox.Show("El número introducido es un entero."); return; } // Obtener el numero introducido numero = Double.Parse(tbFilas.Text); if (directa) { Racional resultado = (Racional)numero; label2.Show(); label2.Location = btContinuar.Location; btContinuar.Hide(); label2.Text = resultado.ToString(); lbExplicacion.Focus(); return; } // Pasar el numero a Racional para comprobar de que tipo se trata Racional numeror = numero; // Comprobar de que tipo se trata ( decimal, periodico puro o periodico mixto ) if (numeror.EsEntero()) { MessageBox.Show("El número introducido es un entero."); return; } bool esperiodicopuro = numeror.EsPeriodicoPuro(); bool esperiodicomixto = numeror.EsPeriodicoMixto(); bool esdecimal = numeror.EsDecimal(); btContinuar.Show(); if (esdecimal) { lbExplicacion.Text = "El número introdocido, es un decimal aperiodico"; paso = 1; } else if (esperiodicopuro) { lbExplicacion.Text = "El número introducido, es un decimal periodico puro."; paso = 10; } else if (esperiodicomixto) { lbExplicacion.Text = "El número introducido, es un decimal periodico mixto."; paso = 20; } }
/// <summary> /// /// DEVUELVE TRUE SI LA MATRIZ DADA ES DIAGONALIZABLE. COMPROBANDO /// QUE EL RANGO DE LAS MATRICES PROPIAS DE UNA MATRIZ ES IGUAL /// A EL VALOR DEL ORDEN DE LA MATRIZ MENOS LA CANTIDAD DE VECES /// QUE EL VALOR PROPIO SE REPITE ( METODO CON INDICACIONES PASO A PASO /// /// </summary> private void DiagonalizableIndicaciones() { if (paso == 0) { diagonalizable = true; lbExplicacion.Visible = false; rtbDesarrollo.Visible = true; rtbDesarrollo.Text = "Para empezar construimos la matriz propia, restando a los elementos en la diagonal principal, el valor propio repetido, en este caso: " + repetido.valorpropio.ToString(); // Construir el string de la matriz con el valor propio repetido restado y mostrarla string matrizs = ""; for (int i = 0; i < matriz.GetLength(0); i++) { for (int j = 0; j < matriz.GetLength(0); j++) { if (i == j) { matrizs += Racional.AString(matriz[i, j]) + " - " + repetido.valorpropio.ToString() + " "; } else { matrizs += Racional.AString(matriz[i, j]) + " "; } } matrizs += "\n\n"; } rtbDesarrollo.Text += "\n\n" + matrizs; /* * lbExplicacion.Text = "Para empezar construimos la matriz propia, restando a los elementos en la diagonal principal el valor propio repetido, en este caso: " + repetido.valorpropio.ToString(); * * for (int i = 0; i < matriz.GetLength(0); i++) * { * for (int j = 0; j < matriz.GetLength(0); j++) * { * matrizlb[i, j] = new Label(); * matrizlb[i, j].Location = new Point(Origen.X + (contador * 60), Origen.Y); * matrizlb[i, j].Size = new Size(50, 30); * Controls.Add(matrizlb[i, j]); * matrizlb[i, j].Font = new Font(matrizlb[i, j].Font.Name, 12); * matrizlb[i, j].Show(); * if (i == j) * matrizlb[i, j].Text = Racional.AString(matriz[i, j]) + " - " + repetido.valorpropio.ToString(); * else * matrizlb[i, j].Text = Racional.AString(matriz[i, j]); * contador++; * } * contador = 0; * Origen.Y += 45; * } * */ /* * Label lbMatriz = new Label(); * lbMatriz.Location = new Point(Origen.X,Origen.Y); * lbMatriz.AutoSize = true; * lbMatriz.Font = new Font("Dejavu-Sans",10); * lbMatriz.Visible = true; * Controls.Add(lbMatriz); * lbMatriz.Text = Matematicas.AlgebraLineal.MatrizAString(matriz); */ matrizpropia = Matematicas.AlgebraLineal.MatrizPropia(matriz, repetido.valorpropio); } else if (paso == 1) { /* * lbExplicacion.Text = "Realizando la resta de la diagonal mayor, la matriz propia es: "; * for (int i = 0; i < matriz.GetLength(0); i++) * { * for (int j = 0; j < matriz.GetLength(0); j++) * { * if( i == j) * matrizlb[i, j].Text = Racional.AString(matriz[i, j] - repetido.valorpropio); * } * } */ rtbDesarrollo.Text += "\n\n Realizando la resta de la diagonal mayor, la matriz propia es: "; long valorprop = (long)repetido.valorpropio.Numerador / repetido.valorpropio.Denominador; Racional [,] matrizpropia = Matematicas.AlgebraLineal.MatrizValorPropio(matriz, valorprop); string matrizpropias = Matematicas.AlgebraLineal.MatrizAString(matrizpropia); rtbDesarrollo.Text += "\n\n" + matrizpropias + "\n\n"; rtbDesarrollo.SelectionStart = rtbDesarrollo.Text.Length; rtbDesarrollo.ScrollToCaret(); } else if (paso == 2) { rango = Matematicas.AlgebraLineal.Rango(matrizpropia); rtbDesarrollo.Text += "El rango de la matriz propia es: " + Racional.AString(rango) + "\n\n\n"; rtbDesarrollo.SelectionStart = rtbDesarrollo.Text.Length; rtbDesarrollo.ScrollToCaret(); //lbExplicacion.Text = "El rango de la matriz propia es: " + Racional.AString(rango) + ; } else if (paso == 3) { Racional ordenmatriz = matriz.GetLength(0); Racional repeticiones = repetido.repeticiones; if (rango > (ordenmatriz - repeticiones) || rango < (ordenmatriz - repeticiones)) { //lbExplicacion.Text = "Rango de la matriz propia del valor propio repetido " + repetido.valorpropio.ToString() + " es de: " + Racional.AString(rango) + " Y el resultado del orden de la matriz menos la cantidad de repeticiones es de: " + matriz.GetLength(0) + " - " + repetido.repeticiones + " = " + Racional.AString(ordenmatriz - repeticiones) + "\nPor lo tanto la matriz no es diagonalizable."; rtbDesarrollo.Text += "Rango de la matriz propia del valor propio repetido " + repetido.valorpropio.ToString() + " es de: " + Racional.AString(rango) + " Y el resultado del orden de la matriz menos la cantidad de repeticiones es de: " + matriz.GetLength(0) + " - " + repetido.repeticiones + " = " + Racional.AString(ordenmatriz - repeticiones) + "\nPor lo tanto la matriz no es diagonalizable.\n"; diagonalizable = false; btContinuar.Hide(); btSalir.Show(); } else { //lbExplicacion.Text = "Rango de la matriz propia del valor propio: " + repetido.valorpropio.ToString() + " Es de: " + Racional.AString(rango) + "\nEl resultado del orden de la matriz menos la cantidad de repeticiones es de: " + matriz.GetLength(0) + " - " + repetido.repeticiones + " = " + Racional.AString(ordenmatriz - repeticiones); rtbDesarrollo.Text += " Rango de la matriz propia del valor propio: " + repetido.valorpropio.ToString() + " Es de: " + rango.ToString() + "\nEl resultado del orden de la matriz menos la cantidad de repeticiones es de: " + matriz.GetLength(0) + " - " + repetido.repeticiones + " = " + (ordenmatriz - repeticiones).ToString(); rtbDesarrollo.Text += "\nPor lo tanto, la matriz es diagonalizable\n\n\n\n"; //lbExplicacion.Text += "\nPor lo tanto, la matriz es diagonalizable"; btContinuar.Hide(); btSalir.Show(); } rtbDesarrollo.SelectionStart = rtbDesarrollo.Text.Length; rtbDesarrollo.ScrollToCaret(); } }