Pascal/Turbo Pascal - Problemas con Randomize y Random

 
Vista:
sin imagen de perfil

Problemas con Randomize y Random

Publicado por Francisco (2 intervenciones) el 01/08/2014 05:36:57
Hola, ¿cómo están? Hace un tiempo empecé a aprender Pascal y si bien no avancé tanto todavía, ya aprendí algunas cosas muy útiles, algunas gracias a esta página que vengo viendo.

Me encontré con un problema con Randomize y Random, que hasta ahora me venían funcionando muy bien :S

El problema es cuando creo un procedimiento o unit que utilice estas funciones para generar números aleatorios. Y aplico el procedimiento a dos variables distintas. El problema es que me arrojan SIEMPRE el mismo valor, o sea, los números generados por "random" son siempre los mismos. Acá hice un programa muy simplificado y sin mucha utilidad pero para que quede bien ilustrado el problema, a ver si alguien me puede ayudar a solucionarlo :/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Program random1;
 
 
var
  num: integer;
  num2: integer;
 
 
procedure aleatorio (var n: integer);
begin
  randomize;
  n:= random (100) + 1;
end;
 
 
begin
  num:= 5;
  num2:= 10;
  writeln ('"num" vale: ',num,'.');
  writeln ('"num2" vale: ',num2,'.');
  writeln;
  aleatorio (num);
  aleatorio (num2);
  writeln ('"num" ahora vale: ',num,'.');
  writeln ('"num2" ahora vale: ',num2,'.');
  writeln;
  readln;
end.



"num" y "num2" son dos variables distintas que inicialmente les doy valores diferentes. Cuando paso sus valores por el procedimiento que lleva el randomize y random dentro, ambas variables terminan valiendo lo mismo, es decir, el procedimiento no vuelve a generar valores aleatorios para "num2", sigue usando los valores aleatorios que utilizó para "num". Cada vez que echo a correr este programa, o "num" y "num2" valen ambos 99, o 44, o 1, o 57, o 60, o 89, o 87 o el número que sea, pero la cuestión es que siempre valen lo mismo uno con respecto al otro. Intenté poner "randomize" por todos lados, entre las dos llamadas al procedimiento que hago, dentro del procedimiento al principio y al final, pero nada funciona. No logro entender cual es el problema. Desde ya 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

Problemas con Randomize y Random

Publicado por David (22 intervenciones) el 01/08/2014 09:34:55
La solución es sacar randomize fuera del procedimiento y ponerlo dentro del programa principal, ya que si no, obtendrías la misma semilla para ambos números y daría por tanto el mismo número.

En el caso de tu ejemplo, quedaría así:

Program random1;


var
num: integer;
num2: integer;


procedure aleatorio (var n: integer);
begin

n:= random (100) + 1;
end;


begin
randomize;
num:= 5;
num2:= 10;
writeln ('"num" vale: ',num,'.');
writeln ('"num2" vale: ',num2,'.');
writeln;
aleatorio (num);
aleatorio (num2);
writeln ('"num" ahora vale: ',num,'.');
writeln ('"num2" ahora vale: ',num2,'.');
writeln;
readln;
end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Problemas con Randomize y Random

Publicado por Francisco (2 intervenciones) el 01/08/2014 11:07:40
Muchas gracias! Funcionó! Supongo que estoy entendiendo mal como funciona exactamente "randomize", estaba seguro que al llamar al procedimiento dos veces diferentes, cada vez, generaba una semilla diferente al encontrar el "randomize", no entiendo muy bien como es que si lo uso al principio del programa una sola vez, genera números diferentes cada vez. Pero bueno, lo importante es que funcionó ^^ Muchas gracias!!
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