Ayuda con programa en Visual Basic

Iniciado por Nightwinds, 16 Febrero 2011, 17:20 PM

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

Nightwinds

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

Hurubnar

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 (vb) [Seleccionar]
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

79137913

#2
HOLA!!!

Código (vb) [Seleccionar]
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!!!
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

79137913                          *Shadow Scouts Team*

Hurubnar

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

79137913

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!!!
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

79137913                          *Shadow Scouts Team*

Hurubnar

@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

Nightwinds

#6
Gracias sus post fueron de mucha ayuda

Hurubnar


BlackZeroX

#8
.
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 (Vb) [Seleccionar]


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!¡.
The Dark Shadow is my passion.