Hola,
Soy nuevo en el foro pero tengo un problema con un programa en Visual Basic ultima versión al momento de colocar los datos. Pues la respuesta que me debe dar es 0.25 y al ingresar los valores con (.) me da 5.015 y si los ingreso con (,) no me corre el programa y se detiene. el código que uso es el siguiente:
Dim Qd, ks, dd, Ec, Ev, dh, l, z2, H, p, u, km, di, g, visc, hf1, v, Q, hf2, er As Double
Qd = TextBox1.Text
ks = TextBox2.Text
dd = TextBox3.Text
Ec = TextBox4.Text
Ev = TextBox5.Text
dh = TextBox6.Text
l = TextBox7.Text
z2 = TextBox8.Text
H = TextBox9.Text
p = TextBox10.Text
u = TextBox11.Text
km = TextBox12.Text
di = TextBox13.Text
g = 9.81
visc = u / p
hf1 = H - z2
Dim comprobacion As Boolean
comprobacion = False
Do Until (comprobacion.Equals(True))
v = ((-2 * Math.Sqrt(2 * g * di * hf1)) / Math.Sqrt(l)) * Math.Log10(((ks) / (3.7 * di)) + ((2.51 * visc * Math.Sqrt(l)) / (di * Math.Sqrt(2 * g * di * hf1))))
Q = v * (Math.PI) * (di ^ 2) / 4
Dim comprobacion1 As Boolean
comprobacion1 = False
Do Until (comprobacion1.Equals(True))
If (Q >= Qd) Then
comprobacion1 = True
Else
di = di + dd
v = ((-2 * Math.Sqrt(2 * g * di * hf1)) / Math.Sqrt(l)) * Math.Log10(((ks) / (3.7 * di)) + ((2.51 * visc * Math.Sqrt(l)) / (di * Math.Sqrt(2 * g * di * hf1))))
Q = v * (Math.PI * (di ^ 2) / 4)
End If
Loop
'La parte de peridas altas va desde aca'
Dim vp As Double
vp = Math.Sqrt((2 * g * H) / (km))
Dim comprobacionv As Boolean
comprobacionv = False
Do Until (comprobacionv.Equals(True))
If (v < vp) Then
comprobacionv = True
'el procedimiento A va desde aca'
Else
hf1 = 0.000001
Do Until (comprobacionv.Equals(True))
v = ((-2 * Math.Sqrt(2 * g * di * hf1)) / Math.Sqrt(l)) * Math.Log10(((ks) / (3.7 * di)) + ((2.51 * visc * Math.Sqrt(l)) / (di * Math.Sqrt(2 * g * di * hf1))))
Q = v * (Math.PI * (di ^ 2) / 4)
Dim comprovacionv1 As Boolean
comprovacionv1 = False
Do Until (comprovacionv1.Equals(True))
If (Q > Qd) Then
comprovacionv1 = True
Else
di = di + dd
v = ((-2 * Math.Sqrt(2 * g * di * hf1)) / Math.Sqrt(l)) * Math.Log10(((ks) / (3.7 * di)) + ((2.51 * visc * Math.Sqrt(l)) / (di * Math.Sqrt(2 * g * di * hf1))))
Q = v * (Math.PI * (di ^ 2) / 4)
End If
Loop
vp = Math.Sqrt((2 * g * (H - hf1)) / km)
If ((Math.Abs(v - vp)) < Ev) Then
comprobacionv = True
Else
If (v < vp) Then
hf1 = hf1 + dh
Else
hf1 = hf1 - dh
End If
di = 0.015
End If
Loop
End If
Loop
'La parte de peridas altas va hasta aca'
hf2 = H - z2 - (v ^ 2 / (2 * g))
Dim comprobacion2 As Boolean
comprobacion2 = False
Do Until (comprobacion2.Equals(True))
If ((Math.Abs(hf1 - hf2) <= er)) Then
comprobacion2 = True
Else
v = ((-2 * Math.Sqrt(2 * g * di * hf2)) / Math.Sqrt(l)) * Math.Log10(((ks) / (3.7 * di)) + ((2.51 * visc * Math.Sqrt(l)) / (di * Math.Sqrt(2 * g * di * hf2))))
Q = v * (Math.PI * (di ^ 2) / 4)
hf1 = hf2
hf2 = H - z2 - (v ^ 2 / (2 * g))
End If
Loop
If (Q >= Qd) Then
comprobacion = True
Else
comprobacion = False
End If
Label14.Text = "d = " + di.ToString
Loop
End Sub
Los valores en los cuadros de texto son en orden: 0.12, 0.00015, 0.005, 0.01, 0.01, 0.05, 17, 0, 2.2, 999.3, 0.00117, 4.3, 0.1.
Si alguien me puede ayudar es URGENTE