Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-10-2006
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
RandomRange

Hola y Saludos a Todos

Tengo una pequeña consulta:

Estoy haciendo un juego Matematico para mi hija,(La de La Foto) para que se aprenda las tablas de multiplicar,
y necesito generar un numero al azar.

Tengo un edit en el que quiero poner un numero al azar entre 1 a 10.

La Funcion:

Código Delphi [-]
function RandomRange(const AFrom, ATo: Integer): Integer;

Se supone que hace esto, pero no se como hacerlo ya que indica el Help de Delphi que hay que llamar previamente a RandSeed, que no se que es.

Se supone que estas AFrom y ATo son variables integer, bueno pues:

Pregunta:

Cita:
Como se ponen y en donde los valores que van del 1 al 10? de estas variables
Como se llama a esta funcion, simplemente por su nombre o como ?
Gracias por su ayuda
Saludos

Última edición por dec fecha: 02-10-2006 a las 20:19:51.
Responder Con Cita
  #2  
Antiguo 02-10-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Código Delphi [-]
uses
  Math;

procedure TForm1.Button1Click(Sender: TObject);
var
  numeroAleatorioDelUnoAlCien: Integer;
begin
  RandSeed;
  numeroAleatorioDelUnoAlCien := Math.RandomRange(1, 100);
  ShowMessage( IntToStr(numeroAleatorioDelUnoAlCien) );
end;
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 02-10-2006
mierda mierda is offline
Miembro
 
Registrado: may 2006
Posts: 129
Poder: 18
mierda Va por buen camino
a ver con esto

Prueba con esto ....

Código Delphi [-]
Randomize;
showmessage (inttostr(random(10)+1));

un saludo.
Responder Con Cita
  #4  
Antiguo 02-10-2006
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Código Delphi [-]
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,Math;
procedure TForm1.Button1Click(Sender: TObject);
begin
Randomize;
Edit1.Text:=IntToStr(RandomRange(1, 10));
end;

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #5  
Antiguo 02-10-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Vale... reconozco que me confundí, puesto que además no he usado nunca "RandomRange", sino "Random", pero...

Cita:
Empezado por Ayuda de Delphi
To initialize the random number generator, add a single call Randomize or assign a value to the RandSeed variable before making any calls to RandomRange.
Es decir, donde antes escribo "RandSeed" (mira que ví que era una variable, no una función...), debería escribirse "Randomize", aunque, esto de los números aleatorios me supera... y casi mejor me hubiera estado calladito y dejar a quien verdaderamente sepa de este tema que sea quien ayude.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #6  
Antiguo 02-10-2006
mierda mierda is offline
Miembro
 
Registrado: may 2006
Posts: 129
Poder: 18
mierda Va por buen camino
uyyyyyyy ...

Me falto ponerte la unidad .....

Pero me ha sorprendido la velocidad con la que estais todos al loro .... mu buen gesto si señor!!!

enga ... un saludo.
Responder Con Cita
  #7  
Antiguo 02-10-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Jeje, ya te iva a llamar la atencion dec. Randseed es como su propio nombre indica una "semilla", para un mismo valor de RandSeed la secuencia de numeros "aleatorios" que se genera es la misma. De hecho el metodo Randomize lo unico que hace es asignarle un valor obtenido del reloj del sistema, para intentar que la secuencia originada siempre sea diferente.

Código Delphi [-]
procedure Randomize;
var
  Counter: Int64;
begin
  if QueryPerformanceCounter(Counter) then
    RandSeed := Counter
  else
    RandSeed := GetTickCount;
end;
Responder Con Cita
  #8  
Antiguo 02-10-2006
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Maestros mil gracias
funcionan perfectamente,
La de Dec no se porque hay que quitarle RandSeed, si no da un error, tal vez me indicas que paso Dec, te lo agradeceria mucho asi no me quedo con la duda.
Saludos y gracias de nuevo.
Responder Con Cita
  #9  
Antiguo 02-10-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Ten en cuenta lo que dice la ayuda sobre el procedimiento "Randomize", entre otras cosas:

Cita:
Empezado por Ayuda de Delphi
Do not combine the call to Randomize in a loop with calls to the Random function. Typically, Randomize is called only once, before all calls to Random.
Es decir, más bien que esto:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
  numeroAleatorioDelUnoAlCien: Integer;
begin
  for i := 1 to 100 do
  begin
    Randomize;
    numeroAleatorioDelUnoAlCien := Math.RandomRange(1, 100);
    Caption := IntToStr(numeroAleatorioDelUnoAlCien);
  end;
end;

... mejor hacer esto otro, o sea, quitar el "Randomize" del bucle:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
  numeroAleatorioDelUnoAlCien: Integer;
begin
  Randomize;
  for i := 1 to 100 do
  begin
    numeroAleatorioDelUnoAlCien := Math.RandomRange(1, 100);
    Caption := IntToStr(numeroAleatorioDelUnoAlCien);
  end;
end;
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #10  
Antiguo 02-10-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Empezado por Caral
La de Dec no se porque hay que quitarle RandSeed, si no da un error, tal vez me indicas que paso Dec, te lo agradeceria mucho asi no me quedo con la duda.
Bueno, arriba creo que hablo sobre el tema, empero, a mí me "compila" el código del ejemplo (aunque equivocado), así que, tendrías que referir por aquí de qué error se trata: "mi bola de cristal tiene nubes".
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #11  
Antiguo 02-10-2006
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Gracias ya entendi lo de RandSeed pero
Os aveis puesto a pensar que ninguna respuesta fue en vase a Funcion, todos pusisteis Procedimientos (Procedure), hay alguna razon en particular o el llamado a una funcion es mas complicado ?, no resulta conveniente o ???
Saludos
Responder Con Cita
  #12  
Antiguo 02-10-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Cita:
Empezado por dec

... mejor hacer esto otro, o sea, quitar el "Randomize" del bucle:
Muy cierto, lo mejor es llamarlo solo una vez en toda la aplicacion. Con respecto a meter el Randomize dentro del bucle, en este hilo quedo demostrado que los numeros asi generados no son tan "aleatorios" como deberian.
Responder Con Cita
  #13  
Antiguo 02-10-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Empezado por Seoane
Muy cierto, lo mejor es llamarlo solo una vez en toda la aplicacion.
Ajá,... o sea, que, para mayor "seguridad" lo suyo es ejecutarlo una vez en ¿la vida de la aplicación?... no ya una vez fuera de un bucle cualquiera, sino que, pareciera por lo que dices que el código que puse anteriormente (dentro del evento "onclick" de un botón) no sería el mejor lugar para situar la llamada a "Randomize"... tal vez en la inicialización de cierta unidad, o en el evento "OnCreate" del formulario principal... o en el propio "dpr"... ¿? ¿?

Cita:
Empezado por Caral
Os aveis puesto a pensar que ninguna respuesta fue en vase a Funcion, todos pusisteis Procedimientos (Procedure), hay alguna razon en particular o el llamado a una funcion es mas complicado ?, no resulta conveniente o ???
Bueno. "RandomRange" es una función. "Randomize" no, pero, eso no es cosa nuestra... Es algo que nos viene dado, o sea. Piensa que un procedimiento se diferencia de una función en que esta última retorna un valor de forma "natural", mientras que un procedimiento no lo hace. No se trata de que una cosa sea más "difícil" que la otra, me parece a mí, vaya.

"RandomRange" tiene que retornar algo, precisamente, el número aleatorio, mientras que "Randomize" no; simplemente se llama a este procedimiento, pero, no esperamos ningún valor como resultado.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 02-10-2006 a las 20:26:22.
Responder Con Cita
  #14  
Antiguo 02-10-2006
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Muchas Gracias a todos por la amplia explicion, ya saveis que no me conformo con la respuesta corta , con esa no se aprende.
Gracias a todos los Maestros
Saludos
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 08:36:19.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi