• Sábado 21 de Diciembre de 2024, 15:16

Autor Tema:  Numeros aleatorios  (Leído 3487 veces)

angelito1121

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Numeros aleatorios
« en: Miércoles 25 de Noviembre de 2009, 07:52 »
0
Muy buenas a los foristas, quisiera pedirles una ayuda en cuanto a un trabajo que me han dejado...
estoy haciendo el login de un sistema, el logueo es por medio del nombre de un usuario y de un número asignado (todo esto ya se encuentra en la base de datos)
el ingreso de los numeros no se hace por teclado, si no por 10 command button (del 0 al 9).

Lo que tengo que hacer es que al hacer click en cada uno de los command button, los botones cambien aleatoriamente de valor. Este cambio de valor lo estoy haciendo con este código:
Código: Visual Basic
  1.  
  2. cb_1.text = string(rand(9) - 1 )
  3. cb_2.text = string(rand(9) - 1 )
  4. cb_3.text = string(rand(9) - 1 )
  5. cb_4.text = string(rand(9) - 1 )
  6. cb_5.text = string(rand(9) - 1 )
  7. cb_6.text = string(rand(9) - 1 )
  8. cb_7.text = string(rand(9) - 1 )
  9. cb_8.text = string(rand(9) - 1 )
  10. cb_9.text = string(rand(9) - 1 )
  11. cb_0.text = string(rand(9) - 1 )
  12.  

El problema es que al hacer el cambio de valores aleatorio, algunos botones tienen a repetir el valor y lo que necesito es que al ser aleatorio al mismo tiempo cada boton tenga un valor único (en el rango de 0 a 9)

¿Alguien podría ayudarme por favor?

davidmolina1

  • Miembro activo
  • **
  • Mensajes: 51
    • Ver Perfil
Re: Numeros aleatorios
« Respuesta #1 en: Miércoles 25 de Noviembre de 2009, 19:27 »
0
Prueba esto.


boolean lb_nuevo
Long lla_texto[0 to 9]
long ll_valor
long ll_index
long ll_for
// Inicialización de variables
ll_index = -1
for ll_for = 0 to 9
   lla_texto [ll_for] = -1
next
Randomize (0) // Muy importante. Establece una semilla distinta cada ejecución
do

   do
      ll_valor = Rand (10) - 1 // Rand debe ser de 10 no de 9
      
      lb_nuevo = true
      for ll_for = 0 to 9
         if lla_texto [ll_for] = ll_valor then
            lb_nuevo = false
         end if
      next
      if lb_nuevo then
         ll_index ++
      end if
   loop until lb_nuevo
   if ll_index <= 9 then
      lla_texto[ll_index] = ll_valor
   end if

                              
loop until ll_index = 9

cb_0.text = String (lla_texto
  • )

...
cb_9.text = String (lla_texto [9])

angelito1121

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re: Numeros aleatorios
« Respuesta #2 en: Miércoles 25 de Noviembre de 2009, 19:45 »
0
muchas gracias, esa ha sido la solución y si no es mucho pedirte, ¿podrías explicarme el codigo paso a paso para comprenderlo mejor?

davidmolina1

  • Miembro activo
  • **
  • Mensajes: 51
    • Ver Perfil
Re: Numeros aleatorios
« Respuesta #3 en: Viernes 27 de Noviembre de 2009, 21:13 »
0
Bueno no sé que explicar más..

Seguramente se puede mejorar, porque fue lo primero que se me ocurrió.

Randomize (0) sirve para sembrar una semilla diferente cada ejecución. La semilla se usa para obtener número aleatorios partiendo de esta.

Haz la prueba a quitarla instrucción y verá como los números aleatorios se repiten en sucesivas ejecuciones.

El rand debe ser de 10 porque los número que genera van desde 1 hasta 10 al restarle 1 se obtiene número desde 0 a 9.

do
ll_valor = Rand (10) - 1 // Rand debe ser de 10 no de 9

lb_nuevo = true
for ll_for = 0 to 9
if lla_texto [ll_for] = ll_valor then
lb_nuevo = false
end if
next
if lb_nuevo then
ll_index ++
end if
loop until lb_nuevo

sirve para ejecutar hasta que se obtenga un número que antes no se haya producido, para eso se almacenan los valores en lla_texto[ll_index]

Esto...
if ll_index <= 9 then
lla_texto[ll_index] = ll_valor
end if

Es para registrar en lla_texto el valor que ha hecho salir del bucle do interno.

y por último el
do
...
loop until ll_index = 9
sirve para salir cuando se hayan rellenado las 10 posiciones del array lla_texto. Recuerda que el array va de 0 a 9.

saludos.