Descargar

Métodos de integración numérica en Visual Basic 2005 (página 5)

Enviado por jaimemontoya


Partes: 1, 2, 3, 4, 5, 6

                        .set_TextMatrix(ciclo, 6, Math.Round(Val(celda(ciclo, 6)), 8)) 'Imprime la función evaluada en el punto "ci" ("f(ci)" para el intervalo "ciclo").

                        .set_TextMatrix(ciclo, 7, Math.Round(Val(celda(ciclo, 7)), 8)) 'Imprime ("f(ai)"+"4f(bi)"+"f(ci)")*("delta x"/6) ("Ai" para el intervalo "ciclo").

                    Next

                    .set_TextMatrix(Val(TextBox4.Text) + 1, 7, Math.Round(Val(celda(Val(TextBox4.Text) + 1, 7)), 8)) 'Imprime el valor de la integral en la celda correspondiente.

                End With

                TextBox6.Text = integral 'Imprime la respuesta de la integral de la función introducida.

            End If

        End If

    End Sub

    Private Sub TextBox2_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox2.KeyPress

        Dim contadorpuntos As Integer

        Dim contadormenos As Integer

        Dim contadorplecas As Integer

        Dim longitudcadena As Integer = Len(TextBox2.Text) 'Variable para almacenar la longitud de la cadena que hay en un Textbox.

        Dim caracterevaluado As String 'Para evaluar caracter por caracter con el Mid().

        For ciclo As Integer = 1 To longitudcadena 'Para evaluar caracter por caracter hasta encontrar una "/".

            caracterevaluado = Mid(TextBox2.Text, ciclo, 1)

            If caracterevaluado = "." Then

                contadorpuntos = contadorpuntos + 1

            End If

        Next

        For ciclo As Integer = 1 To longitudcadena 'Para evaluar caracter por caracter hasta encontrar una "/".

            caracterevaluado = Mid(TextBox2.Text, ciclo, 1)

            If caracterevaluado = "-" Then

                contadormenos = contadormenos + 1

            End If

        Next

        For ciclo As Integer = 1 To longitudcadena 'Para evaluar caracter por caracter hasta encontrar una "/".

            caracterevaluado = Mid(TextBox2.Text, ciclo, 1)

            If caracterevaluado = "/" Then

                contadorplecas = contadorplecas + 1

            End If

        Next

        If (Asc(e.KeyChar) >= 47 And Asc(e.KeyChar) <= 57) Or Asc(e.KeyChar) = 46 Or Asc(e.KeyChar) = 8 Or Asc(e.KeyChar) = 45 Then 'Los únicos caracteres que se permitirá introducir en el TextBox serán la placa ("/") y los números del 0 al 9 (ASCII del 47 al 57); el punto ("."); el signo menos ("-"), que es el ASCII 45; y el retroceso de espacio o backspace para borrar texto introducido, que es el ASCII 8.

            If (Asc(e.KeyChar) = 46) Then 'Si se presione la tecla del punto (".").

                If (contadorpuntos > 0) Then 'Cuando se pretenda introducir un segundo punto.

                    'Beep() 'Emite sonido cuando se presiona una tecla que no está permitida o que es inválida.

                    e.KeyChar = "" 'Reemplaza la tecla digitada con el valor de nada para que no se puedan introducir caracteres inválidos.

                End If

            End If

            If (Asc(e.KeyChar) = 45) Then 'Si se presione la tecla del signo menos ("-").

                If (contadormenos > 0) Then 'Cuando se pretenda introducir un segundo signo menos.

                    'Beep() 'Emite sonido cuando se presiona una tecla que no está permitida o que es inválida.

                    e.KeyChar = "" 'Reemplaza la tecla digitada con el valor de nada para que no se puedan introducir caracteres inválidos.

                End If

            End If

            If (Asc(e.KeyChar) = 47) Then 'Si se presione la tecla de la pleca ("/").

                If (contadorplecas > 0) Then 'Cuando se pretenda introducir una segunda pleca.

                    'Beep() 'Emite sonido cuando se presiona una tecla que no está permitida o que es inválida.

                    e.KeyChar = "" 'Reemplaza la tecla digitada con el valor de nada para que no se puedan introducir caracteres inválidos.

                End If

            End If

        Else

            'Beep() 'Emite sonido cuando se presiona una tecla que no está permitida o que es inválida.

            e.KeyChar = "" 'Reemplaza la tecla digitada con el valor de nada para que no se puedan introducir caracteres inválidos.

        End If

    End Sub

    Private Sub TextBox3_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox3.KeyPress

        Dim contadorpuntos As Integer

        Dim contadormenos As Integer

        Dim contadorplecas As Integer

        Dim longitudcadena As Integer = Len(TextBox3.Text) 'Variable para almacenar la longitud de la cadena que hay en un Textbox.

        Dim caracterevaluado As String 'Para evaluar caracter por caracter con el Mid().

        For ciclo As Integer = 1 To longitudcadena 'Para evaluar caracter por caracter hasta encontrar una "/".

            caracterevaluado = Mid(TextBox3.Text, ciclo, 1)

            If caracterevaluado = "." Then

                contadorpuntos = contadorpuntos + 1

            End If

        Next

        For ciclo As Integer = 1 To longitudcadena 'Para evaluar caracter por caracter hasta encontrar una "/".

            caracterevaluado = Mid(TextBox3.Text, ciclo, 1)

            If caracterevaluado = "-" Then

                contadormenos = contadormenos + 1

            End If

        Next

        For ciclo As Integer = 1 To longitudcadena 'Para evaluar caracter por caracter hasta encontrar una "/".

            caracterevaluado = Mid(TextBox3.Text, ciclo, 1)

            If caracterevaluado = "/" Then

                contadorplecas = contadorplecas + 1

            End If

        Next

        If (Asc(e.KeyChar) >= 47 And Asc(e.KeyChar) <= 57) Or Asc(e.KeyChar) = 46 Or Asc(e.KeyChar) = 8 Or Asc(e.KeyChar) = 45 Then 'Los únicos caracteres que se permitirá introducir en el TextBox serán la placa ("/") y los números del 0 al 9 (ASCII del 47 al 57); el punto ("."); el signo menos ("-"), que es el ASCII 45; y el retroceso de espacio o backspace para borrar texto introducido, que es el ASCII 8.

            If (Asc(e.KeyChar) = 46) Then 'Si se presione la tecla del punto (".").

                If (contadorpuntos > 0) Then 'Cuando se pretenda introducir un segundo punto.

                    'Beep() 'Emite sonido cuando se presiona una tecla que no está permitida o que es inválida.

                    e.KeyChar = "" 'Reemplaza la tecla digitada con el valor de nada para que no se puedan introducir caracteres inválidos.

                End If

            End If

            If (Asc(e.KeyChar) = 45) Then 'Si se presione la tecla del signo menos ("-").

                If (contadormenos > 0) Then 'Cuando se pretenda introducir un segundo signo menos.

                    'Beep() 'Emite sonido cuando se presiona una tecla que no está permitida o que es inválida.

                    e.KeyChar = "" 'Reemplaza la tecla digitada con el valor de nada para que no se puedan introducir caracteres inválidos.

                End If

            End If

            If (Asc(e.KeyChar) = 47) Then 'Si se presione la tecla de la pleca ("/").

                If (contadorplecas > 0) Then 'Cuando se pretenda introducir una segunda pleca.

                    'Beep() 'Emite sonido cuando se presiona una tecla que no está permitida o que es inválida.

                    e.KeyChar = "" 'Reemplaza la tecla digitada con el valor de nada para que no se puedan introducir caracteres inválidos.

                End If

            End If

        Else

            'Beep() 'Emite sonido cuando se presiona una tecla que no está permitida o que es inválida.

            e.KeyChar = "" 'Reemplaza la tecla digitada con el valor de nada para que no se puedan introducir caracteres inválidos.

        End If

    End Sub

    Private Sub TextBox4_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox4.KeyPress

        If (Asc(e.KeyChar) >= 48 And Asc(e.KeyChar) <= 57) Or (Asc(e.KeyChar) = 8) Then 'Los únicos caracteres que se permitirá introducir en el TextBox serán los números del 0 al 9 (ASCII del 48 al 57) y el Backspace (ASCII 8).

            'No se hace nada porque el caracter presionado es válido.

        Else

            'Beep() 'Emite sonido cuando se presiona una tecla que no está permitida o que es inválida.

            e.KeyChar = "" 'Reemplaza la tecla digitada con el valor de nada para que no se puedan introducir caracteres inválidos.

        End If

    End Sub

End Class

 

sumasderiemman.vb

Imports System.Text

Imports System.CodeDom.Compiler

Imports System.Collections.Specialized 'Sin esto no funcionaría ninguna instanciación o variable declarada "As New StringCollection()"

Public Class sumasderiemman

    Public celda(24, 5) As String 'Se declara un máximo de 25 filas y 6 columnas (pues se comienza a contar desde la posición 0).

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Me.Hide()

        Form1.Show()

    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

        If (TextBox3.Text <= TextBox2.Text) Or (TextBox4.Text < 0) Then 'Si "b" es menor o igual que "a" o si "n" es menor que cero entonces se mandará el mensaje de error correspondiente. De lo contrario se ejecutará el programa.

            MsgBox("'b' debe ser mayor que 'a' y 'n' debe ser mayor que cero.", , "Integración por Sumas de Riemman")

        Else

            Dim i, j As Integer '"i" significará "fila" y "j" significará columna, de modo que se trabajará con (i,j)=(fila,columna)

            'Establece cuántas filas y columnas tendrá el Grid.

            AxMSFlexGrid1.Rows = 25 'Establece 25 filas.

            AxMSFlexGrid1.Cols = 6 'Establece 6 columnas.

            'Se crea una nueva instancia de la clase Evaluador.

            Dim mEval As New Evaluador()

            'Se crea una variable tipo string y se le asigna la expresión que se quiere evaluar.

            Dim mExpresion As String = TextBox1.Text ' = "X".

            'Se crea un objeto StringCollection y se le agregan los parámetros de entrada que usará el método eval.

            Dim mParameters As New StringCollection()

            mParameters.Add("ByVal X as Double")

            'Las funciones a utilizar pertenece al espacio de nombres System.Math.

            'se hace necesario entonces, crear un objeto StringCollection y agregar

            'el namespace System.Math.

            Dim mNameSpaces As New StringCollection()

            mNameSpaces.Add("System.Math")

            'Se invoca el método PrecompilarFunción y se verifica si se generó correctamente el assembly.

            If mEval.PrecompilarAssembly(mExpresion, mParameters, mNameSpaces) Then

                'Si el assembly se generó correctamente, se crea un array con los valores de los parametros a evaluar.

                'Se invoca el método Evaluar y se asignan los resultados correspondientes.

                'Se limpian todas las celdas para que no queden impresos resultados de procesos anteriores.

                AxMSFlexGrid1.Clear()

                'Se comienzan a hacer los cálculos.

                'Valores para la primera iteración.

                TextBox5.Text = (Val(TextBox3.Text) – Val(TextBox2.Text)) / Val(TextBox4.Text) 'Almacena "delta x", que es "(b-a)/n".

                celda(1, 0) = TextBox2.Text 'Almacena el valor del límite de integración "a" (Intervalo para la primera iteración).

                celda(1, 1) = mEval.Evaluar(Val(celda(1, 0))) 'Almacena el valor de la función evaluada en el Intervalo para la primera iteración (f(x) para la primera iteración).

                celda(1, 2) = Val(TextBox5.Text) * Val(celda(1, 1)) 'Almacena la multiplicación de la base (delta x) por la altura (f(x)).

                'Valores para la segunda iteración en adelante.

                For ciclo As Integer = 2 To (Val(TextBox4.Text) + 1) 'Si "n" vale 4, las iteraciones van desde 2 hasta 5.

                    celda(ciclo, 0) = Val(celda(ciclo – 1, 0)) + Val(TextBox5.Text) 'Almacena Intervalo para la iteración "ciclo", que es Intervalo de la iteración anterior más delta x.

                    celda(ciclo, 1) = mEval.Evaluar(Val(celda(ciclo, 0))) 'Almacena el valor de la función evaluada en el Intervalo para la iteración "ciclo" (f(x) para la iteración "ciclo").

                    celda(ciclo, 2) = Val(TextBox5.Text) * Val(celda(ciclo, 1)) 'Almacena la multiplicación de la base (delta x) por la altura (f(x)).

                Next ciclo

                'Obtener valor de Smin.

                Dim smin As Double = 0 'Se declara la variable que contendrá el valor de Smin y se inicializa con el valor de cero.

                For ciclo As Integer = 1 To (Val(TextBox4.Text)) 'Si "n" vale 4, las iteraciones van desde 1 hasta 4.

                    smin += celda(ciclo, 2) 'Equivale a escribir "smin = smin + celda(ciclo, 2). Suma los valores de "base * altura" desde la iteración 1 hasta la penúltima iteración.

                Next ciclo

                'Obtener valor de Smax.

                Dim smax As Double = 0 'Se declara la variable que contendrá el valor de Smax y se inicializa con el valor de cero.

                For ciclo As Integer = 2 To (Val(TextBox4.Text) + 1) 'Si "n" vale 4, las iteraciones van desde 2 hasta 5.

                    smax += celda(ciclo, 2) 'Equivale a escribir "smax = smax + celda(ciclo, 2). Suma los valores de "base * altura" desde la iteración 2 hasta la última iteración.

                Next ciclo

                celda(1, 3) = smin 'Almacena el valor de Smin en la celda correspondiente.

                celda(1, 4) = smax 'Almacena el valor de Smax en la celda correspondiente.

                celda(1, 5) = (smin + smax) / 2 'Almacena el valor de la Integral, que es la suma de Smin más Smax y dividir ese resultado entre dos.

                'Para indicar que se realizarán operaciones con el objeto AxMSFlexGrid1

                'sin necesidad de escribir su nombre.

                'De aquí en adelante vienen las impresiones de los valores en las celdas correspondientes.

                AxMSFlexGrid1.ForeColor = Color.Blue 'Cambia el color de letra de todas las celdas a azul.

                With AxMSFlexGrid1 'Para no estar poniendo por ejemplo AxMSFlexGrid1.set_ColWidth(0, 0) y así sucesivamente, no estar repitiendo a cada rato "AxMSFlexGrid1." NOTA: Desde el "With" hasta el "End With" solamente deben estarse mandando a imprimir valores a cada una de las celdas, y no estar haciendo cálculos con condiciones If ni nada de eso dentro del "With", pues todos los cálculos y condiciones deben hacerse afuera y venir a esta sección del "With" única y exclusivamente a hacer impresiones.

                    'Esto servirá para poner color azul a la letra de las celdas donde se muestran los resultados y hacer más grande el ancho de las columnas donde aparecen las celdas de los resultados, pues se estará trabajando con 10 decimales. Nótese que no se involucra la primera fila ni la primera columna debido a que se programan los For comenzando desde 1 y no desde 0.

                    For fila As Integer = 1 To .Rows – 1 'Para no involucrar la primera fila, se comienza de 1 y no de 0.

                        With AxMSFlexGrid1

                            .Row = fila

                            For columna As Integer = 1 To .Cols – 1 'Para no involucrar la primera columna, se comienza de 1 y no de 0.

                                .Col = columna

                                .CellForeColor = Color.Blue 'Por estar dentro del For, cambia el color de letra de todas las celdas a azul (excepto la primera fila y la primera columna).                 

                                .set_ColWidth(columna, 1300) 'Por estar deltro del For, le da un ancho de 1300 a cada columna (excepto a la primera columna).

                            Next

                        End With

                    Next

                    'Establece la alineación del contenido de la columna 0

                    .set_ColAlignment(0, MSFlexGridLib.AlignmentSettings.flexAlignCenterCenter)

                    'Se le ponen los respectivos títulos a cada columna.

                    .set_TextMatrix(0, 0, "Intervalo")

                    .set_TextMatrix(0, 1, "f(x)")

                    .set_TextMatrix(0, 2, "base * altura")

                    .set_TextMatrix(0, 3, "Smin")

                    .set_TextMatrix(0, 4, "Smax")

                    .set_TextMatrix(0, 5, "Integral")

                    '(Nótese que las impresiones se hacen con 8 posiciones decimales).

                    'Impresiones para primera iteración.

                    .set_TextMatrix(1, 0, Math.Round(Val(celda(1, 0)), 8)) 'Imprime el valor del límite de integración "a" (Intervalo para la primera iteración).

                    .set_TextMatrix(1, 1, Math.Round(Val(celda(1, 1)), 8)) 'Imprime el valor de la función evaluada en el Intervalo para la primera iteración (f(x) para la primera iteración).

                    .set_TextMatrix(1, 2, Math.Round(Val(celda(1, 2)), 8)) 'Imprime la multiplicación de la base (delta x) por la altura de la primera iteración (f(x) de la primera iteración).

                    'Impresiones para la segunda iteración en adelante.

                    For ciclo As Integer = 2 To (Val(TextBox4.Text) + 1) 'Si "n" vale 4, las iteraciones van desde 2 hasta 5.

                        .set_TextMatrix(ciclo, 0, Math.Round(Val(celda(ciclo, 0)), 8)) 'Imprime el Intervalo para la iteración "ciclo", que es Intervalo de la iteración anterior más delta x.

                        .set_TextMatrix(ciclo, 1, Math.Round(Val(celda(ciclo, 1)), 8)) 'Imprime el valor de la función evaluada en el Intervalo para la iteración "ciclo" (f(x) para la iteración "ciclo").

                        .set_TextMatrix(ciclo, 2, Math.Round(Val(celda(ciclo, 2)), 8)) 'Imprime la multiplicación de la base (delta x) por la altura de la iteración "ciclo" (f(x) de la iteración "ciclo").

                    Next

                    .set_TextMatrix(1, 3, Math.Round(Val(celda(1, 3)), 8)) 'Imprime el valor de Smin en la celda correspondiente.

                    .set_TextMatrix(1, 4, Math.Round(Val(celda(1, 4)), 8)) 'Imprime el valor de Smax en la celda correspondiente.

                    .set_TextMatrix(1, 5, Math.Round(Val(celda(1, 5)), 8)) 'Imprime el valor de la Integral, que es la suma de Smin más Smax y dividir ese resultado entre dos.

                End With

                TextBox6.Text = celda(1, 5) 'Imprime la respuesta de la integral de la función introducida.

            End If

        End If

    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

        'Se limpian los valores de los TextBox.

        TextBox1.Text = ""

        TextBox2.Text = ""

        TextBox3.Text = ""

        TextBox4.Text = ""

        TextBox5.Text = ""

        AxMSFlexGrid1.Clear() 'Limpiar todas las celdas del FlexGrid para que no queden impresos resultados de procesos anteriores.

        AxMSFlexGrid1.Rows = 2 'Establece 2 filas.

        AxMSFlexGrid1.Cols = 2 'Establece 2 columnas.

        'Las líneas de abajo son una manera de limpiar todas las celdas del FlexGrid, pero más fácil simplemente escribiendo "AxMSFlexGrid1.Clear()".

        ''Se limpian todas las celdas para que no queden impresos resultados de procesos anteriores.

        'With AxMSFlexGrid1 'Para no estar poniendo por ejemplo AxMSFlexGrid1.set_ColWidth(0, 0) y así sucesivamente, no estar repitiendo a cada rato "AxMSFlexGrid1." NOTA: Desde el "With" hasta el "End With" solamente deben estarse mandando a imprimir valores a cada una de las celdas, y no estar haciendo cálculos con condiciones If ni nada de eso dentro del "With", pues todos los cálculos y condiciones deben hacerse afuera y venir a esta sección del "With" única y exclusivamente a hacer impresiones.

        '    For fila As Integer = 0 To .Rows – 1

        '        With AxMSFlexGrid1

        '            .Row = fila

        '            For columna As Integer = 0 To .Cols – 1

        '                .set_TextMatrix(fila, columna, "") 'Por estar dentro de los For anidados, con esto se ponen valores String Empty en todas las celdas, de modo que no aparezca nada y queden todas las celdas limpias y sin resultados de cálculos hechos anteriormente.

        '            Next

        '        End With

        '    Next

        'End With

    End Sub

    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click

        End 'Salir del programa (cerrarlo).

    End Sub

    Private Sub TextBox2_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox2.KeyPress

        Dim contadorpuntos As Integer

        Dim contadormenos As Integer

        Dim contadorplecas As Integer

        Dim longitudcadena As Integer = Len(TextBox2.Text) 'Variable para almacenar la longitud de la cadena que hay en un Textbox.

        Dim caracterevaluado As String 'Para evaluar caracter por caracter con el Mid().

        For ciclo As Integer = 1 To longitudcadena 'Para evaluar caracter por caracter hasta encontrar una "/".

            caracterevaluado = Mid(TextBox2.Text, ciclo, 1)

            If caracterevaluado = "." Then

                contadorpuntos = contadorpuntos + 1

            End If

        Next

        For ciclo As Integer = 1 To longitudcadena 'Para evaluar caracter por caracter hasta encontrar una "/".

            caracterevaluado = Mid(TextBox2.Text, ciclo, 1)

            If caracterevaluado = "-" Then

                contadormenos = contadormenos + 1

            End If

        Next

        For ciclo As Integer = 1 To longitudcadena 'Para evaluar caracter por caracter hasta encontrar una "/".

            caracterevaluado = Mid(TextBox2.Text, ciclo, 1)

            If caracterevaluado = "/" Then

                contadorplecas = contadorplecas + 1

            End If

        Next

        If (Asc(e.KeyChar) >= 47 And Asc(e.KeyChar) <= 57) Or Asc(e.KeyChar) = 46 Or Asc(e.KeyChar) = 8 Or Asc(e.KeyChar) = 45 Then 'Los únicos caracteres que se permitirá introducir en el TextBox serán la placa ("/") y los números del 0 al 9 (ASCII del 47 al 57); el punto ("."); el signo menos ("-"), que es el ASCII 45; y el retroceso de espacio o backspace para borrar texto introducido, que es el ASCII 8.

            If (Asc(e.KeyChar) = 46) Then 'Si se presione la tecla del punto (".").

                If (contadorpuntos > 0) Then 'Cuando se pretenda introducir un segundo punto.

                    'Beep() 'Emite sonido cuando se presiona una tecla que no está permitida o que es inválida.

                    e.KeyChar = "" 'Reemplaza la tecla digitada con el valor de nada para que no se puedan introducir caracteres inválidos.

                End If

            End If

            If (Asc(e.KeyChar) = 45) Then 'Si se presione la tecla del signo menos ("-").

                If (contadormenos > 0) Then 'Cuando se pretenda introducir un segundo signo menos.

                    'Beep() 'Emite sonido cuando se presiona una tecla que no está permitida o que es inválida.

                    e.KeyChar = "" 'Reemplaza la tecla digitada con el valor de nada para que no se puedan introducir caracteres inválidos.

                End If

            End If

            If (Asc(e.KeyChar) = 47) Then 'Si se presione la tecla de la pleca ("/").

                If (contadorplecas > 0) Then 'Cuando se pretenda introducir una segunda pleca.

                    'Beep() 'Emite sonido cuando se presiona una tecla que no está permitida o que es inválida.

                    e.KeyChar = "" 'Reemplaza la tecla digitada con el valor de nada para que no se puedan introducir caracteres inválidos.

                End If

            End If

        Else

            'Beep() 'Emite sonido cuando se presiona una tecla que no está permitida o que es inválida.

            e.KeyChar = "" 'Reemplaza la tecla digitada con el valor de nada para que no se puedan introducir caracteres inválidos.

        End If

    End Sub

    Private Sub TextBox3_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox3.KeyPress

        Dim contadorpuntos As Integer

        Dim contadormenos As Integer

        Dim contadorplecas As Integer

        Dim longitudcadena As Integer = Len(TextBox3.Text) 'Variable para almacenar la longitud de la cadena que hay en un Textbox.

        Dim caracterevaluado As String 'Para evaluar caracter por caracter con el Mid().

        For ciclo As Integer = 1 To longitudcadena 'Para evaluar caracter por caracter hasta encontrar una "/".

            caracterevaluado = Mid(TextBox3.Text, ciclo, 1)

            If caracterevaluado = "." Then

                contadorpuntos = contadorpuntos + 1

            End If

        Next

        For ciclo As Integer = 1 To longitudcadena 'Para evaluar caracter por caracter hasta encontrar una "/".

            caracterevaluado = Mid(TextBox3.Text, ciclo, 1)

            If caracterevaluado = "-" Then

                contadormenos = contadormenos + 1

            End If

        Next

        For ciclo As Integer = 1 To longitudcadena 'Para evaluar caracter por caracter hasta encontrar una "/".

            caracterevaluado = Mid(TextBox3.Text, ciclo, 1)

            If caracterevaluado = "/" Then

                contadorplecas = contadorplecas + 1

            End If

        Next

        If (Asc(e.KeyChar) >= 47 And Asc(e.KeyChar) <= 57) Or Asc(e.KeyChar) = 46 Or Asc(e.KeyChar) = 8 Or Asc(e.KeyChar) = 45 Then 'Los únicos caracteres que se permitirá introducir en el TextBox serán la placa ("/") y los números del 0 al 9 (ASCII del 47 al 57); el punto ("."); el signo menos ("-"), que es el ASCII 45; y el retroceso de espacio o backspace para borrar texto introducido, que es el ASCII 8.

            If (Asc(e.KeyChar) = 46) Then 'Si se presione la tecla del punto (".").

                If (contadorpuntos > 0) Then 'Cuando se pretenda introducir un segundo punto.

                    'Beep() 'Emite sonido cuando se presiona una tecla que no está permitida o que es inválida.

                    e.KeyChar = "" 'Reemplaza la tecla digitada con el valor de nada para que no se puedan introducir caracteres inválidos.

                End If

            End If

            If (Asc(e.KeyChar) = 45) Then 'Si se presione la tecla del signo menos ("-").

                If (contadormenos > 0) Then 'Cuando se pretenda introducir un segundo signo menos.

                    'Beep() 'Emite sonido cuando se presiona una tecla que no está permitida o que es inválida.

                    e.KeyChar = "" 'Reemplaza la tecla digitada con el valor de nada para que no se puedan introducir caracteres inválidos.

                End If

            End If

            If (Asc(e.KeyChar) = 47) Then 'Si se presione la tecla de la pleca ("/").

                If (contadorplecas > 0) Then 'Cuando se pretenda introducir una segunda pleca.

                    'Beep() 'Emite sonido cuando se presiona una tecla que no está permitida o que es inválida.

                    e.KeyChar = "" 'Reemplaza la tecla digitada con el valor de nada para que no se puedan introducir caracteres inválidos.

                End If

            End If

        Else

            'Beep() 'Emite sonido cuando se presiona una tecla que no está permitida o que es inválida.

            e.KeyChar = "" 'Reemplaza la tecla digitada con el valor de nada para que no se puedan introducir caracteres inválidos.

        End If

    End Sub

    Private Sub TextBox4_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox4.KeyPress

        If (Asc(e.KeyChar) >= 48 And Asc(e.KeyChar) <= 57) Or (Asc(e.KeyChar) = 8) Then 'Los únicos caracteres que se permitirá introducir en el TextBox serán los números del 0 al 9 (ASCII del 48 al 57) y el Backspace (ASCII 8).

            'No se hace nada porque el caracter presionado es válido.

        Else

            'Beep() 'Emite sonido cuando se presiona una tecla que no está permitida o que es inválida.

            e.KeyChar = "" 'Reemplaza la tecla digitada con el valor de nada para que no se puedan introducir caracteres inválidos.

        End If

    End Sub

