Pascal/Turbo Pascal - Secuencia aleatoria

   
Vista:

Secuencia aleatoria

Publicado por Elena (3 intervenciones) el 30/10/2007 18:14:31
¡Hola, amigos!

Qué interesante página la vuestra... (¿la nuestra? :)

A ver si alguien puede ayudarme con un ejercicio, no logro encontrarle el 'truco'...

La idea es extraer al azar un número del 1 al 8, de tal manera que quede una secuencia en la que cada número aparezca sólo una vez.

Creo que está claro, pero por si no, unos ejemplo de lo que sería válido:

2 3 5 6 7 8 1 4

y otro de lo que no:

2 3 5 6 7 8 2 4

- ¡se repite el 2 y falta el 1!

¡Muchas gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Secuencia aleatoria

Publicado por NachoC (5 intervenciones) el 30/10/2007 21:14:33
El "truco" es almacenar en un "array" qué numeros ya has usado.

var
usado: array[1..8] of boolean;

Cada vez que usas un número haces "usado[i] := true;". En casa pasada, si el número que te aparece al azar está marcado como "usado", debes volver a generar otro (quizá más de una vez: repeat..until).

Esto se repite hasta que hayan aparecido los 8 números.

Es mejorable: será más lento cuantos menos datos queden (fallarás en más de un intento), así que cuando queden uno o dos, puedes recorrer la lista de "usados" de forma lineal.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Gracias, Nacho. ;)

Publicado por Elena (3 intervenciones) el 05/11/2007 13:42:38
Muy amable. Al final opté por otra vía, pero tu consejo es muy interesante. :)
Un besote.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Gracias, Nacho. ;)

Publicado por Diego Romero (997 intervenciones) el 05/11/2007 15:06:51
Otra solución. También usando arrays.

Define un array tal como

type
TArray = array[1..8] of byte;
var
Arr: TArray;

y lo rellenas ordenado:

for i:=1 to 8 Arr[i]:=i;

y luego lo desordenas aleatoriamente:

randomize;
for i:=1 to 8
begin
a:=random(8)+1; { para que no elija el cero }
b:=Arr[i];
Arr[i]:=Arr[a];
Arr[a]:=b;
end;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar