Buscador de alternativas

Hola experto me dejaron un trabajo pero la verdad no se como empezar favor una ayuda o un ejemplo por favor.

Se trata de agrupar 5 números del dell 1 al 50 pero que no coincidan los grupos osea puede ver un numero que haga la diferencia por ejemplo

1) 1-2-3-4-5

2) 1-2-3-4-6

3) 1-2-3-4-7

4) 10-20-30-40-50

5) 12-11-20-15-30

Gracias por la ayuda

3 Respuestas

Respuesta
1

¿Pero dime básicamente es hacer 5 grupos de 5 números cada uno? ¿Y cada vez que ejecutes debe darte los 5 grupos con diferentes números? ¿Y otra cosa puedes usar tablas o hay algún tipo de restricción?

Hola muchas gracias por contestar, bueno el detalle es agrupar filas de 5 números de cada 50 números, el orden no importa, pero la restriccion seria que debe tener aunque sea un numero diferente por filas por ejemplo 10-20-30-40-50 y el otro seria 10-20-30-40-45, en mi formulario tengo dos text con la opcion de cambiar los números de 50 puede ser 70 o 100 y el otro de como deseo que se agrupen puede ser en 10, 15 o de 20 números, olvide mencionarlo si debe estar guardado en en una tabla, disculpe que lo moleste pero no se como empezar para realizar esta tarea. Gracias por su ayuda

Bueno lo mas sencillo por así decirlo seria que por cada fila genere números diferentes y me dices que son 5 grupos eso es fijo, ¿dejame analizarlo en el papel y mañana te daría una respuesta te parece? Osea en si no es complicado solo dejame analizarlo bien en el papel ok

Ok amigo y disculpa por las molestias

Estuve revisando lo de tu ejercicio e hice un form de la siguiente manera

en el evento load cree 5 tablas

CREATE TABLE Grupo1(Numero n(10))
CREATE TABLE Grupo2(Numero n(10))
CREATE TABLE Grupo3(Numero n(10))
CREATE TABLE Grupo4(Numero n(10))
CREATE TABLE Grupo5(Numero n(10))

Puse 2 text :

TxtNroMaximo, donde se ingresa el numero maximo que se generara ejemplo 50, 100, 200

TxtNroPorGrupo, para especificar cuantos numeros van por cada grupo

En un boton llamada CmdGenerar puse el siguiente codigo :

nNumMax = ThisForm.TxtNroMaximo.Value
nNumPorGrupo = ThisForm.TxtNroPorGrupo.Value
FOR i = 1 TO 5
NomTabla = Grupo + ALLTRIM(STR(i))
SELECT &NomTabla
FOR j = 1 TO nNumPorGrupo
DO WHILE .T.
nNumeroGenerado = INT((nNumMax * RAND()))
lEncontrado1 = .F.
lEncontrado2 = .F.
lEncontrado3 = .F.
lEncontrado4 = .F.
lEncontrado5 = .F.
FOR k = 1 TO 5
NomTabla2 = Grupo + ALLTRIM(STR(k))
SELECT &NomTabla2
LOCATE FOR Numero = nNumeroGenerado
IF FOUND()
NomVariable = lEncontrado + ALLTRIM(STR(k)) + = .T.
&NomVariable
k = 5
ENDIF
NEXT
IF lEncontrado1 = .F. AND lEncontrado2 = .F. AND lEncontrado3 = .F. AND lEncontrado4 = .F. AND lEncontrado5 = .F.
INSERT INTO &NomTabla (Numero) VALUES (nNumeroGenerado)
EXIT
ENDIF
ENDDO
NEXT
SELECT &NomTabla
BROWSE
NEXT

Lo ejecute y bueno en teoria funciono bien, revisa el codigo y lo pruebas y me comentas cualquier cosa, suerte

Respuesta
1

¿No veo el problema puesto que son 50 números y solo 5 los grupos?

for i=1 to 5

por=alltrim(str(i))+'-'+alltrim(str(i+1))+'-'+alltrim(str(i+2))+'-'+alltrim(str(i+3))+'-'+alltrim(str(i+4))+'-'+alltrim(str(i+5))

por2=alltrim(str(i))+'-'+alltrim(str(i+1))+'-'+alltrim(str(i+2))+'-'+alltrim(str(i+3))+'-'+alltrim(str(i+4))+'-'+alltrim(str(i+6))

por3=alltrim(str(i))+'-'+alltrim(str(i+1))+'-'+alltrim(str(i+2))+'-'+alltrim(str(i+3))+'-'+alltrim(str(i+4))+'-'+alltrim(str(i+7))

Endfor

¿

? Por

¿

? Por2

¿

? Por3

Tal vez eso no sea lo que te pidieron pero si es finaliza tu pregunta y evalúa mi respuesta

Respuesta
1

Disculpa la tardanza! Comprendo lo de los números.. pero específicamente.. ¿qué es lo que deseas hacer? ¿Oo? Explicame un poco mejor! Please! :S :S

Hola gracias por responder, lo que necesito hacer algo parecido a un bolillero osea si yo ingreso en el text1 por ejemplo 50 y en el siguiente cuadro de texto por ejemplo 5, lo que debería hacer es que de 50 número debe agruparse en 5 y guardar cada resultado en una tabla la consistencia seria que cada fila guardada no debe tener números repetidos por ejemplo debería quedar así 05-12-23-50-18 y NO debe quedar así 05-12-23-18-18.

al agrupar no significa que solo mostrara 5 resultados según me explicaron debería salir todos los casos posibles pero siempre agrupados, en este caso de 5 gracias por su ayuda.

Hmmmmm... ¿qué es un bolillero? Jajaja! XD Bueno comprendo mas o menos lo que deseas hacer.. pero a ver si entendí bien: ¿Ingresas en un text "50" y en otro "5" y debes obtener 5 cifras DIFERENTES que no sobrepasen el numero 50? ¿Es así? Por ejemplo así: 10- 12-24-30-¿45? ¿Asi?

Hola jajaja... bolillero (es un juego de azar) ... Asi es de la forma como lo entendio, pero cuando lo guarde en la tabla no debe ver grupos o filas repetidas.

Ahora comprendo! Es fácil! Imagina que en un text1 insertas 50 y en un text2 5 y al hacer click en un botón obtendrás 5 cifras del numero 50! EN el evento click (por ejemplo) de tu botón copia un código como este

LOCAL ln1, ln2, ln3, ln4, ln5, lnVal, lnVec, lnNum
SET DECIMALS TO 0
lnNum = VAL(THISFORM.Text1.Value)
**--Corremos el bucle
**--con el numero de
**--veces del valor de
**--lnNum
FOR i = lnNum TO 1 STEP -1
lnVal =THISFORM.Text2.Value
lnVec = (RAND() * VAL(lnVal))
**--Redondeamos la cifra a numero entero
ROUND(lnVec, 0)
**--Guardamos en cursor temp1
INSERT INTO temp1(cifra) VALUES(lnVec)
ENDFOR

Guarda y ejecuta! :) Saludos! Cualquier cosa me avisas! :)

Muchas gracias pero no puedo agruparlo por filas en la tabla debería quedar de esta manera

12 18 22 15 05

16 32 45 01 19

01 02 03 04 05

06 09 04 43 37

32 14 21 40 35

21 42 16 05 08

etc..etc...etc..

cuando yo dígito por ejemplo 50 en el text1 y 5 en el text2 quiere decir que debe buscar todas las alternativas posibles del 1 al 50 ygrupados en 5 números como en el ejemplo de arriba y cada grupo no debe coincidir debe ser diferente por ejemplo si en una fila te muestra 05 02 19 20 31 y la siguiente fila 05 02 19 20 45 es valido, pero si unas de los grupo tiene 31 20 02 19 05 es erróneo.

Gracias por su ayuda y tiempo voy a intentarlo pero si puede seguir ayudándome le voy agradecer mucho.

Ohhh ya! Ahora entiendo mejor! Je je! A ver si te funciona de esta manera:

1. Crea una tabla llamada (en este caso, tu puedes darle otro nombre, pero fijate en el código) "aleatorio" con un campo "cifra" tipo numérico, longitud 2. Cuando disenes la tabla, en el diseñador de tablas, en el espacio para FORMAT que se encuentra en el conjunto DISPLAY coloca una L

Posteriormente... agrega las cifras por cada linea, de 01 a 50. Esta tabla servirá como base para activar la selectividad aleatoria. :)

2. En el evento INIT del form donde realizas la acción, coloca esto:

**--

SET DELETED ON

**--Aquí cargaremos los grupos de 5 cifras y 2 dígitos

CREATE CURSOR temp1(cifra N(10))

**--Aquí almacenaremos la cadena final así: 12-34-25-21-45
CREATE CURSOR curnum(cifra C(15))

3. EN un botón, en su evento CLICK() coloca este código:

LOCAL npos, ln1, ln2, ln3, ln4, ln5, lncadena

**--Iniciamos bucle para
**--obtener 5 cadenas
FOR e =3 TO 1 STEP -1
**--Obtenemos 5 cifras de 2 dígitos
FOR i = 5 TO 1 STEP -1
SELECT aleatorio
GO TOP
Rand(-1)
nPos = Int(Rand() * Reccount( aleatorio ) * Int(Rand() + 1))
Go nPos in aleatorio
MESSAGEBOX(npos)
SELECT temp1
INSERT INTO temp1(cifra) VALUES(nPos)
SELECT aleatorio
DELETE FOR (aleatorio.cifra) = npos
ENDFOR
SELECT temp1
GO TOP
*FOR i = 1 TO 1 STEP -1
ln1 = temp1.cifra
SKIP +1
ln2 = temp1.cifra
SKIP +1
ln3 = temp1.cifra
SKIP +1
ln4 = temp1.cifra
SKIP +1
ln5 = temp1.cifra
SKIP +1
**--Vemos la cadena formada
MESSAGEBOX(STR(ln1) + STR(ln2) + STR(ln3) + STR(ln4) + STR(ln5))
lncadena = ALLTRIM(STR(ln1)) + - + ALLTRIM(STR(ln2)) + - + ALLTRIM(STR(ln3)) + - + ALLTRIM(STR(ln4)) + - + ALLTRIM(STR(ln5))
**--Insertamos la cadena ya formada
INSERT INTO curnum(cifra) VALUES(lncadena)
SELECT curnum
BROWSE
**--
SELECT temp1
DELETE ALL
Browse
ENDFOR

Guarda y ejecuta! En las variables tendrás los valores de cada cadena que se vaya formando aleatoriamente y dicha cadena se ira guardando en el cursor curnum. Posteriormente la cadena se borra y se ingresa una nueva!

Proba y me avisas!

Un abrazo! :)

Hmmm sabes... veo algo raro en la pagina! Cuando pegue el código, las " "(comillas) se suprimieron! A ver... corregí la linea así:

nPos = Int(Rand() * Reccount("aleatorio") * Int(Rand() + 1))

También corregí aquí para que podas ver la cadena formada:

lncadena = ALLTRIM(STR(ln1)) + "-" + ALLTRIM(STR(ln2)) + "-" + ALLTRIM(STR(ln3)) + "-" + ALLTRIM(STR(ln4)) + "-" + ALLTRIM(STR(ln5))

Ahora... L no es en InputMask del campo! Es en FORMAT eso es para que te pueda dar ceros a la izquierda en los primeros 9 dígitos!

Proba y me avisas! :)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas