Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: Nightwinds en 16 Febrero 2011, 17:20 pm



Título: Ayuda con programa en Visual Basic
Publicado por: Nightwinds en 16 Febrero 2011, 17:20 pm
Crea un programa que muestre en un listbox todos los numeros pares entre 2 limites que determine el usuario.
Mi problema es que no me respeta el limite superior.
 
Private Sub Vw_Click()
Dim x1 As Integer
Dim y1 As Integer
Dim z As Integer
r = 2
x1 = Val(x.Text)
y1 = Val(y.Text)
For x1 = r To y1

z = x1 * r
c.AddItem z
Next x1
End Sub


Título: Re: Ayuda con programa en Visual Basic
Publicado por: Hurubnar en 16 Febrero 2011, 18:29 pm
En realidad, eso que tu has hecho no muestra los números pares de una secuencia, si no que multiplica x1 por r unas y veces: (y(x1*r)). Aquí te dejo lo que yo haría:

Código
  1. Dim i As Integer
  2. Dim j As Integer
  3.  
  4. i = Text1.Text
  5. j = Text2.Text
  6.  
  7. While i <= j
  8. If i / 2 = CInt(i / 2) Then
  9.    List1.AddItem (i)
  10. End If
  11. i = i + 1
  12. Wend

Eso haría que aparecieran en el ListBox los números pares desde i hasta j, es decir: [i, j]
Espero que te sirva,

Un saludo


Título: Re: Ayuda con programa en Visual Basic
Publicado por: 79137913 en 16 Febrero 2011, 18:32 pm
HOLA!!!

Código
  1. Private Sub Vw_Click()
  2. Dim x1 As Integer
  3. Dim y1 As Integer
  4. Dim z As Integer
  5. r = 2
  6. x1 = Val(x.Text)
  7. y1 = Val(y.Text)
  8. For x1 = r To y1 ' ERROR GRAVE GUARDSATE LA VARIABLE X.TEXT EN X1 Y ACA
  9.             ' LA SOBRE ESCRIBIS CON R QUE ES 2 ...
  10.             ' APARTE SI HACES QUE VAYA HASTA Y1 AL MULTIPLICAR POR R QUE ES 2
  11.             ' VAS A LLEGAR HASTA Y1*2  
  12.  
  13. z = x1 * r
  14. c.AddItem z
  15. Next x1
  16. End Sub

Solucion slecciona para ver (manteniendo tu estructura de codigo):
Private Sub Vw_Click()
DIM X1 AS INTEGER
DIM X2 AS INTEGER
DIM Z AS INTEGER
DIM R AS INTEGER
    x1 = Val(x.Text)
    y1 = Val(y.Text)
    R=2
    FOR X1 = X1 TO Y1
        Z = X1*R
        IF Z > Y1 THEN EXIT FOR
        c.AddItem z
    NEXT
End Sub
GRACIAS POR LEER!!!


Título: Re: Ayuda con programa en Visual Basic
Publicado por: Hurubnar en 16 Febrero 2011, 19:00 pm
O bien entendí mal, o el código de 79137913 es incorrecto... He entendido que se debían mostrarse en un ListBox los números pares de una secuencia (p.ej: desde 2 (que sería x) hasta el 30 (que sería y), vuestros códigos muestran números pares hasta 60 sin contar el 2). Entonces... ¿Qué es esa R que ponéis?

Código Nightwinds [incorrecto]:
Código
  1. Private Sub Vw_Click()
  2. Dim x1 As Integer
  3. Dim y1 As Integer
  4. Dim z As Integer
  5. r = 2
  6. x1 = Val(x.Text)
  7. y1 = Val(y.Text)
  8. For x1 = r To y1
  9.  
  10. z = x1 * r
  11. c.AddItem z
  12. Next x1
  13. End Sub

Código 79137913 [incorrecto]:
Código
  1. Private Sub Vw_Click()
  2. DIM X1 AS INTEGER
  3. DIM X2 AS INTEGER
  4. DIM Z AS INTEGER
  5. DIM R AS INTEGER
  6.    x1 = Val(x.Text)
  7.    y1 = Val(y.Text)
  8.    R=2
  9.    FOR X1 = X1 TO Y1
  10.        Z = X1*R
  11.        IF X1 > Y1 THEN EXIT FOR 'Este X1 se deberia cambiar por Z
  12.        c.AddItem z
  13.    NEXT
  14. End Sub

