Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: Julio24quimic en 10 Mayo 2019, 20:23 pm



Título: Hola estoy intentado hacer una suma pero me sale SE ESPERABA FIN DE INSTRUCCION
Publicado por: Julio24quimic en 10 Mayo 2019, 20:23 pm
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


Título: Re: Hola estoy intentado hacer una suma pero me sale SE ESPERABA FIN DE INSTRUCCION
Publicado por: Serapis en 11 Mayo 2019, 00:11 am
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
  1. 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
  1. 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
  1. Private Sub Command1_Click()
  2.    Dim n  As Integer, i As Integer
  3.    Dim expo1 As Double, expo2 As Double, v As Double
  4.    Dim pseudoPi As Double    
  5.    Const Pi As Double = 3.14159265358979
  6.  
  7.    'proceso
  8.    n = Val(TextBox1.Text)
  9.    i = 1
  10.    Do While (i <= n)
  11.        v = (1 / ((i + i - 1) ^ 3))
  12.        If (i And 1) Then
  13.            expo1 = (expo1 + v)
  14.        Else
  15.            expo2 = (expo2 + v)
  16.        End If
  17.        i = (i + 1)
  18.    Loop
  19.    pseudoPi = (expo1 - expo2)
  20.  
  21.    'salida
  22.    'Label3.Text = Str(pseudoPi) ' usa preferentemente cstr(x), porque  str(x) solo reconoce el '.' como separador de decimales.
  23.    Debug.Print "Calculado: " & CStr(pseudoPi) & vbCrLf & "Número Pi: " & CStr((Pi ^ 3) / 32)
  24. End Sub
  25.  


Título: Re: Hola estoy intentado hacer una suma pero me sale SE ESPERABA FIN DE INSTRUCCION
Publicado por: PirSys en 29 Agosto 2019, 19:05 pm
creo que podrias utilizar un ciclo for next, antes que un do while. saludos