ayuda a inexperto

borisjd
28 de Julio del 2004
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

Jose Oscar
28 de Julio del 2004
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