Hola estoy intentado hacer una suma pero me sale SE ESPERABA FIN DE INSTRUCCION

Iniciado por Julio24quimic, 10 Mayo 2019, 20:23 PM

0 Miembros y 1 Visitante están viendo este tema.

Julio24quimic

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

Serapis

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:
Código (vb) [Seleccionar]
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:
Código (vb) [Seleccionar]
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...
Código (vb) [Seleccionar]

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

PirSys

creo que podrias utilizar un ciclo for next, antes que un do while. saludos