Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: luis456 en 9 Abril 2015, 14:35 pm



Título: rellenar con rand variable ya cargada de datos
Publicado por: luis456 en 9 Abril 2015, 14:35 pm
 Otro de mis inventos :)

quiero rellenar con numeros aleatorios cuando la cuenta de la variable este por debajo de 30, el rango de estos numeros es 00 al 99, pero no deberian de repetir en la variable.

tengo esto que rellena pero con ceros

Código
  1. If Resultados.Count < 30 Then
  2.  
  3.           Resultados = Resultados.Concat(Enumerable.Repeat(Of Integer)(0, (30 - Resultados.Count)))
  4.  
  5.          End If

entonces se me ocurrio esto pero nunca me da la seguridad de tener como minimo 30 datos en la variable :( a veces el programa entero no llega a esa cantidad y FALLO

Código
  1. If Resultados.Count < 30 Then
  2.  
  3.           Resultados = numerosFaltantesdelRango
  4.  
  5.        End If




Luis


Título: Re: rellenar con rand variable ya cargada de datos
Publicado por: ivancea96 en 9 Abril 2015, 14:49 pm
Si quieres insertar sin repetición 30 números del 0 al 99, puedes cargar un vector con las 100 posibilidades, y luego ir eligiendo al azar, e insertando. Al insertar, lo borras del vector para evitar duplicados.


Título: Re: rellenar con rand variable ya cargada de datos
Publicado por: luis456 en 9 Abril 2015, 15:06 pm
Si quieres insertar sin repetición 30 números del 0 al 99, puedes cargar un vector con las 100 posibilidades, y luego ir eligiendo al azar, e insertando. Al insertar, lo borras del vector para evitar duplicados.

No es meter o insertar 30 numeros es completar explico, si hay 25 numeros la funcion rand debera de llegar a completar la diferencia sin repetir los numeros :)  porque si no lo que podria hacer es sumar otra variable cargada fija a la otra y utlizar " distint" para eliminar repetidos :)

Gracias por responder

Luis


Título: Re: rellenar con rand variable ya cargada de datos
Publicado por: ivancea96 en 9 Abril 2015, 15:13 pm
Para el ejemplo que di antes, si ya hay valores, basta retirar inicialmente los valores que ya hay del vector.


Título: Re: rellenar con rand variable ya cargada de datos
Publicado por: DarK_FirefoX en 9 Abril 2015, 15:25 pm
Si entendí bien, digamos que en resultado tienes una serie de números como "resultado" de algo, y quieres con la función rand, llegar a 30 números sin que se repita ninguno de los anteriores!

¿Que cosa es la variable resultado?


Título: Re: rellenar con rand variable ya cargada de datos
Publicado por: luis456 en 9 Abril 2015, 16:03 pm
Si entendí bien, digamos que en resultado tienes una serie de números como "resultado" de algo, y quieres con la función rand, llegar a 30 números sin que se repita ninguno de los anteriores!

¿Que cosa es la variable resultado?

Hola
si la variable se llena con una funcion que tengo, esta funcion genera numeros que van desde 00 al 99 pero a veces esta funcion genera menos de 30 numeros y como utilizo otras particiones para formar claves numericas si no llega a este minimo el programa me da error

Y me imagino que preguntas por esto de la variable y es la debe de tener mas de 30 registros

Código
  1. Dim Resultados As IEnumerable(Of Integer)  

Luis




Título: Re: rellenar con rand variable ya cargada de datos
Publicado por: DarK_FirefoX en 9 Abril 2015, 16:10 pm
A ver, yo me pierdo un poco con la sintaxis de VB.NET, entonces, te voy a tratar de explicar lo que yo haría:

Tuviera un array de bool con un tamaño de 100 (00 a 99), entonces cada vez que tu función genere un número lo guardas normal, pero en este array de bool indexas en ese número y lo pones en true, y así sucesivamente, luego, cuando vayas a generar tus números con rand (en caso de que lo necesites, si el count<30), lo capturas antes de agregarlo a resultado e indexas y chequeas en ese array de bool a ver si está en true, si esta en true, calculas otro aleatorio, sino, lo insertas y lo pones en true. De esta manera evitaras tener valores repetidos

Me explico?


Título: Re: rellenar con rand variable ya cargada de datos
Publicado por: Eleкtro en 9 Abril 2015, 18:07 pm
No hay manera, he, luis?.

En el siguiente ejemplo, tengo una colección del 1 al 5, y relleno la colección con números aleatorios del 1 al 10 sin que estos se repitan entre ellos ni entre los números que ya hay en la colección, hasta incrementar la cantidad de elementos de la colección a 10.

Dicho de otra forma, tengo una lista del 1 al 5, genero una secuencia aleatoria del 1 al 10 y relleno la lista del 1 al 5 con los 5 números restantes del 5 al 10.

Puedes modificar los valores para tus necesidades...

Código
  1. Dim col As IEnumerable(Of Integer) = {1, 2, 3, 4, 5}
  2. Dim minColCount As Integer = 10
  3. Dim minRandValue As Integer = 1
  4. Dim maxRandValue As Integer = 10
  5. Dim rand As Random = New Random
  6.  
  7. If col.Count < minColCount Then
  8.  
  9.    Dim randCol As IEnumerable(Of Integer) =
  10.        From value As Integer In Enumerable.Range(minRandValue, maxRandValue)
  11.        Order By rand.Next
  12.        Where Not col.Contains(value)
  13.        Take (minColCount - col.Count)
  14.  
  15.    col = Enumerable.Concat(col, randCol.ToArray)
  16.  
  17. End If
  18.  
  19. Debug.WriteLine(String.Join("; ", col))

Saludos


Título: Re: rellenar con rand variable ya cargada de datos
Publicado por: luis456 en 10 Abril 2015, 10:56 am
No hay manera, he, luis?.

En el siguiente ejemplo, tengo una colección del 1 al 5, y relleno la colección con números aleatorios del 1 al 10 sin que estos se repitan entre ellos ni entre los números que ya hay en la colección, hasta incrementar la cantidad de elementos de la colección a 10.

Dicho de otra forma, tengo una lista del 1 al 5, genero una secuencia aleatoria del 1 al 10 y relleno la lista del 1 al 5 con los 5 números restantes del 5 al 10.

Puedes modificar los valores para tus necesidades...

Código
  1. Dim col As IEnumerable(Of Integer) = {1, 2, 3, 4, 5}
  2. Dim minColCount As Integer = 10
  3. Dim minRandValue As Integer = 1
  4. Dim maxRandValue As Integer = 10
  5. Dim rand As Random = New Random
  6.  
  7. If col.Count < minColCount Then
  8.  
  9.    Dim randCol As IEnumerable(Of Integer) =
  10.        From value As Integer In Enumerable.Range(minRandValue, maxRandValue)
  11.        Order By rand.Next
  12.        Where Not col.Contains(value)
  13.        Take (minColCount - col.Count)
  14.  
  15.    col = Enumerable.Concat(col, randCol.ToArray)
  16.  
  17. End If
  18.  
  19. Debug.WriteLine(String.Join("; ", col))

Saludos


 Perfecto :) me lees la mente jejejje

Gracias otrar ves mas

Luis