.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
Página anterior | Volver al principio del trabajo | Página siguiente |