private void LeerPolinomio() { if (paso == 0) { try { polinomio1 = new Polinomio(tbFilas.Text); polinomio1.Ordenar(); tbFilas.Clear(); label1.Location = new Point(10, tbFilas.Location.Y + 100); label1.BackColor = Color.SeaGreen; label1.ForeColor = Color.DarkBlue; label1.Text = "Polinomio 1" + "\n( "; label1.Text += polinomio1.ToString(); label1.Text += " )"; label1.Visible = true; EtiquetaFilas.Text = "Segundo polinomio"; lbExplicacion.Text = "Introduzca el segundo polinomio"; tbFilas.Location = new Point(EtiquetaFilas.Location.X + EtiquetaFilas.Width + 5, tbFilas.Location.Y); btDefecto.Hide(); paso++; } catch (Exception e) { MessageBox.Show("Formato incorrecto, solo se pueden introducir los polinomios como suma o resta de terminos con coeficiente Racional o entero.\nEjemplo: 3X^2+5Y+7/4X^8/3"); } } else { try { polinomio2 = new Polinomio(tbFilas.Text); polinomio2.Ordenar(); tbFilas.Clear(); label2.Visible = true; label2.ForeColor = Color.DarkOrange; label2.Location = new Point(label1.Location.X + label1.Width + 20, label1.Location.Y); label2.BackColor = Color.Transparent; label2.Text = "Polinomio 2" + "\n( "; label2.Text += polinomio2.ToString(); label2.Text += " )"; paso++; IniciarResolucion(); } catch (Exception) { MessageBox.Show("Formato incorrecto, solo se pueden introducir los polinomios como suma o resta de terminos con coeficiente Racional o entero.\nEjemplo: 3X^2+5Y+7/4X^8/3"); } } }
///<Summary /// /// CONTINUA LA RESOLUCION DE LA DIVISION SEGUN EL PASO EN EL QUE SE ENCUENTRE LA MISMA /// ///</Summary> /// private void ContinuarDivision(object sender, EventArgs e) { if (paso == 0) { // Dibujar el cajetin Pen lapiz = new Pen(Color.Red); lapiz.Width = 1.5F; lineas.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; lineas.DrawLine(lapiz, new Point(0, 30), new Point(0, 0)); lineas.DrawLine(lapiz, new Point(0, 30), new Point(0 + (polinomio2.ToString().Length * 12) + 20, 30)); lbExplicacion.Text = "Escribirmos los dos polinomios uno al lado del otro y cerramos el polinomio divisor entre líneas."; lineas.DrawString(polinomio2.ToString(), new Font("Dejavu Sans", 16), new SolidBrush(Color.Orange), new Point(10, 0)); // Escribir el polinomio a ser dividido en el RichTextBox y añadir los intervalos de color azul a la lista intervalozaul.Add(0); desarrollo.Text = polinomio1.ToString() + "\n"; /* * // Eliminar los espacios en blanco * string lectura = desarrollo.Text; * lectura = lectura.Substring(2); * desarrollo.Text = lectura; */ intervalozaul.Add(desarrollo.Text.Length); // Crear el RichTextBox para el polinomio resultado cocientes = new RichTextBox(); cocientes.Location = new Point(desarrollodivision.Location.X, desarrollo.Location.Y + 40); cocientes.Font = new Font("Dejavu Sans", 16); cocientes.BackColor = desarrollo.BackColor; cocientes.Size = new Size(this.ClientSize.Width, 100); cocientes.BorderStyle = BorderStyle.None; Controls.Add(cocientes); cocientes.Visible = true; cocientes.ForeColor = Color.Chartreuse; CambioColor(); paso++; } else if (paso == 1) { intervalorojo.Add(0); intervalorojo.Add(0); if (resto.ObtenerTermino(0).EsDivisible(polinomio2.ObtenerTermino(0))) // Si el termino es divisible { if (resto.Largo == polinomio1.Largo) // Si es la primera iteracion { lbExplicacion.Text = "Dividimos el primer término del polinomio a dividir entre el primer termino del polinomio divisor, y el resultado lo anotamos bajo la línea trazada anteriormente:"; } else// Para las siguientes iteraciones { lbExplicacion.Text = "Dividimos el primer término del resto obtenido entre el primer termino del polinomio divisor, y el resultado lo anotamos bajo la línea trazada anteriormente:"; } Termino cociente = resto.ObtenerTermino(0) / polinomio2.ObtenerTermino(0); resultado.AñadirTermino(new Termino(cociente)); // Añadir el intervalo a resaltar en rojo en la lista int iniciorojo = cocientes.Text.Length; intervalorojo[0] = iniciorojo; cocientes.Text += cociente.ToString(); intervalorojo[1] = (cocientes.Text.Length - iniciorojo); Resaltes(0, 0); paso++; } else // Si los terminos no son divisibles, finalizar la division { lbExplicacion.Text = "Como el primer término del resto no es divisible por el primer término del polinomio divisor, no se puede continuar la división. Se ha obtenido el cociente y resto finales."; cocientes.ForeColor = Color.Chartreuse; btContinuar.Hide(); } } else if (paso == 2) // Para los pasos pares { CambioColor(); this.Invalidate(); lbExplicacion.Text = "Multiplicamos cada termino del polinomio divisor por el término obtenido anteriormente, y el resultado lo añadimos a un polinomio que anotamos debajo del polinomio a ser dividido."; contador = 0; // Puesta a cero del contador que se usara para finalizar el temporizador // Convertir el primer termino del polinomio divisor en un polinomio para poder realizar la multiplicacion Polinomio aux = new Polinomio(cocientes.Text); Polinomio factor = new Polinomio(new List <Termino> { aux.ObtenerTermino(aux.Terminos.Count - 1) }); // Polinomio factor = new Polinomio(new List<Termino> { resultado.ObtenerTermino(resultado.Terminos.Count - 1) }); // Obtener el polinomio a restar factor.EliminarCeros(); resta = polinomio2 * factor; resta.EliminarCeros(); // Escribir en pantalla con los colores y alto de caracteres adecuados btContinuar.Hide(); intervalonaranja.Add(desarrollo.Text.Length); timer1.Start(); int finalnegro = desarrollo.Text.Length; paso++; } else // Para los pasos impares { intervalorojo.Clear(); this.Invalidate(); lbExplicacion.Text = "Restamos los polinomios anteriores"; intervalonaranja.Add(desarrollo.Text.Length); // Calcular el resto resto = resto - resta; resto.EliminarCeros(); resto.Simplificar(); resto.Ordenar(); // Dibujar la linea para la resta for (int i = 0; i < resto.ToString().Length; i++) { desarrollo.Text += "_"; } int finalnegro = desarrollo.Text.Length - intervalonaranja[intervalonaranja.Count - 1]; intervalonaranja.Add(finalnegro); int inicioazul = desarrollo.Text.Length; // Escribir el resto y cambiarlo a color azul // resto.Ordenar(); desarrollo.Text += "\n" + resto.ToString() + "\n"; int finalazul = desarrollo.Text.Length; intervalozaul.Add(inicioazul); intervalozaul.Add(finalazul - inicioazul); CambioColor(); // desarrollo.Text += "\n"; paso = 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(); }