Consultas, desarrollo de programas y petición de presupuestos:

jueves, 12 de julio de 2012

Numeros Aleatorios en C

Crear numero aleatorios en C:
Para obtener un numero aleatorio, tengo una funcion que se llama rand(), comprendido entre 0 y una constante llama RAND_MAX. Cuando llamas la función rand() devuelve un numero “aparentemente” aleatorio, calculado a partir de un punto de partida que sino lo indicamos es el 1. Si parte siempre del mismo sitio (1), siempre muentra los mismos numeros.
Lo que tenemos es que indicar un numero diferente de partida (o semilla).
Existe una funcion llamada srand(int), que nos da ese numero de partida (solo hay que indicarlo una vez en el programa).
El valor de inicio de srand(), debe de ser distinto cada vez que inicio nuestro programa. Para aprovechamos que cada vez que ejecutamos el programa el tiempo es distinto . Eso lo asemos con la función time(NULL). (que da la cantidad de segundos ocurrido desde el 1 de enero de 1970).

Ficheros de Cabeceras .h
C tiene 32 palabras reservedas, pero tienes miles de funciones.
Los ficheros de cabeceras .h, contiene esas funciones , y al incluirlo al principio del programa le decimos donde el compilador tiene que buscarlas. Por ejemplo:
#include <stdio.h>

Nota:
Secciones de man: $man man
1 Programas ejecutables y guiones del intérprete de órdenes
2 Llamadas del sistema (funciones servidas por el núcleo)
3 Llamadas de la biblioteca (funciones contenidas en las bibliotecas del sistema)
4 Ficheros especiales (se encuentran generalmente en /dev)
5 Formato de ficheros y convenios p.ej. I/etc/passwd
6 Juegos
7 Paquetes de macros y convenios p.ej. man(7), groff(7).
8 Órdenes de admistración del sistema (generalmente solo son para root)
9 Rutinas del núcleo [No es estándar]
n nuevo [obsoleto]
l local [obsoleto]
p público [obsoleto]
o viejo [obsoleto]
Ejemplo:
$man 2 time
$man 3 time
nos informa de las ordenes

Por lo tanto el inicio del programa en C deberiamos añadir esas biblioteca (nota: no incluir todas las bibliotecas ya que el programa se haria inmenso y encima no las utilizariaos, solo poner las que nos falte..)
#include <time.h> // para el time()
#include <stdlib.h> // para el srand()
Para inciar el srand:
srand(time(NULL));

Para inciar la funcion:
Si Ud. quiere generar un entero aleatorio entre 1 y 10, siempre (ambos incluidos)
debería hacerlo usando los bits de orden alto como en:
j=1+(int) (10.0*rand()/(RAND_MAX+1.0));

Si es para 5 al 100: (intervalor del 5 al 100=95 valores)
j=5+(int) (95.0*rand()/(RAND_MAX+1.0))


Pseudocodigo
C
num=aleatorio(1,100)
0) Incluir las ficheros de encabezados:
#include <time.h> // para el time()
#include <stdlib.h> // para el srand()


1) srand(time(NULL)); //iniciar la funcion srand() con la semilla time(NULL)


2) num=1+(int) (100.0*rand()/(RAND_MAX+1.0));
num=aleatorio(5,100)
0) Incluir las ficheros de encabezados:
#include <time.h> // para el time()
#include <stdlib.h> // para el srand()


1) srand(time(NULL)); //iniciar la funcion srand() con la semilla time(NULL)


2) num=1+(int) (95.0*rand()/(RAND_MAX+1.0));

No hay comentarios:

Publicar un comentario en la entrada