ayuda a inexperto
tengo muy pocos conocimientos de VB y estoy intentanto hacer un pequeño programa para resolver un problema concreto, el problema que tengo es con los decimales, los datos se introducen en un cuadro de texto y utilizo la coma ya que el punto no me lo reconoce como separador de decimales. El problema viene cuando se calcula un dato y se encadena más de un cálculo con ese dato, da unos resultados que no tienen sentido, el resultado del primer cálculo es correcto pero los siguientes no. Adjunto el código del programa (que me disculpen los expertos):
Static Function Log10(X)
Log10 = Log(X) / Log(10#)
End Function
Private Sub CALCULAR_Click()
Dim CONTADOR As Integer
Dim ERROR As Variant
Dim DENSIDAD, VISCOSIDAD, Q, P1, P2, V1, V2 As Variant
Dim L, A1, A2, DIFALT, RUGOSIDAD, DSUP As Variant
Dim fchen, fcalculada, Re, RUGOSIDADRELATIVA As Variant
Dim TPRESION, TVELOCIDAD, TALTURA, TPERDIDAS As Variant
Dim T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11 As Variant
P1 = P1TEXT.Text
P2 = P2Text.Text
V1 = V1Text.Text
V2 = V2Text.Text
A1 = Alt1Text.Text
A2 = Alt2Text.Text
DIFALT = A2 - A1
Q = QText.Text
L = LongitudText.Text
RUGOSIDAD = RugosidadText.Text
DENSIDAD = DensidadText.Text
VISCOSIDAD = VISCOText.Text
DSUP = DsupText.Text
CONTADOR = 1
TPRESION = (P1 - P2) / DENSIDAD
TPRESIONText.Text = TPRESION
TVELOCIDAD = 0.5 * (V2 ^ 2 - V1 ^ 2)
TVELOCIDADText.Text = TVELOCIDAD
TALTURA = 9.81 * (A2 - A1)
TALTURAText.Text = TALTURA
TPERDIDAS = PerdidasmenoresText.Text
fcalculada = ((TPRESION - TVELOCIDAD - TALTURA + TPERDIDAS) * ((3.14159265358979 ^ 2) * (DSUP ^ 5))) / (32 * Q ^ 2 * L)
fcalculadaText.Text = fcalculada
Re = 4 * Q * DENSIDAD / (3.14159265358979 * DSUP * VISCOSIDAD)
ReText.Text = Re
RUGOSIDADRE = RUGOSIDAD / DSUP
PI2Text.Text = RUGOSIDADRE
T1 = (RUGOSIDADRE / 3.7065)
T2 = 5.0452 / Re
T3 = (RUGOSIDADRE ^ 1.1098) / 2.8257
T4 = 5.8506 / Re ^ 0.8981
T5 = T3 + T4
T6 = Log10(T5)
T7 = T2 * T6
T8 = T1 - T7
T9 = Log10(T8)
T10 = -4 * T9
T11 = 1 / T10
fchen = T11 ^ 2
fchenText.Text = fchen
DSUP = ((32 * Q ^ 2 * L * fchen) / ((TPRESION - TVELOCIDAD - TALTURA) * (3.14159265358979 ^ 2))) ^ (1 / 5)
DnecesarioText.Text = DSUP
End Sub.
fcalculada y RUGOSIDADRE lo calcula correctamente, pero los términos T1, T2, .... el resultado no tiene sentido.
Por favor, ayudarme
Static Function Log10(X)
Log10 = Log(X) / Log(10#)
End Function
Private Sub CALCULAR_Click()
Dim CONTADOR As Integer
Dim ERROR As Variant
Dim DENSIDAD, VISCOSIDAD, Q, P1, P2, V1, V2 As Variant
Dim L, A1, A2, DIFALT, RUGOSIDAD, DSUP As Variant
Dim fchen, fcalculada, Re, RUGOSIDADRELATIVA As Variant
Dim TPRESION, TVELOCIDAD, TALTURA, TPERDIDAS As Variant
Dim T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11 As Variant
P1 = P1TEXT.Text
P2 = P2Text.Text
V1 = V1Text.Text
V2 = V2Text.Text
A1 = Alt1Text.Text
A2 = Alt2Text.Text
DIFALT = A2 - A1
Q = QText.Text
L = LongitudText.Text
RUGOSIDAD = RugosidadText.Text
DENSIDAD = DensidadText.Text
VISCOSIDAD = VISCOText.Text
DSUP = DsupText.Text
CONTADOR = 1
TPRESION = (P1 - P2) / DENSIDAD
TPRESIONText.Text = TPRESION
TVELOCIDAD = 0.5 * (V2 ^ 2 - V1 ^ 2)
TVELOCIDADText.Text = TVELOCIDAD
TALTURA = 9.81 * (A2 - A1)
TALTURAText.Text = TALTURA
TPERDIDAS = PerdidasmenoresText.Text
fcalculada = ((TPRESION - TVELOCIDAD - TALTURA + TPERDIDAS) * ((3.14159265358979 ^ 2) * (DSUP ^ 5))) / (32 * Q ^ 2 * L)
fcalculadaText.Text = fcalculada
Re = 4 * Q * DENSIDAD / (3.14159265358979 * DSUP * VISCOSIDAD)
ReText.Text = Re
RUGOSIDADRE = RUGOSIDAD / DSUP
PI2Text.Text = RUGOSIDADRE
T1 = (RUGOSIDADRE / 3.7065)
T2 = 5.0452 / Re
T3 = (RUGOSIDADRE ^ 1.1098) / 2.8257
T4 = 5.8506 / Re ^ 0.8981
T5 = T3 + T4
T6 = Log10(T5)
T7 = T2 * T6
T8 = T1 - T7
T9 = Log10(T8)
T10 = -4 * T9
T11 = 1 / T10
fchen = T11 ^ 2
fchenText.Text = fchen
DSUP = ((32 * Q ^ 2 * L * fchen) / ((TPRESION - TVELOCIDAD - TALTURA) * (3.14159265358979 ^ 2))) ^ (1 / 5)
DnecesarioText.Text = DSUP
End Sub.
fcalculada y RUGOSIDADRE lo calcula correctamente, pero los términos T1, T2, .... el resultado no tiene sentido.
Por favor, ayudarme
Tu problema es la anidacion, a seha
3 * 2 + 15 * 4
a simple vista da 84, sim emabargo no es asi da 66 por que piensa esto
( 3 * 2 ) + ( 15 * 4 )
Para que de 66 deberia estar asi
( 3 * 2 + 15 ) * 4
Segun lo anides hace una cosa o otra, el problema es la prioridad de operadores matematicos elevacion esta primero y luego multiplicaion, pero no te fies mucho, es que no lo recuerdo bien
Haz unas cuantas pruebas y vas a caer en cuenta de como funciona , anidalos de diferentes formas
Disculpas y espero haberte ayyudado ahun que seha sólo un poco
Un saludo
Jose Oscar
3 * 2 + 15 * 4
a simple vista da 84, sim emabargo no es asi da 66 por que piensa esto
( 3 * 2 ) + ( 15 * 4 )
Para que de 66 deberia estar asi
( 3 * 2 + 15 ) * 4
Segun lo anides hace una cosa o otra, el problema es la prioridad de operadores matematicos elevacion esta primero y luego multiplicaion, pero no te fies mucho, es que no lo recuerdo bien
Haz unas cuantas pruebas y vas a caer en cuenta de como funciona , anidalos de diferentes formas
Disculpas y espero haberte ayyudado ahun que seha sólo un poco
Un saludo
Jose Oscar
