Hola estoy intentado hacer esta serie= pi^3/32=1-1/3¡+1/5¡-1/7¡+1/9¡...... Dim n As Integer
Dim i As Integer
Dim p As Integer
Dim q As Integer
Dim a As Double
Dim b As Double
Dim expo1 As Double
Dim expo2 As Double
Dim pi As Double
'proceso
n = Val(TextBox1.Text)
a = 1
b = 1
i = 1
p = 1
q = 0
expo1 = 0
expo2 = 0
Do While i <= n
If i Mod 2 = 0 Then
b = b / ((i + p) ^ 3))
p = p + 2
expo2 = expo2 + b
b = 1
Else
a = a * (1 / ((i + q) ^ 3))
q = q + 2
expo1 = expo1 + a
a = 1
End If
i = 1 + 1
Loop
pi = expo1 - expo2
'salida
Label3.Text = Str(pi)
End Sub
me podrian ayudar por que me sale eso o si se puede hcer de una manera mas facil ayuda porfavor
En la línea: b = b / ((i + p) ^ 3))
Tienes 2 parentesis de apertura y 3 de cierre. Pero vamos, el error te lo debe cantar el propio editor al cambiar de color la línea afectada...
Debiera ser:
b = (b / ((i + p) ^ 3))
Aparte encuentro lun error semántico en la línea: i = 1 + 1
Supongo que la idea es incrementar 'i' en una unidad... si no generas un bucle infinito, salvo que n=2, porque 'i' al llegar ahí siempre será 2.
Luego debiera ser:
i = (i + 1)
Mi consejo es no usar variables que se presten a confusión por culpa de la fuente usada, 'i', 'l', 'o', mejor 'j', 'k', 'n'... a veces uno pued eno confundirlas nunca, pero al recurrir a alguien que transcribe, si puede errar y no darle importancia... (suele pasar en libros, por ejemplo, o a las prisas).
En cuanto al código se puede simplificar bastante...
Private Sub Command1_Click()
Dim n As Integer, i As Integer
Dim expo1 As Double, expo2 As Double, v As Double
Dim pseudoPi As Double
Const Pi As Double = 3.14159265358979
'proceso
n = Val(TextBox1.Text)
i = 1
Do While (i <= n)
v = (1 / ((i + i - 1) ^ 3))
If (i And 1) Then
expo1 = (expo1 + v)
Else
expo2 = (expo2 + v)
End If
i = (i + 1)
Loop
pseudoPi = (expo1 - expo2)
'salida
'Label3.Text = Str(pseudoPi) ' usa preferentemente cstr(x), porque str(x) solo reconoce el '.' como separador de decimales.
Debug.Print "Calculado: " & CStr(pseudoPi) & vbCrLf & "Número Pi: " & CStr((Pi ^ 3) / 32)
End Sub
creo que podrias utilizar un ciclo for next, antes que un do while. saludos