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
yo leí que está basada en los ticks del micro

Off-topic:
comparto esta nota sobre al random del reproductor de música
http://www.bbc.com/news/technology-31302312
(04-06-2015 00:27)LeaTex escribió: [ -> ]
Off-topic:
comparto esta nota sobre al random del reproductor de música
http://www.bbc.com/news/technology-31302312

yo había leído que Apple también tiene un shuffle falso donde emboca con más frecuencia los temas que más te gustan
Se puede usar el valor del puntero a una variable

Siempre es un valor poco predecible

Probalo en tu compu que funca, aca creo que cachea el resultado


#include <stdio.h>
#include <stdlib.h>

int random_reloco()
{
int i;
int n = (int)&i; //sino el compilador de utnianos putea

return (abs(n) % 100) + 1;
}

int main()
{
printf("%d", random_reloco());

return 0;
}

(03-06-2015 10:34)LeaTex escribió: [ -> ]
(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.


Lo que yo tengo entendido en cuanto a compiladores es lo siguiente.

Cada compilador tiene su metodo de random.
Lo que usan muchos, es un array de posicion fija que utilizan para mejorar el random que se genera. Todos los que conozco yo usan el tick de CPU como otra variable de la formula... Algunos funcionan maso maso menso bien, otros bien y otros mal.

El delphi 7 tiene un vector fijo de random. Si ejecutas el software 2 veces, te genera 2 veces los mismos valores aleatorios en el mismo orden, es por eso que se usa el tick de CPU independientemente del compilador.

Por eso dije que use un vector... en adhecion a lo que habia puesto antes... y no solo un vector... el rando random no existe del todo porque son cosas que corren sobre un sistema discreto... es mas... no recuerdo, pero creo que una vuelta lei, que en realidad el azar no existe (asi como una teoria) simplemente no se cuenta con la capacidad de calculo para sacar combinaciones complejas y es dificil (imposible) encontrar todas las variables de sistemas no aislados...

Y es puro bla bla bla... y seguimos y seguimos...

por eso dije que la formula que tiraste vos esta muy copada... porque se basa en algo foraneo a la computadora, algo como cuanto tarda el usuario en darle enter al teclado.

Sino, mas facil....

cosas que necesitas saber
Codear un algoritmo de HASH...
Usar la API de tu sistema operativo.


Usas el tick de micro, lo dividis en 1 grupos segun el peso de los bits que te devuelve
Aplicas un checksum sobre cada uno de los bytes de cada uno de esos grupos, con XOR preferiblemente...
te va a dar 2 Bytes.
Con esos 2 bytes te va a dar un numero entre 0 y 255.
Usas ese valor para buscar el archivo numero #VALOR en tu carpeta de imagenes.
Le extraes el HASH a los bytes de ese archivo.
Del hash obtenido, volves a generar una division en varios grupos, aplicas un Checksum a cada grupo... sumas los grupos...
Y ese resultado es tu numero aleatorio.
(04-06-2015 14:30)sacros escribió: [ -> ]Se puede usar el valor del puntero a una variable

Siempre es un valor poco predecible

Probalo en tu compu que funca, aca creo que cachea el resultado


#include <stdio.h>
#include <stdlib.h>

int random_reloco()
{
int i;
int n = (int)&i; //sino el compilador de utnianos putea

return (abs(n) % 100) + 1;
}

int main()
{
printf("%d", random_reloco());

return 0;
}


sacros la parte que dice "pseudocódigo" no la leíste, no?

entiendo que el compañero que hizo la consulta está cursando algoritmos o alguna de las primeras materias.
con todo esto lo estamos mareando demasiado, y se le va a complicar más traducirlo a pseudocódigo.
Páginas: 1 2
URLs de referencia