UTNianos

Versión completa: Necesito generar un número aleatorio sin la herramienta Random en Pseudocódigo
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Páginas: 1 2
Buenas, necesito ayuda para resolver un algoritmo en pseudocódigo. EL problema pide en una parte que el usuario adivine un número generado aleatoriamente del 1 al 100... PERO NO SE PUEDE USAR LA FUNCIÓN RANDOM. Soy de primer año, así que les agradecería muchísimo la paciencia para explicarme. Gracias!
¿Tan así es el enunciado?

Suena raro que te pidan generar números aleatoriamente sin usar random(), dado que, de hecho, ya demasiado difícil es que random() genere números realmente aleatorios (buen, incluso los que genera son pseudoaleatorios), como para pretender que vos generes números aleatorios. Suena extraño.*


Lo que sí podés hacer es generar algún número entre 1 y 100 que a un humano que esté usando la computadora le sea bastante difícil adivinar, por lo que pueda parecer impredecible.

¿Se te ocurre algún número que puedas tener "a mano", y que cambie lo suficientemente rápido como para que el usuario no pueda adivinarlo con exactitud?



La alternativa es hacerle caso a XKCD o Dilbert =D

* Generar entropía en la compu es un quilombo, y hay montones de investigaciones y esfuerzos sobre eso. La máquina es súper determinística de por sí, por lo que hay que confiar en estímulos externos para generar algo que parezca aleatorio. Linus Torvalds le hincha las pelotas a todos los desarrolladores de drivers para que todos los drivers agreguen entropía al generador de números aleatorios. Cada byte que recibís por la red, cada tecla que apretás en el teclado, cada movimiento del mouse, cada cachito de música que escuchás, etc... Todo eso suma "ruido" que es tenido en cuenta para generar números aleatorios. Es un problema MUY complejo, y bastante sensible, porque todos los sistemas criptográficos parten de la base de tener algún dato aleatorio al principio. Si ese dato es predecible, se te cae la seguridad al carajo.

Acá hay más pibes muy manija con el tema del random: https://www.random.org/
generalemente cuando lo queres hacer rapido y mal usas los milisegundos
Usá getdate()
Trollface
Sisi, en verdad es todo un lío, pero eso que me dicen del getdate, es el mismo caso del rand()... tenemos un número limitado de herramientas para trabajar, ya que es el primer año en isi. Y no nos permiten usar más de las que ya hemos aprendido. Si no hay alguna forma de hacerlo debe haber alguna que más se acerque al objetivo, que es hacer que el usuario adivine el número aleatorio generado por el programa. Gracias por sus respuestas
No pueden usar la fecha del sistema, ¿decís? Se pone medio extraño el tema. Desconfío un poco de que el enunciado imponga todas esas restricciones.
Si, yo tampoco entiendo porqué. Pero supuestamente es para que la profesora vea si somos capaces de lograr algo así con lo que aprendimos
hay que hacerlo en pseudocódigo...
si no podés usar la función random (o sus derivados) o tampoco el reloj de la compu, lo único aleatorio que te queda es la intervención del usuario, en un momento del tiempo.

lo escribo bien cabezoide:



numeroPseudoaleatorio <- 0
hacer
si numeroPseudoaleatorio = 100 entonces numeroPseudoaleatorio <- 0
numeroPseudoaleatorio <- numeroPseudoaleatorio + 1
mientras usuario no presione tecla

y acá comparás la tecla presionada con el numeroPseudoaleatorio y mostrás los mensajes y etc.



de este modo el programa va a ciclar muy rápidamente y siempre va a tener un valor entre 1 y 100 cuando el usuario ingrese un dato.
No sé cuáles herramientas te dieron hasta ahora pero la de LeaTex es buena. Hay que determinar de dónde va a salir la aleatoriedad: la más viable es esperar un tiempo random como es que el usuario presione una tecla.

Otra que se me ocurre es crear un puntero y ver los últimos 2 números de la posición en memoria que le tocó, no estoy 100% seguro cuán aleatorio será esto pero intuyo que no dará siempre el mismo resultado.

No se me ocurre otra variable aleatoria más que estas dos, tiempo y posición de memoria. Ah sí, usar un random as a service (? https://www.random.org/integers/?num=1&m...rmat=plain =P
Hacele un overflow
La profesora sí nos permitió que tomáramos el valor de la hora y segundos de la PC, alguien puede explicar como se usa eso por favor. Como lo defino en el ambiente, y después como le asigno el valor, tipo como quedaría la variable.
no sé lo que querés, si es en psudocódigo podés escribirlo como se te antoje



numeroAleatorio <- obtenerMilisegundos(ObtenerHoraDelSistema());


Claro... normalmente se usa el TickCount que son los microsegundos desde que arranco el CPU.

Pero a mi me gusta la de leatex porque LeaTex es lindo JAJAJA...

El random sigue siendo una cosa que es medio mentira en la computación, pero lo fueron tocando tanto que "funciona" bien.

Inventate alguna formula que te de un valor entre 0 y 100, o entre 0.0 y 0.999 (o 1.0) ...

Si la queres hacer mas pijuda... hacete un array de 100 posiciones, rellenalo con el valores del 0 al 99 desordenados, y hace una formula que tire al azar el valor del indice... Y obtenes el valor del array en ese indice... esto es un resumen muy pedorro de como funcionan muchos randoms...
(03-06-2015 08:49)sebasthian777 escribió: [ -> ]hacete un array de 100 posiciones, rellenalo con el valores del 0 al 99 desordenados, y hace una formula que tire al azar el valor del indice... Y obtenes el valor del array en ese indice... esto es un resumen muy pedorro de como funcionan muchos randoms...

el problema en este caso radica acá: una formula que tire al azar el valor del indice
¿cómo hacés que sea "al azar"?

si el array tiene 100 posiciones, una fórmula que devuelva un índice al azar ya te va a estar devolviendo un valor entre 1 y 100, por lo que no habría necesidad de tener un array realmente ni de acceder a su contenido.

¿alguien sabe cómo funciona el random de las calculadoras? ¿tienen un reloj interno? me suena que no.
el random de las calculadoras era una formula basada en el ultimo valor visto si mal no recuerdo
Páginas: 1 2
URLs de referencia