Foros en Español > General

Problema con la función Rand

(1/3) > >>

juanpe:

Hola! ayer mismo me bajé la versión Bennupack 2.9 y al ir a hacer un pequeño programita veo que la función  rand  me da una respuesta inesperada, os copio el texto completo, (es una modificación de un tutorial). El caso es que me la expresión
rand(7,77) siempre me devuelve el resultado 48, en lugar de devolver valores aleatorios. Agradecería si alguien me puede explicar qué estoy haciendo mal.


//-------------------------------------------------------------------
// Autor:    SORTEO SANTA MAGDALENA SOFIA 2018
//-------------------------------------------------------------------
PROGRAM Tutorial_1;

local
numero1;
BEGIN
    load_fpg("media\tutor1.fpg");
    set_mode(m800x600); // Selecciona el modo de video 640 x 480
    put_screen(0,63);   // Pone la pantalla de fondo
    nave(320,240,41);   // Crea el proceso nave
   
 
    teclado();
 sorteo();
    FROM x=1 TO 8; asteroide(); END
END
   
   
process teclado();
begin
WRITE(0,100,77,0, "sorteo magdalena sofia" );
  loop   
    if (key(_esc)) exit(); end;
    frame;
  end;
end;
   
process sorteo();
begin
numero1=RAND(7,77);
WRITE(0,100,87,0, "1" );
WRITE(0,100,97,0, numero1 );
  loop   
    if (key(_esc)) exit(); end;
    frame;
  end;
end;
   
//-------------------------------------------------------------------
// Maneja la nave protagonista
//-------------------------------------------------------------------
PROCESS nave(x,y,graph)
BEGIN
    LOOP
        IF (key(_left)) angle=angle+10000; END
        IF (key(_right)) angle=angle-10000; END
        IF (key(_up)) advance( 8) ; END
        FRAME;  // Hace aparecer el gr fico de la nave en pantalla
    END
END
//-------------------------------------------------------------------
// Proceso asteroide
//-------------------------------------------------------------------
PROCESS asteroide()
BEGIN
    LOOP
        x=0; y=0; graph=1;
        angle=rand(-180000,180000);
        WHILE (x>=0 AND x<=640 AND
               y>=0 AND y<=480)
              graph=graph+1;
            IF (graph==21) graph=1; END
            advance(4);
            FRAME;      // Hace que el gr fico salga en pantalla
        END
    END
END

panreyes:
Para conseguir resultados aletorios, debes iniciar la semilla de aleatoriedad al principio de la ejecución:
http://wiki.bennugd.org/index.php?title=Rand_seed

juanpe:

Gracias Panreyes, he conseguido que me busque números aleatrorios, pero ahora tengo el problema de que quiero mediante la instrucción FROM hacer una lista con números aleatorios, y lo que obtengo son 7 números iguales, esto es lo que he escrito, Qué tendría que hacer para que me devuelva un número distinto cada vez?


from cuenta=0 to 7 step 1;
rand_seed(time());
numero1=RAND(7,77);
WRITE(0,100,87,0, "1" );
WRITE(0,cuenta*23,97,0, numero1 );
end;
  loop   

panreyes:
No es necesario que ejecutes rand_seed más de una vez :)

juanpe:
Ok pero podrías explicarme porque en este ejemplo la variable número 1 imprime 7 valores iguales?

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa