예제 #1
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;
            }
        }
예제 #2
0
        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();
        }