End Class

trapecio.vb

Imports System.Text

Imports System.CodeDom.Compiler

Imports System.Collections.Specialized 'Sin esto no funcionaría ninguna instanciación o variable declarada "As New StringCollection()"

Public Class trapecio

    Public celda(24, 5) As String 'Se declara un máximo de 25 filas y 6 columnas (pues se comienza a contar desde la posición 0).

    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click

        End 'Salir del programa (cerrarlo).

    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

        'Se limpian los valores de los TextBox.

        TextBox1.Text = ""

        TextBox2.Text = ""

        TextBox3.Text = ""

        TextBox4.Text = ""

        TextBox5.Text = ""

        AxMSFlexGrid1.Clear() 'Limpiar todas las celdas del FlexGrid para que no queden impresos resultados de procesos anteriores.

        AxMSFlexGrid1.Rows = 2 'Establece 2 filas.

        AxMSFlexGrid1.Cols = 2 'Establece 2 columnas.

    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

        If (TextBox3.Text <= TextBox2.Text) Or (TextBox4.Text < 0) Then 'Si "b" es menor o igual que "a" o si "n" es menor que cero entonces se mandará el mensaje de error correspondiente. De lo contrario se ejecutará el programa.

            MsgBox("'b' debe ser mayor que 'a' y 'n' debe ser mayor que cero.", , "Integración por Sumas de Riemman")

        Else

            Dim i, j As Integer '"i" significará "fila" y "j" significará columna, de modo que se trabajará con (i,j)=(fila,columna)

            'Establece cuántas filas y columnas tendrá el Grid.

            AxMSFlexGrid1.Rows = 25 'Establece 25 filas.

            AxMSFlexGrid1.Cols = 6 'Establece 6 columnas.

            'Se crea una nueva instancia de la clase Evaluador.

            Dim mEval As New Evaluador()

            'Se crea una variable tipo string y se le asigna la expresión que se quiere evaluar.

            Dim mExpresion As String = TextBox1.Text ' = "X".

            'Se crea un objeto StringCollection y se le agregan los parámetros de entrada que usará el método eval.

            Dim mParameters As New StringCollection()

            mParameters.Add("ByVal X as Double")

            'Las funciones a utilizar pertenece al espacio de nombres System.Math.

            'se hace necesario entonces, crear un objeto StringCollection y agregar

            'el namespace System.Math.

            Dim mNameSpaces As New StringCollection()

            mNameSpaces.Add("System.Math")

            'Se invoca el método PrecompilarFunción y se verifica si se generó correctamente el assembly.

            If mEval.PrecompilarAssembly(mExpresion, mParameters, mNameSpaces) Then

                'Si el assembly se generó correctamente, se crea un array con los valores de los parametros a evaluar.

                'Se invoca el método Evaluar y se asignan los resultados correspondientes.

                'Se limpian todas las celdas para que no queden impresos resultados de procesos anteriores.

                AxMSFlexGrid1.Clear()

                'Se comienzan a hacer los cálculos.

                'Valores para la primera iteración.

                TextBox5.Text = (Val(TextBox3.Text) – Val(TextBox2.Text)) / Val(TextBox4.Text) 'Almacena "delta x", que es "(b-a)/n".

                celda(1, 0) = 1 'Almacena el número "1" refiriéndose valor del intervalo.

                celda(1, 1) = Val(TextBox2.Text) 'Almacena el valor del límite de integración "a" ("Xi-1" para el primer Intervalo).

                celda(1, 2) = Val(celda(1, 1)) + Val(TextBox5.Text) 'Almacena la suma de "Xi-1" más "delta x", lo cual da el valor de "Xi".

                celda(1, 3) = mEval.Evaluar(Val(celda(1, 1))) 'Almacena la función evaluada en el punto "Xi-1", es decir "f(Xi-1").

                celda(1, 4) = mEval.Evaluar(Val(celda(1, 2))) 'Almacena la función evaluada en el punto "Xi", es decir "f(Xi)".

                celda(1, 5) = ((Val(celda(1, 3)) + Val(celda(1, 4))) / 2) * Val(TextBox5.Text) 'Almacena la multiplicación de la base por la altura de la porción de área tomada, que sería (("f(Xi-1)"+"f(Xi)")/2)*"delta x" lo cual es "Ai".

                'Valores para la segunda iteración en adelante.

                For ciclo As Integer = 2 To Val(TextBox4.Text)  'Si "n" vale 5, las iteraciones van desde 2 hasta 5.

                    celda(ciclo, 0) = Val(celda(ciclo – 1, 0)) + 1 'Almacena Intervalo para la iteración "ciclo", que es Intervalo de la iteración anterior más 1.

                    celda(ciclo, 1) = Val(celda(ciclo – 1, 2)) 'Almacena el valor de "Xi" del intervalo anterior.

                    celda(ciclo, 2) = Val(celda(ciclo, 1)) + Val(TextBox5.Text) 'Almacena la suma de "Xi-1" más "delta x", lo cual da el valor de "Xi".

                    celda(ciclo, 3) = mEval.Evaluar(Val(celda(ciclo, 1))) 'Almacena la función evaluada en el punto "Xi-1", es decir "f(Xi-1)".

                    celda(ciclo, 4) = mEval.Evaluar(Val(celda(ciclo, 2))) 'Almacena la función evaluada en el punto "Xi", es decir "f(Xi)".

                    celda(ciclo, 5) = ((Val(celda(ciclo, 3)) + Val(celda(ciclo, 4))) / 2) * Val(TextBox5.Text) 'Almacena la multiplicación de la base por la altura de la porción de área tomada, que sería (("f(Xi-1)"+"f(Xi)")/2)*"delta x" lo cual es "Ai".

                Next ciclo

                'Obtener valor de la integral, que es la sumatoria de todas las "Ai".

                Dim integral As Double = 0 'Se declara la variable que contendrá el valor de la sumatoria de todas las "Ai", es decir el valor de la integral.

                For ciclo As Integer = 1 To (Val(TextBox4.Text)) 'Si "n" vale 5, las iteraciones van desde 1 hasta 5.

                    integral += celda(ciclo, 5) 'Equivale a escribir "integral = integral + celda(ciclo, 5). Suma los valores de todas las "Ai", desde el Intervalo 1 hasta el último Intervalo.

                Next ciclo

                celda(Val(TextBox4.Text) + 1, 5) = integral 'Almacena el valor de la integral en la celda correspondiente.

                'Para indicar que se realizarán operaciones con el objeto AxMSFlexGrid1

                'sin necesidad de escribir su nombre.

                'De aquí en adelante vienen las impresiones de los valores en las celdas correspondientes.

                AxMSFlexGrid1.ForeColor = Color.Blue 'Cambia el color de letra de todas las celdas a azul.

                With AxMSFlexGrid1 'Para no estar poniendo por ejemplo AxMSFlexGrid1.set_ColWidth(0, 0) y así sucesivamente, no estar repitiendo a cada rato "AxMSFlexGrid1." NOTA: Desde el "With" hasta el "End With" solamente deben estarse mandando a imprimir valores a cada una de las celdas, y no estar haciendo cálculos con condiciones If ni nada de eso dentro del "With", pues todos los cálculos y condiciones deben hacerse afuera y venir a esta sección del "With" única y exclusivamente a hacer impresiones.

                    'Esto servirá para poner color azul a la letra de las celdas donde se muestran los resultados y hacer más grande el ancho de las columnas donde aparecen las celdas de los resultados, pues se estará trabajando con 10 decimales. Nótese que no se involucra la primera fila ni la primera columna debido a que se programan los For comenzando desde 1 y no desde 0.

                    For fila As Integer = 1 To .Rows – 1 'Para no involucrar la primera fila, se comienza de 1 y no de 0.

                        With AxMSFlexGrid1

                            .Row = fila

                            For columna As Integer = 1 To .Cols – 1 'Para no involucrar la primera columna, se comienza de 1 y no de 0.

                                .Col = columna

                                .CellForeColor = Color.Blue 'Por estar dentro del For, cambia el color de letra de todas las celdas a azul (excepto la primera fila y la primera columna).                 

                                .set_ColWidth(columna, 1300) 'Por estar deltro del For, le da un ancho de 1300 a cada columna (excepto a la primera columna).

                            Next

                        End With

                    Next

                    'Establece la alineación del contenido de la columna 0

                    .set_ColAlignment(0, MSFlexGridLib.AlignmentSettings.flexAlignCenterCenter)

                    'Se le ponen los respectivos títulos a cada columna.

                    .set_TextMatrix(0, 0, "Intervalo")

                    .set_TextMatrix(0, 1, "Xi-1")

                    .set_TextMatrix(0, 2, "Xi")

                    .set_TextMatrix(0, 3, "f(Xi-1)")

                    .set_TextMatrix(0, 4, "f(Xi)")

                    .set_TextMatrix(0, 5, "Ai")

                    '(Nótese que las impresiones se hacen con 8 posiciones decimales).

                    'Impresiones para primera iteración.

                    .set_TextMatrix(1, 0, Math.Round(Val(celda(1, 0)), 8)) 'Imprime el número "1" refiriéndose valor del intervalo.

                    .set_TextMatrix(1, 1, Math.Round(Val(celda(1, 1)), 8)) 'Imprime el valor del límite de integración "a" ("Xi-1" para el primer Intervalo).

                    .set_TextMatrix(1, 2, Math.Round(Val(celda(1, 2)), 8)) 'Imprime la suma de "Xi-1" más "delta x", lo cual da el valor de "Xi".

                    .set_TextMatrix(1, 3, Math.Round(Val(celda(1, 3)), 8)) 'Imprime la función evaluada en el punto "Xi-1", es decir "f(Xi-1").

                    .set_TextMatrix(1, 4, Math.Round(Val(celda(1, 4)), 8)) 'Imprime la función evaluada en el punto "Xi", es decir "f(Xi)".

                    .set_TextMatrix(1, 5, Math.Round(Val(celda(1, 5)), 8)) 'Imprime la multiplicación de la base por la altura de la porción de área tomada, que es (("f(Xi-1)"+"f(Xi)")/2)*"delta x" lo cual es "Ai".

                    'Impresiones para la segunda iteración en adelante.

                    For ciclo As Integer = 2 To Val(TextBox4.Text)  'Si "n" vale 5, las iteraciones van desde 2 hasta 5.

                        .set_TextMatrix(ciclo, 0, Math.Round(Val(celda(ciclo, 0)), 8)) 'Imprime Intervalo para la iteración "ciclo", que es Intervalo de la iteración anterior más 1.

                        .set_TextMatrix(ciclo, 1, Math.Round(Val(celda(ciclo, 1)), 8)) 'Imprime el valor de "Xi" del intervalo anterior.

                        .set_TextMatrix(ciclo, 2, Math.Round(Val(celda(ciclo, 2)), 8)) 'Imprime la suma de "Xi-1" más "delta x", lo cual da el valor de "Xi".

                        .set_TextMatrix(ciclo, 3, Math.Round(Val(celda(ciclo, 3)), 8)) 'Imprime la función evaluada en el punto "Xi-1", es decir "f(Xi-1)".

                        .set_TextMatrix(ciclo, 4, Math.Round(Val(celda(ciclo, 4)), 8)) 'Imprime la función evaluada en el punto "Xi", es decir "f(Xi)".

                        .set_TextMatrix(ciclo, 5, Math.Round(Val(celda(ciclo, 5)), 8)) 'Imprime la multiplicación de la base por la altura de la porción de área tomada, que es (("f(Xi-1)"+"f(Xi)")/2)*"delta x" lo cual es "Ai".

                    Next

                    .set_TextMatrix(Val(TextBox4.Text) + 1, 5, Math.Round(Val(celda(Val(TextBox4.Text) + 1, 5)), 8)) 'Imprime el valor de la integral en la celda correspondiente.

                End With

                TextBox6.Text = integral 'Imprime la respuesta de la integral de la función introducida.

            End If

        End If

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Me.Hide()

        Form1.Show()

    End Sub

    Private Sub TextBox2_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox2.KeyPress

        Dim contadorpuntos As Integer

        Dim contadormenos As Integer

        Dim contadorplecas As Integer

        Dim longitudcadena As Integer = Len(TextBox2.Text) 'Variable para almacenar la longitud de la cadena que hay en un Textbox.

        Dim caracterevaluado As String 'Para evaluar caracter por caracter con el Mid().

        For ciclo As Integer = 1 To longitudcadena 'Para evaluar caracter por caracter hasta encontrar una "/".

            caracterevaluado = Mid(TextBox2.Text, ciclo, 1)

            If caracterevaluado = "." Then

                contadorpuntos = contadorpuntos + 1

            End If

        Next

        For ciclo As Integer = 1 To longitudcadena 'Para evaluar caracter por caracter hasta encontrar una "/".

            caracterevaluado = Mid(TextBox2.Text, ciclo, 1)

            If caracterevaluado = "-" Then

                contadormenos = contadormenos + 1

            End If

        Next

        For ciclo As Integer = 1 To longitudcadena 'Para evaluar caracter por caracter hasta encontrar una "/".

            caracterevaluado = Mid(TextBox2.Text, ciclo, 1)

            If caracterevaluado = "/" Then

                contadorplecas = contadorplecas + 1

            End If

        Next

        If (Asc(e.KeyChar) >= 47 And Asc(e.KeyChar) <= 57) Or Asc(e.KeyChar) = 46 Or Asc(e.KeyChar) = 8 Or Asc(e.KeyChar) = 45 Then 'Los únicos caracteres que se permitirá introducir en el TextBox serán la placa ("/") y los números del 0 al 9 (ASCII del 47 al 57); el punto ("."); el signo menos ("-"), que es el ASCII 45; y el retroceso de espacio o backspace para borrar texto introducido, que es el ASCII 8.

            If (Asc(e.KeyChar) = 46) Then 'Si se presione la tecla del punto (".").

                If (contadorpuntos > 0) Then 'Cuando se pretenda introducir un segundo punto.

                    'Beep() 'Emite sonido cuando se presiona una tecla que no está permitida o que es inválida.

                    e.KeyChar = "" 'Reemplaza la tecla digitada con el valor de nada para que no se puedan introducir caracteres inválidos.

                End If

            End If

            If (Asc(e.KeyChar) = 45) Then 'Si se presione la tecla del signo menos ("-").

                If (contadormenos > 0) Then 'Cuando se pretenda introducir un segundo signo menos.

                    'Beep() 'Emite sonido cuando se presiona una tecla que no está permitida o que es inválida.

                    e.KeyChar = "" 'Reemplaza la tecla digitada con el valor de nada para que no se puedan introducir caracteres inválidos.

                End If

            End If

            If (Asc(e.KeyChar) = 47) Then 'Si se presione la tecla de la pleca ("/").

                If (contadorplecas > 0) Then 'Cuando se pretenda introducir una segunda pleca.

                    'Beep() 'Emite sonido cuando se presiona una tecla que no está permitida o que es inválida.

                    e.KeyChar = "" 'Reemplaza la tecla digitada con el valor de nada para que no se puedan introducir caracteres inválidos.

                End If

            End If

        Else

            'Beep() 'Emite sonido cuando se presiona una tecla que no está permitida o que es inválida.

            e.KeyChar = "" 'Reemplaza la tecla digitada con el valor de nada para que no se puedan introducir caracteres inválidos.

        End If

    End Sub

    Private Sub TextBox3_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox3.KeyPress

        Dim contadorpuntos As Integer

        Dim contadormenos As Integer

        Dim contadorplecas As Integer

        Dim longitudcadena As Integer = Len(TextBox3.Text) 'Variable para almacenar la longitud de la cadena que hay en un Textbox.

        Dim caracterevaluado As String 'Para evaluar caracter por caracter con el Mid().

        For ciclo As Integer = 1 To longitudcadena 'Para evaluar caracter por caracter hasta encontrar una "/".

            caracterevaluado = Mid(TextBox3.Text, ciclo, 1)

            If caracterevaluado = "." Then

                contadorpuntos = contadorpuntos + 1

            End If

        Next

        For ciclo As Integer = 1 To longitudcadena 'Para evaluar caracter por caracter hasta encontrar una "/".

            caracterevaluado = Mid(TextBox3.Text, ciclo, 1)

            If caracterevaluado = "-" Then

                contadormenos = contadormenos + 1

            End If

        Next

        For ciclo As Integer = 1 To longitudcadena 'Para evaluar caracter por caracter hasta encontrar una "/".

            caracterevaluado = Mid(TextBox3.Text, ciclo, 1)

            If caracterevaluado = "/" Then

                contadorplecas = contadorplecas + 1

            End If

        Next

        If (Asc(e.KeyChar) >= 47 And Asc(e.KeyChar) <= 57) Or Asc(e.KeyChar) = 46 Or Asc(e.KeyChar) = 8 Or Asc(e.KeyChar) = 45 Then 'Los únicos caracteres que se permitirá introducir en el TextBox serán la placa ("/") y los números del 0 al 9 (ASCII del 47 al 57); el punto ("."); el signo menos ("-"), que es el ASCII 45; y el retroceso de espacio o backspace para borrar texto introducido, que es el ASCII 8.

            If (Asc(e.KeyChar) = 46) Then 'Si se presione la tecla del punto (".").

                If (contadorpuntos > 0) Then 'Cuando se pretenda introducir un segundo punto.

                    'Beep() 'Emite sonido cuando se presiona una tecla que no está permitida o que es inválida.

                    e.KeyChar = "" 'Reemplaza la tecla digitada con el valor de nada para que no se puedan introducir caracteres inválidos.

                End If

            End If

            If (Asc(e.KeyChar) = 45) Then 'Si se presione la tecla del signo menos ("-").

                If (contadormenos > 0) Then 'Cuando se pretenda introducir un segundo signo menos.

                    'Beep() 'Emite sonido cuando se presiona una tecla que no está permitida o que es inválida.

                    e.KeyChar = "" 'Reemplaza la tecla digitada con el valor de nada para que no se puedan introducir caracteres inválidos.

                End If

            End If

            If (Asc(e.KeyChar) = 47) Then 'Si se presione la tecla de la pleca ("/").

                If (contadorplecas > 0) Then 'Cuando se pretenda introducir una segunda pleca.

                    'Beep() 'Emite sonido cuando se presiona una tecla que no está permitida o que es inválida.

                    e.KeyChar = "" 'Reemplaza la tecla digitada con el valor de nada para que no se puedan introducir caracteres inválidos.

                End If

            End If

        Else

            'Beep() 'Emite sonido cuando se presiona una tecla que no está permitida o que es inválida.

            e.KeyChar = "" 'Reemplaza la tecla digitada con el valor de nada para que no se puedan introducir caracteres inválidos.

        End If

    End Sub

    Private Sub TextBox4_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox4.KeyPress

        If (Asc(e.KeyChar) >= 48 And Asc(e.KeyChar) <= 57) Or (Asc(e.KeyChar) = 8) Then 'Los únicos caracteres que se permitirá introducir en el TextBox serán los números del 0 al 9 (ASCII del 48 al 57) y el Backspace (ASCII 8).

            'No se hace nada porque el caracter presionado es válido.

        Else

            'Beep() 'Emite sonido cuando se presiona una tecla que no está permitida o que es inválida.

            e.KeyChar = "" 'Reemplaza la tecla digitada con el valor de nada para que no se puedan introducir caracteres inválidos.

        End If

    End Sub

End Class

EvalClase.vb

Imports System.Math

Public Class EvalClase

    Public Shared Function Eval(ByVal X As Double) As Object

        Return X

    End Function

End Class

Evaluador.vb

Partes: 1, 2, 3, 4, 5, 6
 Página anterior Volver al principio del trabajoPágina siguiente