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
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:
Dim i As Integer
Dim j As Integer
i = Text1.Text
j = Text2.Text
While i <= j
If i / 2 = CInt(i / 2) Then
List1.AddItem (i)
End If
i = i + 1
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
HOLA!!!
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 ' ERROR GRAVE GUARDSATE LA VARIABLE X.TEXT EN X1 Y ACA
' LA SOBRE ESCRIBIS CON R QUE ES 2 ...
' APARTE SI HACES QUE VAYA HASTA Y1 AL MULTIPLICAR POR R QUE ES 2
' VAS A LLEGAR HASTA Y1*2
z = x1 * r
c.AddItem z
Next x1
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!!!
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]:
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
Código 79137913 [incorrecto]:
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 X1 > Y1 THEN EXIT FOR 'Este X1 se deberia cambiar por Z
c.AddItem z
NEXT
End Sub
Código 79137913 [corregido]:
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 'Con el cambio hecho
c.AddItem Z
Next
End Sub
El código que yo propuse antes ahora manteniendo la estructura de Nightwinds [correcto]:
Private Sub Vw_Click()
Dim x As Integer
Dim y As Integer
x = Text1.Text 'desde
y = Text2.Text 'hasta
While x <= y
If x / 2 = CInt(x / 2) Then
List1.AddItem (x)
End If
x = x + 1
Wend
End Sub
Corríganme si me equivoco,
Un saludo
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!!!
@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
Gracias sus post fueron de mucha ayuda
Me alegro de veras..
Un saludo
.
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.
Option Explicit
Private Sub Form_Load()
Dim lng_i As Variant
Dim lng_ret() As Long
For lng_i = 0 To GetParNumbers(-501, -11, lng_ret) - 1
Debug.Print lng_ret(lng_i)
Next lng_i
End Sub
Public Function GetParNumbers(ByVal ThisIniVal As Long, ByVal ThisEndVal As Long, ByRef ArrOut() As Long) As Long
Dim lng_i As Long
Dim lng_d As Long
If ThisIniVal > ThisEndVal Then
lng_i = ThisEndVal
ThisEndVal = ThisIniVal
ThisIniVal = lng_i
End If
If (ThisIniVal And 1) = 1 Then ThisIniVal = ThisIniVal + 1
If (ThisEndVal And 1) = 1 Then ThisEndVal = ThisEndVal - 1
lng_i = (ThisEndVal - ThisIniVal) \ 2
If Not ((lng_i And &H80000000) = &H80000000) Then
ReDim ArrOut(0 To lng_i)
For lng_i = ThisIniVal To ThisEndVal Step 2
ArrOut(lng_d) = lng_i
lng_d = lng_d + 1
Next lng_i
End If
GetParNumbers = lng_d
End Function
Dulces Lunas!¡.