SoloCodigo

Programación General => Visual Basic 6.0 e inferiores => Mensaje iniciado por: Empar en Lunes 9 de Diciembre de 2002, 10:26

Título: Re: Trabajar con vectores
Publicado por: Empar en Lunes 9 de Diciembre de 2002, 10:26
Hola que tal,

mi pregunta es la siguiente: quiero crear un vector que inicialmente esté vacío e ir añadiendo elementos, pero cada vez que añada un nuevo elemento quiero comprobar que este no forme parte de los que ya hay. He estado probando diferentes formas de hacerlo pero siempre me da un error, he hecho algo así:

otra_vez:
i = Int((19 - 0 + 1) * Rnd + 0)

For X = 0 To j
    If v(X) = i Then GoTo otra_vez
Next X
j=j+1
v(j)=i
Título: Trabajar con vectores
Publicado por: javierbalk en Lunes 9 de Diciembre de 2002, 17:46
Hola Empar:

Te hice un ejemplo, para probarlo abre un proyecto nuevo, coloca un botón de comando y pega el sig. código:

'*****************************
Dim v() As Long

Option Explicit

Private Sub Command1_Click()
    Dim Texto As String
    Dim X As Long
   
    AgregarElemento
    For X = 1 To UBound(v)
        Texto = Texto & v(X) & vbCrLf
    Next
    MsgBox Texto
End Sub

Private Sub AgregarElemento()
    Dim I As Long
    Dim X As Long
    Dim YaExiste As Boolean
    Dim NuevoIndice As Long
   
    I = Int(Rnd * 19) ' cambiar por lo que sea
    YaExiste = True
    Do Until Not YaExiste
        YaExiste = False
        For X = 1 To UBound(v)
            If v(X) = I Then
                YaExiste = True
                I = Int(Rnd * 19) ' cambiar por lo que sea
                Exit For
            End If
        Next
    Loop
   
    NuevoIndice = UBound(v) + 1
    ReDim Preserve v(NuevoIndice)
    v(NuevoIndice) = I
End Sub

Private Sub Form_Load()
    ReDim v(0) ' inicializo el vector con la posicón 0 que luego nuca uso, lo voy a usar a partir de la 1, pero hago esto para que despues ya esté inicializado y no me de error
End Sub
'*****************************

Tené en cuenta que por ejemplo, en este caso, una vez que ya hay 19 elementos ingresados se queda indefinidamente buscando cual agregar, pero resulta que como ya están los 19 no encuentra uno que no esté y no sale más del loop, si en tu caso puede pasar algo parecido tendrías que ponerle una validación o protección para que eso no ocurra.

Saludos,
Javier