///<Summary /// /// CONTINUA LA RESOLUCION DE LA MULTIPLICACION SEGUN EL PASO EN EL QUE SE ENCUENTRE LA MISMA /// ///</Summary> /// private void ContinuarMultiplicacion(object sender, EventArgs e) { if (paso < polinomio2.Largo) // Mientrar no se hayan multiplicado todos los terminos del 2º polinomio { if (paso == 0) { desarrollo.Text = "Multiplicar el primer término del 2º polinomio por cada término del 1º:\n" + polinomio1.ToString() + " * "; int inicio = desarrollo.Text.Length; // Inicio del termino del 2º polinomio desarrollo.Text += polinomio2.ObtenerTermino(numerotermino2).ToString(); int largotermino = desarrollo.Text.Length - inicio; // Largo del termino del 2º polinomio desarrollo.Text += " = "; // Añadir el intervalo a la lista de intervalos de color naranja intervalonaranja.Add(inicio); intervalonaranja.Add(largotermino); // Cambiar los caracteres de color naranja for (int i = 0; i < intervalonaranja.Count; i += 2) { desarrollo.Select(intervalonaranja[i], intervalonaranja[i + 1]); desarrollo.SelectionColor = Color.DarkOrange; desarrollo.Select(0, 0); } lbExplicacion.Text = "Para empezar, multiplicamos el primer término del segundo polinomio por cada uno de los termino del primer polinomio."; btContinuar.Hide(); timer1.Start(); } else { string ordinal = ""; switch (paso) { case 1: ordinal = " segundo "; break; case 2: ordinal = " tercer "; break; case 3: ordinal = " cuarto "; break; case 4: ordinal = " quinto "; break; case 5: ordinal = " sexto "; break; case 6: ordinal = " septimo "; break; case 7: ordinal = " octavo "; break; case 8: ordinal = " noveno "; break; case 9: ordinal = " décimo "; break; case 10: ordinal = " undécimo "; break; default: ordinal = " siguiente "; break; } lbExplicacion.Text = " Continuamos multiplicando el siguiente termino del segundo polinomio por el primer polinomio."; desarrollo.Text += "\nMultiplicar el " + ordinal + "término del segundo polinomio, por el primer polinomio:\n" + polinomio1.ToString() + " * "; int inicio = desarrollo.Text.Length; // Inicio del termino del 2º polinomio desarrollo.Text += polinomio2.ObtenerTermino(numerotermino2).ToString(); int largotermino = desarrollo.Text.Length - inicio; // Largo del termino del 2º polinomio desarrollo.Text += " = "; // Añadir el intervalo a la lista de intervalos de color naranja intervalonaranja.Add(inicio); intervalonaranja.Add(largotermino); // Cambiar los caracteres de color rojo for (int i = 0; i < intervalorojo.Count; i += 2) { desarrollo.Select(intervalorojo[i], intervalorojo[i + 1]); desarrollo.SelectionColor = Color.Red; } // Cambiar los caracteres de color rojo for (int i = 0; i < intervalonaranja.Count; i += 2) { desarrollo.Select(intervalonaranja[i], intervalonaranja[i + 1]); desarrollo.SelectionColor = Color.DarkOrange; desarrollo.Select(0, 0); } btContinuar.Hide(); timer1.Start(); } } else { btContinuar.Hide(); lbExplicacion.Text = "Por último, sumamos todos los polinomios obtenidos en los productos anteriores ( en color cyan )."; Polinomio resul = polinomio1 * polinomio2; resul.EliminarCeros(); desarrollo.Text += "\n\nSumar los polinomios obtenidos en los productos anteriores y simplificar:\n" + resul.ToString(); // Cambiar los caracteres de color rojo for (int i = 0; i < intervalorojo.Count; i += 2) { desarrollo.Select(intervalorojo[i], intervalorojo[i + 1]); desarrollo.SelectionColor = Color.Red; } // Cambiar los caracteres de color naranja for (int i = 0; i < intervalonaranja.Count; i += 2) { desarrollo.Select(intervalonaranja[i], intervalonaranja[i + 1]); desarrollo.SelectionColor = Color.DarkOrange; desarrollo.Select(0, 0); } // Cambiar los caracteres de color azul for (int i = 0; i < intervalozaul.Count; i += 2) { desarrollo.Select(intervalozaul[i], intervalozaul[i + 1]); desarrollo.SelectionColor = Color.Cyan; desarrollo.Select(0, 0); } } }
///<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(); }