Clipper/FiveWin - GENERAR NUMEROS ALEATORIOS

 
Vista:

GENERAR NUMEROS ALEATORIOS

Publicado por Antonio (222 intervenciones) el 23/03/2015 10:34:47
Hola a todos:
Tengo un programa para jugar al bingo y uso una función para generar números aleatorios,
el problema es que los últimos numero que me genera casi siempre son los mismos,
Alguno tiene una función que sea mejor que la mía.
Gracias
O una función que una vez cargados los números en una tabla o dbf los ordene aleatoriamente.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de carlos labastida

GENERAR NUMEROS ALEATORIOS

Publicado por carlos labastida (160 intervenciones) el 25/03/2015 05:22:05
puedes darme un ejemplo para tener una base y mandarte el algoritmo, yo tengo un programa para inventar datos fiscales al azar, pero no se si es el algoritmo correcto para lo que quieres hacer
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

GENERAR NUMEROS ALEATORIOS

Publicado por Antonio (222 intervenciones) el 25/03/2015 10:34:12
La cuestión es la siguiente:
me creo una base de datos llamada juego, con un campo numero, de dos dígitos. llamado numero.
me creo un indice del campo numero
genero un numero aleatorio con una de las dos funciones, si es mayor que 90 lo descarto
si es menor que 1 también.
una vez aceptado el numero al estar comprendido entre 1 y 90 compruebo a través del indice si este numero ya esta escrito en la dbf, si no añado un campo y lo escribo.
de esta forma tendré una dbf con 90 registros con un numero del 1 al 90 de forma aleatoria.
luego leo seguencialmente la dbf sin el indice.
el problema es que con ambas funciones hay números que siempre me los repite en los ultimas posiciones.

***************************
* -------------------------------------------------------------------- *
* *
* Randint() (l) Copyleft 2001 Gabriel Tarela Gandini. *
* Montevideo - Uruguay. -> [email protected] *
* Any rights reserved. *
* *
* -------------------------------------------------------------------- *
* ¨ Para que sirve ? *
* *
* Devuelve un numero entero aleatorio en un rango especifico *
* *
* Parametros: *
* nDesde : Margen inferior *
* nHasta : Margen superior *
* *
* Devuelve -> Un valor numerico entero aleatorio *
* *
* Precondiciones: *
* *
* Debe establecerce los decimales a 16 por lo menos antes de realizar *
* un llamado a randint() ya que esta utiliza las posiciones decimales *
* para generar el numero aleatorio. *
* *
* El parametro nHasta debe ser mayor que nDesde. *
* *
* Ejemplo: *
* *
* set decimals to 16 *
* *
* while lastkey() <> 27 *
* inkey(.2) *
* ?randint( 2500,10000 ) *
* end *
* *
* Mas informacion -> [email protected] *
* -------------------------------------------------------------------- *
function randint ( nDesde,nHasta )
static nultimo
local nRandom := 0
local nMult := int(seconds())
local nNumero := nHasta - nDesde
local nlen := len(alltrim(str(nNumero)))
if valtype(nultimo) <> "N" .or. nultimo = 0
nultimo := (nMult * ((seconds() - int(seconds())) * 100)) % 335544319
endif
nultimo := (nMult * nultimo) % 335544319
nRandom := val(right(str(nultimo / 335544319),nlen))
if nRandom > nnumero
nRandom := nnumero - val(right(str(nRandom),len(alltrim(str(nnumero)))-1))
endif
return nDesde + int(nRandom)
*----------------------------------------------------------------------------------
******FUNCION QUE GENERA NUMEROS ALEATORIOS
******EJEMPLO
**** N=RAND()
**** N ES INGUAL A UN NUMERO ALEATORIO
*****************************************************
FUNCTION RAND && FUNCION DE NUMERO ALEATORIOS USA
PARAMETERS SEMILLA && LA FUNCION STRINV
IF PCOUNT()=0
PRIVATE SEMILLA
SEMILLA=VAL(STRINV(STR(SECONDS())))
ENDIF
PRIVATE AUX
AUX=LOG(SEMILLA)
RETURN AUX-INT(AUX)
***********************************************************************
FUNCTION STRINV && SIRVE PARA OBTENER LA INVERSA DE UNA CADENA
PARAMETERS CAD
PRIVATE LONG,IND
LONG=LEN(CAD)
CAD=SUBSTR(CAD,2,LONG-1)+SUBSTR(CAD,1,1)
FOR IND=LONG TO 3 STEP -1
CAD=SUBSTR(CAD,2,IND-2)+SUBSTR(CAD,1,1)+SUBSTR(CAD,IND,LONG-IND+1)
NEXT
RETURN CAD

**************************PROCEDURE MOVER BOLAS********************
PROCEDURE MOVEBOLA
LOCAL cColor := "N/BG,W+/R,,,W+/B"
CONTABOLA=0
VARI=1
DO WHILE lastkey() <> 27
*IF VARI=1
* @ 23,1 SAY "ENTRO EN UNO"
* VARI=2
* N=RAND()
* N=INT(N*100)
*ELSE
* @ 23,1 SAY "ENTRO EN DOS"
* VARI=1
* desde=-1000000
* hasta=1000000
* n=randint(desde,hasta)
*ENDIF
********
N=CRAND(1000)
********
IF N > 90 .OR. N < 1
LOOP
ENDIF
SEEK N
@ 15,30 SAY "BOLAS QUE FALTAN"
PAPA=CONTABOLA-90
@ 17,30 SAY ABS(PAPA)
IF FOUND()
LOOP
ELSE
APPEND BLANK
REPLACE NUME WITH N
CONTABOLA=CONTABOLA+1
ENDIF
IF CONTABOLA = 90
INKEY(N/100)
RETURN
ENDIF
ENDDO
RETURN
***************************************
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de carlos labastida

GENERAR NUMEROS ALEATORIOS

Publicado por carlos labastida (160 intervenciones) el 26/03/2015 06:51:00
Ok, te modifico el algoritmo que tengo y te lo envio a algun correo que me indiques, saludos desde mexico!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

GENERAR NUMEROS ALEATORIOS

Publicado por antonio (2 intervenciones) el 26/03/2015 08:58:01
Mandamelo a la direccion que te aparece aqui.
Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

GENERAR NUMEROS ALEATORIOS

Publicado por marcelo (52 intervenciones) el 30/03/2015 16:01:15
te mando una funcion que nunca repite los numeros, trabaja sobre TABLA.DBF (debe tener un campo NUMERO numerico de 2 digitos) y contiene 90 registros, en cada registro el numero.
la funcion busca un numero y toma el que esta en ese registro y luego lo borra, de esa manera cuando se repite el numero del azar, toma otro, y tiene como tope un numero maximo igual a la cantidad de registros que quedan. probalo. funciona bien.
saludos
marcelo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
function Azar()
local n:=0, fil:=1, col:=1
use Tabla //dbf con un campo Numero N 2 0
zap
while recno()<90
  appe blan
  repl Numero with recno()
enddo
clear
 
while .t. .and. lastrec()>0
   for col:=1 to 10
       n:=(seconds())^0.8734
       n:=lastrec() * ( n*100 - int(n*100)) +1 //para evitar el 00
       goto n
       @ fil,3 * col say Tabla->Numero
       dele
       pack
       inkey(0)
       if lastkey()=27
          quit
       endif
   next
   fil ++
enddo
retu nil
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 6
Ha mantenido su posición en Clipper/FiveWin (en relación al último mes)
Gráfica de Clipper/FiveWin

GENERAR NUMEROS ALEATORIOS

Publicado por Javier (46 intervenciones) el 09/04/2015 00:41:43
http://www.elguille.info/Clipper/donac.htm
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

GENERAR NUMEROS ALEATORIOS

Publicado por antonio (222 intervenciones) el 09/04/2015 09:47:55
Muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar