Quería obtener una cantidad de números aleatorios que fueran reales y sin repetición.
Lo hice de dos formas con cadenas y con reales. Con reales no me ha salido como quisiera,
se repiten..no son iguales.
Private Const CANTNUMS As Integer = 10
Public Sub Main()
Randomize
ConCadenas()
ConReales()
End
Public Sub ConCadenas()
Dim anumeros As New String[]
Dim snumero As String
Dim x As Integer
While x < CANTNUMS
snumero = Format(Rnd(0.01, 0.02), "0.###")
snumero = Replace(snumero, ",", ".")
If anumeros.Find(snumero) = -1 Then
anumeros.Add(snumero)
x += 1
Endif
Wend
MostrarArray(anumeros)
End
Public Sub ConReales()
Dim anumeros As New Float[]
Dim snumero As String
Dim fnumero As Float
Dim x As Integer
While x < CANTNUMS
snumero = Format(Rnd(0.01, 0.02), "0.###")
snumero = Replace(snumero, ",", ".")
fnumero = CFloat(snumero)
If anumeros.Find(fnumero) = -1 Then
anumeros.Add(fnumero)
x += 1
Endif
Wend
MostrarArray(anumeros)
End
Public Sub MostrarArray(auniversal As Variant[])
Dim elemento As Variant
Dim tipo As String
Dim cuenta As Integer
Select Case TypeOf(auniversal[0])
Case gb.String
tipo = "cadena"
Case gb.Float
tipo = "real"
End Select
Print "El tipo es: " & tipo
For Each elemento In auniversal
If Not (cuenta = auniversal.Max) Then
Print elemento; " , ";
Else
Print elemento
Endif
cuenta += 1
Next
Print
End
Public Sub Main()
Randomize
ConCadenas()
ConReales()
End
Public Sub ConCadenas()
Dim anumeros As New String[]
Dim snumero As String
Dim x As Integer
While x < CANTNUMS
snumero = Format(Rnd(0.01, 0.02), "0.###")
snumero = Replace(snumero, ",", ".")
If anumeros.Find(snumero) = -1 Then
anumeros.Add(snumero)
x += 1
Endif
Wend
MostrarArray(anumeros)
End
Public Sub ConReales()
Dim anumeros As New Float[]
Dim snumero As String
Dim fnumero As Float
Dim x As Integer
While x < CANTNUMS
snumero = Format(Rnd(0.01, 0.02), "0.###")
snumero = Replace(snumero, ",", ".")
fnumero = CFloat(snumero)
If anumeros.Find(fnumero) = -1 Then
anumeros.Add(fnumero)
x += 1
Endif
Wend
MostrarArray(anumeros)
End
Public Sub MostrarArray(auniversal As Variant[])
Dim elemento As Variant
Dim tipo As String
Dim cuenta As Integer
Select Case TypeOf(auniversal[0])
Case gb.String
tipo = "cadena"
Case gb.Float
tipo = "real"
End Select
Print "El tipo es: " & tipo
For Each elemento In auniversal
If Not (cuenta = auniversal.Max) Then
Print elemento; " , ";
Else
Print elemento
Endif
cuenta += 1
Next
End
La salida fue:
Citar:
Como veis se repiten los números reales. El ejemplo necesita otro planteamiento, se ha repetido parte del código.
La idea es que se vean los tipos.
Saludos