Código 79137913 [corregido]:
Código
  1. Private Sub Vw_Click()
  2. Dim X1 As Integer
  3. Dim X2 As Integer
  4. Dim Z As Integer
  5. Dim R As Integer
  6.    X1 = Val(x.Text)
  7.    Y1 = Val(y.Text)
  8.    R = 2
  9.  
  10.    For X1 = X1 To Y1
  11.        Z = X1 * R
  12.        If Z > Y1 Then Exit For 'Con el cambio hecho
  13.        c.AddItem Z
  14.    Next
  15. End Sub

El código que yo propuse antes ahora manteniendo la estructura de Nightwinds [correcto]:
Código
  1. Private Sub Vw_Click()
  2. Dim x As Integer
  3. Dim y As Integer
  4.  
  5. x = Text1.Text 'desde
  6. y = Text2.Text 'hasta
  7.  
  8. While x <= y
  9. If x / 2 = CInt(x / 2) Then
  10.    List1.AddItem (x)
  11. End If
  12. x = x + 1
  13. Wend
  14. End Sub

Corríganme si me equivoco,
Un saludo


Título: Re: Ayuda con programa en Visual Basic
Publicado por: 79137913 en 16 Febrero 2011, 19:08 pm
HOLA!!!

 @Herio : xD Es cierto, me pasa por no testear y programar directo aca en el foro XD.

Igual yo no lo hubiese programado asi, pero segui la logica de Nightwinds

GRACIAS POR LEER!!!


Título: Re: Ayuda con programa en Visual Basic
Publicado por: Hurubnar en 16 Febrero 2011, 19:11 pm
@79137913: Dudé si estaba mal o si yo lo entendí mal, puesto que eres tú quien suele corregirme y ayudarme en lo que respecta al Visual Basic 6, x)

Un saludo


Título: Re: Ayuda con programa en Visual Basic
Publicado por: Nightwinds en 17 Febrero 2011, 14:26 pm
Gracias sus post fueron de mucha ayuda


Título: Re: Ayuda con programa en Visual Basic
Publicado por: Hurubnar en 17 Febrero 2011, 14:29 pm
Me alegro de veras..

Un saludo


Título: Re: Ayuda con programa en Visual Basic
Publicado por: BlackZeroX en 19 Febrero 2011, 08:08 am
.
Yo lo haria así, si quieres saber para que el operador And y que funcion tiene lee un poco más; se les olvido el Step del For Next.

Código
  1.  
  2. Option Explicit
  3.  
  4. Private Sub Form_Load()
  5. Dim lng_i           As Variant
  6. Dim lng_ret()       As Long
  7.    For lng_i = 0 To GetParNumbers(-501, -11, lng_ret) - 1
  8.        Debug.Print lng_ret(lng_i)
  9.    Next lng_i
  10. End Sub
  11.  
  12. Public Function GetParNumbers(ByVal ThisIniVal As Long, ByVal ThisEndVal As Long, ByRef ArrOut() As Long) As Long
  13. Dim lng_i           As Long
  14. Dim lng_d           As Long
  15.    If ThisIniVal > ThisEndVal Then
  16.        lng_i = ThisEndVal
  17.        ThisEndVal = ThisIniVal
  18.        ThisIniVal = lng_i
  19.    End If
  20.    If (ThisIniVal And 1) = 1 Then ThisIniVal = ThisIniVal + 1
  21.    If (ThisEndVal And 1) = 1 Then ThisEndVal = ThisEndVal - 1
  22.    lng_i = (ThisEndVal - ThisIniVal) \ 2
  23.    If Not ((lng_i And &H80000000) = &H80000000) Then
  24.        ReDim ArrOut(0 To lng_i)
  25.        For lng_i = ThisIniVal To ThisEndVal Step 2
  26.            ArrOut(lng_d) = lng_i
  27.            lng_d = lng_d + 1
  28.        Next lng_i
  29.    End If
  30.    GetParNumbers = lng_d
  31. End Function
  32.  
  33.  

Dulces Lunas!¡.