Ver Mensaje Individual
  #2 (permalink)  
Antiguo 15/02/2010, 18:25
Avatar de genuine_carlosV2
genuine_carlosV2
 
Fecha de Ingreso: noviembre-2008
Ubicación: 127.0.0.1
Mensajes: 296
Antigüedad: 16 años
Puntos: 6
Respuesta: Generar numero aleatorio

Buenas,

A ver que te parece esto:
Código C:
Ver original
  1. #include <stdio.h>
  2. #include <time.h>
  3.  
  4. int main() {
  5.     time_t rawtime;
  6.     struct tm * timeinfo;
  7.     char day[ 4 ], year[ 5 ];
  8.     int i, y, numeroAleatorio;
  9.  
  10.     time( &rawtime );
  11.     timeinfo = localtime( &rawtime );
  12.  
  13.     strftime( day, 4, "%j", timeinfo );
  14.     strftime( year, 5, "%Y", timeinfo );
  15.  
  16.     y = atoi( year );
  17.     srand( atoi( day ) );
  18.     for( i = 0; i < y; i++ ) numeroAleatorio = (int) ( rand() % 100 ); //Pon tantos 0 al 100 como cifras necesites
  19.  
  20.     printf( "%i\n", numeroAleatorio );
  21.     return 0;
  22. }

La idea es:
1) Cogemos el día (del año) en el que estamos. Esto nos da un valor entre 1 y 366
2) Cogemos el año en el que estamos
3) Iniciamos la semilla con el día del año (si siempre inicias con la misma semilla, siempre obtienes la misma lista de números)
4) Si el número tiene que cambiar con cada año, haces un bucle desde 0 hasta el año en el que estás obteniendo números y te quedas con el último

EDITO: Si no necesitas que el número sea diferente cada año, puedes quitar el bucle y liberar carga de procesador. Por otro lado, que el número sea diferente, te permite verificar que año se creó el número

Las ventajas:
- El número se mantiene constante al largo de un mismo día
- Dos días consecutivos no tienen porqué tener dos números aleatorios relacionados
- Los mismos días de distintos años tendrán números distintos
- Permite verificar el día y el año en que se emitió un número

Desventajas:
- No uses este algoritmo para nada relacionado con la criptografía, la seguridad, etc. Los números generados con este algoritmo son fácilmente predecibles por cualquiera que conozca el algoritmo (y, aunque no se conozca, nunca se debe dejar a la suerte)

Saludos y suerte
__________________
Carlos

Recoger datos es solo el primer paso hacia la sabiduría. Pero compartir información es el primer paso hacia la comunidad. - IBM

Última edición por genuine_carlosV2; 15/02/2010 a las 18:48