Rango de Aleatorios


([N1] Javier Duran Garcia) #1

Buenos días a todos.

Estoy intentando sacar un numero aleatorio entre un rango "1 - 41" pero la funcion de random() no me funciona muy alla.

Si pongo: random()     - Salen aleatorios de minimo 3000

Si pongo: random() % 10     - Salen aleatorios

Si pongo: random() = 41      - No sale nada, 0

 

Segun la info que hay aqui en la web al poner la 3ª opcion tendria que salir un aleatorio entre 0 y 41 pero solo sale 0.

Quiero sacar un aleatorio para seleccionar un registro de una tabla, si no se puede con random() hay alguna otra opcion?

 

--

Ate. Javier Durán García
Visita mi web NexusFireMan


([N1] Velasco) #2

Buenas Javier.

Me da que no le puedes poner límites al entero que te genera.

En cuanto a la expresión random() = 41 es errónea. En el manual lo ponen como ejemplo de número resultante: random() = 123.

La verdad es que no se me ocurre cómo poder limitar ese rango!!! :(

Un saludo.

 

 


Jorge Velaso Fernández

jvelasco@theseedsc.com

www.theseedsc.com


([N4] rcueto.velneo) #3

Estimado Javier:

En los ejemplos de las funciones de fórmulas siempre ponemos un ejemplo de uso de la fórmula y el resultado que da. Ejemplo:

len("abc") = 3

En el caso de la funcion random(), como ésta devuelve un número aleatorio, hemos puesto como ejemplo de resultado 123 (es decir, un número cualquiera):

randon() = 123

Por tanto, no quiere decir que igualando en una fórmula la funcion random a un número se obtenga un nº comprendido entre unos límites concretos, sino que si en una fórmula usamos la función random() obtendrremos un número, como por ejemplo, 123.

Un saludo,

rcueto.velneo


([N1] Javier Duran Garcia) #4

Entonces no hay ninguna forma de obtener un numero aleatorio entre un rango de valores?

O la selección de un registro aleatorio en una tabla?

En MySQL hay una instrucción para la obtención de un registro aleatorio y en la mayoría de lenguajes de programación se pueden obtener numero aleatorios ente rangos o en su defecto la creación de un bucle "While" o similar para su obtención.

No he encontrado una forma clara de hacerlo.

Si alguien lo sabe le agradecería me dijera como se hace.

Gracias.





([N1] agustin) #5

Hola Javier. No sé exactamente cómo se hace en v7 pero en v6 es bastante sencillo.

Si necesito sacar un número aleatorio entre 1 y 41 es sencillo:

1. sacar un número aleatorio

2 Obtener el resto de la división de ese número entre 41 ( en v6   aleatorio r 41 , está en las funciones lógicas en el asistente para fórmulas )

3 a ese resto sumarle 1 para que no sea 0 y que también salga 41, dado que el resto de esa división varía en el rango de 0 a 40

Espero que te sirva y que yo me haya explicado bien.

Un saludo

 


([N1] Velasco) #6

Buenas.

Ampliando lo dicho por Agustín tambien podemos utilizar una función javascript que he encontrado en el google.

Me explico:

1.- Te creas una función para poder utilizar desde cualquier sitio. (ver primera imagen)

2.- Pones en Fórmula texto del script (ver segunda imagen)

3.- Ya sólo te queda llamarla desde donde quieras (ver tercera imagen)

Un saludo.

 

 

 

Jorge Velasco Fernández

jvelasco@theseedsc.com

www.theseedsc.com

[attachment=9824,952] [attachment=9824,953] [attachment=9824,954]


([N1] Javier Duran Garcia) #7

Gracias a los 2.

Lo probare ahora a ver que sale :)


([N1] Javier Duran Garcia) #8

Gracias me ha funcionado perfecto.

Ahora solo me queda el poder seleccionar el registro correspondiente al numero de la tabla. Que sera facil (espero)

Lo unico es que el numero obtenido es "24.000000" Espero que los "0" no sean problema para la seleccion de registros en tabla :)

Gracias a los 2


([N1] Paco.Velactiva) #9

Hola Javier,

Seguramente si te dará problemas, puedes limpiar

los ceros con, la función estándar numérica round(“24.000000″, “0″ )

 

Un saludo

 

 


([N1] Paco.Velactiva) #10

Hola Javier,

Seguramente si te dará problemas, puedes limpiar

los ceros con, la función estándar numérica round(“24.000000″, “0″ )

 

Un saludo

 


([N1] Javier Duran Garcia) #11

Gracias por el apunte @Paco, no lo habia pensado.


([N2] desarrollosvfp) #12

Para obtener un número aleatorio entre 2 números, sin usar funciones, la fórmula es:

Para un aleatorio entre 1 y 41: 1+ round((41-1)* random()/32767, 0)

Aleatorio entre 3 y 5: 3+ round((5-3)* random()/32767, 0)
Aleatorio entre 2 y 7: 2+ round((7-2)* random()/32767, 0)
Aleatorio entre 1 y 9: 1+ round((9-1)* random()/32767, 0)

SET(NUM_ALEATORIO, 1+ round((41-1)* random()/32767, 0))

Explicación: debido a que random() genera un número aleatorio entre 0 y 32767, el cociente de random()/32767 será un número entre 0 y 1. Si tomamos el caso de (7-2), el producto (7-2)* random()/32767 será máximo 5, mínimo 0. Al sumarle 2 dará máximo 7, mínimo 2.

http://velneo.es/info_v7_717_es/velneo_vdevelop_v7/proyectos_objetos_y_editores/asistente_de_formulas/funciones_estandar/funciones_numericas/random/

:slight_smile:


([N1] giovanni) #13

jaja muchas gracias por el aporte.

Una respuesta mucho mas concreta que la del soporte.


([N1] wikan) #14

Según la documentación

RAND_MAX es un valor establecido en las librerias de C++ del sistema operativo y no debería ser inferior a 32767

Así que podría ser superior, supongo que dependerá de los bits del sistema


([N3] pacosatu) #15

Hola.

La forma más sencilla con Velneo, e independiente del valor que retorne la función random(), es la siguiente:

Función: FUN_ALEATORIO_RANGO


Rem (Parámetros NMIN y NMAX)
Rem (Devuelve un valor aleatorio en el rango NMIN y NMAX)
Set ( NRESULTADO, ( random() % ( NMAX - NMIN) ) + NMIN )
Set dato de retorno ( NRESULTADO )

Probadla.
Saludos
Paco Satué