RE:necesito aprender a ocupar ramdom
hola rodrigo:
si no usas randomize antes de ramdom la secuencia de numeros aleatorios termina repitiendose , a lo mejor es eso a lo que te refieres , si no mira una forma de que no se repitan los numeros , con el programa siguiente , espero que sea lo que necesitas , esta comentado .
SALUIDOS de micropais.
--------------------------------------------------
uses crt;
const numeros_necesarios=25;
const rango=100; // seleccionamos numeros aleatorios entre 1 y rango
// ver nota mas abajo
var
numeros_ok:array[1..25] of integer; // para guardar numeros no repetidos
cnt_ok:byte; // ultimo numero introducido en numeros_ok
pre_numero:integer; // numero aleatorio para comprobar
cnt_bucle:integer;
a:integer;
// esta funcion se encarga de validar que el numero no este repetido
// en nuestro array de numeros aleatorios
function numero_ok(num:integer):boolean;
var cnt:integer;
begin
numero_ok:=true; // valor inicial
// writeln( num );
for cnt:=1 to cnt_ok do
begin
if numeros_ok[cnt]=num then
begin
numero_ok:=false; // ya estaba en la lista
break // rompemos el bucle , no hace falta comprobar mas
end;
end;
end;
// *****************************************************
begin
clrscr;
randomize; // reiniciamos , plantamos semilla
// NOTA: vamos a ejecutar un bucle , HASTA que rellenemos todo
// el array numeros_ok:array[1..25] of integer; como solo vamos a
// aceptar numeros que no esten repetidos el RANGO nunca debe ser
// inferior al numero de elementos del array , pues si no seria un
// bucle infinito.
cnt_ok:=1;
while cnt_ok<=25 do
begin
// obtenemos un numero
pre_numero:=random(rango)+1; // cuente desde 1 nunca cero
if numero_ok(pre_numero) then
begin
numeros_ok[cnt_ok]:=pre_numero;
cnt_ok:=cnt_ok+1;
end;
end;
writeln ('listado completo rango 1..',rango,'');
for a:=1 to 25 do
begin
write(a,'[',numeros_ok[a],'] ');
if ((a mod 5)=0 ) then writeln;// los mostramos de 5 en 5
end;
readln;
end.