PDA

Ver la Versión Completa : Escoger una palabra de una lista aleatoriamente


DarkByte
12-05-2004, 18:36:17
Saludos, ruego su ayuda una vez más.

¿Cómo puedo escoger una palabra (bueno, una string) aleatoriamente de una lista de strings?. Me parece que no necesita el caso más explicacion... debe ser algo sencillo... pero no lo he encontrado en los foros.

Gracias, simplemente, por leerme.

Paoti
12-05-2004, 18:44:36
Hola buen dia!!!!!



mirate en la ayuda la funcion Random();


esta te gebera un numero al azar entre 0 y 1, ese valor lo multiplicas por el valor maximo de la lista de string, y devuelves la parte entera y listo, el valor obtenido sera un numero aleatorio de una elemnto de tu lista.


nota. debes usar la palabara randomize antes....




espero te sirva!



Saludos a todos

roman
12-05-2004, 18:48:19
esta te gebera un numero al azar entre 0 y 1, ese valor lo multiplicas por el valor maximo de la lista de string, y devuelves la parte entera

De hecho Random puede recibir un argumento entero en cuyo caso regresara un número entero entre 0 y argumento - 1:


Assert(Random(StringList.Count) in [0..StringList.Count - 1]);


// Saludos

Paoti
12-05-2004, 18:50:49
voila, lo habia olvidado!!!!




esta mas sencillo!!!



nos vemos

DarkByte
12-05-2004, 18:51:17
Gracias a ambos, probaré y si puedo os contesto antes del viernes (no me dejan "enchufarme" entre semana).

DarkByte
14-05-2004, 08:12:56
procedure TForm1.Button1Click(Sender: TObject);
var
StringList:TStrings;
UnaString:String;
begin
StringList := TStrings.Create;
try
StringList.Add('hola');
StringList.Add('Pepe');
StringList.Add('jeje');
StringList.Add('jojo');
finally
Assert(Random(StringList.Count) in [0..StringList.Count - 1]);
end;
end;

¿?, no se como obtener el número aleatorio.

__cadetill
14-05-2004, 09:45:50
prueba con


var
MyRandom: integer;
begin
MyRandom := Random(StringList.Count - 1);

roman
14-05-2004, 16:39:43
DarkByte

Assert es un procedimiento especial de Delphi que se utiliza más que nada para cuando está uno haciendo pruebas con una aplicación. Recibe un parámetro booleano y opcionalmente una cadena de texto. Si el primer parámetro es false Assert genera una excepción indicando la unidad y línea de código en que se produjo.

A diferencia de otras excepciones Assert se utiliza como una herramienta de control del programador. El programador, en un punto dado del código puede pensar que cierta condición debe ser cierta en cualquier circunstancia basado en la forma en que diseñó la aplicación y entonces asegura que tal condición ha de cumplirse (Assert). Si en el transcurso de las pruebas resulta que su afirmación era falsa, saltará la excepción indicándole el punto exacto de manera que le sea fácil revisar el código y hacer las modificaciones necesarias.

Dicho en otras palabras, utilizar Assert es como decir:

"He diseñado el código de tal forma que aseguro que X condición será cierta en este punto y me puedo basar en ello para el resto del código"

Si la aserción falla querrá decir que el código no se ajusta al diseño que el pensaba y tendrá que corregirlo.

Por ello, en el contexto de la respuesta de Paoti, cuando puse


Assert(Random(StringList.Count) in [0..StringList.Count - 1]);


estaba simplemente utilizando la semántica de Assert para asegurar que el valor de retorno de Random sería un número entero entre 0 y StringList.Count - 1.

Esta es una explicación un poco larga para explicar porque puse Assert pero quería aprovechar para que conocieras algo nuevo de lenguaje.

// Saludos

DarkByte
15-05-2004, 10:45:04
Gracias a ambos, probaré a ver... y ya os cuento.

Muchas gracias Roman por hacerme aprender algo más, nunca se sabe lo suficiente ;)