Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Generador de numeros aleatorios

Estas en el tema de Generador de numeros aleatorios en el foro de C/C++ en Foros del Web. Hola!,que tal? . Tengo el siguente problema , ( Linux ) Necesito crear un generador de numeros aleatorios(ya lo tengo hecho) , lo que ocurre ...
  #1 (permalink)  
Antiguo 10/11/2007, 04:15
 
Fecha de Ingreso: marzo-2007
Mensajes: 9
Antigüedad: 17 años, 9 meses
Puntos: 0
Generador de numeros aleatorios

Hola!,que tal? . Tengo el siguente problema , ( Linux )

Necesito crear un generador de numeros aleatorios(ya lo tengo hecho) , lo que ocurre que ese generador debe de ejecutarse continuamente, como un bucle infinito, dando numeros aleatorios cada cierto tiempo, para que otro programa capture ese numero y realice otras operaciones.

Este generador de numeros , debe de ejecutarse con un programa en C , llamado "lanzador" , pero no se como hacerlo(una especie de make o algo asi?).

El programa de numeros aleatorios seria este:

Código:
#include<stdio.h>
#include<time.h>
#include<stdlib.h>


int main(int argc, char *argv[]){
	
	int i=0;
	int rango=0;
	int litros=0;
	int generar=1;
	int tiempo=0;
	int generado=0;
	int espera=0;

	srand (time(NULL));

       //Entrada seria Ej : ./a.out -r 20 
 
	if(argc==1){
	    printf("Error \n");
	    exit(0);
	}
	if(argc==2){
	    printf("Error \n");
	    exit(0);
	}
	if(argc==3){
	    if(argv[1][0]=='-' && argv[1][1]=='r'){
		printf("correzto\n");
		rango=atoi(argv[2]);	
		printf("-> %d \n",rango);
	    }
	    else{
		printf("Error \n");
		exit(0);
	   }
	}
	if(argc>3){
	    printf("Error \n");
	    exit(0);
	}
	while(generar==1){
	    if(generado==0){	 
	   	espera= rand() % (120-30+1) + 30;   // Este está entre M=30 y N=120;				
                esperar(espera);
     	    	generado=1;	
	    }
	    litros=rand() % (rango-0+1) + 0; // Enter 0 y rango
	    printf("%d\n",litros);
	    generado=0;
	   
	}
}
La funcion esperar()(ya esta hecha); , haria que el programa esperara el tiempo generado en la variable "espera". Supongo que para el paso de esa variable a otro programa tendre que usar un pipe, pero, al realizar el return en la funcion main, automaticamente acaba la ejecución y yo quiero que continue :( .

El esquema del programa seria:

Código:
             / -> Generador de numeros
Lanzador - - -> Creacion de una serie de procesos que emplearian esos numeros
             \ -> Planificador.
Alguien puede explicarme como crear ese lanzador de otros programas en codigo C?

Gracias.
  #2 (permalink)  
Antiguo 10/11/2007, 05:59
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 8 meses
Puntos: 17
Re: Generador de numeros aleatorios

El programa que genere los números tendrá que estar lanzándolos a algún lado (una pipe podría funcionar, como dices), después ponerse a dormir un cierto intervalo de tiempo, despertar y repetir. Aparte, para poder pararlo, tendrás que hacer que capture ciertas señales.

EL programa que lee los números es sencillo, simplemente lee de la pipe del otro programa, ¿no?
  #3 (permalink)  
Antiguo 10/11/2007, 06:28
 
Fecha de Ingreso: marzo-2007
Mensajes: 9
Antigüedad: 17 años, 9 meses
Puntos: 0
Re: Generador de numeros aleatorios

El generador de los numeros es una pequeña parte del programa principal.
El problema en cuestion,explicandolo de manera rapida, es el de una farmacia. Se van creando aleatoriamente clientes(el generador de numeros) que van llegando al a farmacia, requiriendo un determinado numero de stock, y la farmacia tiene 4 farmaceuticos que van sirviendo de 1 en 1 a kada uno q va llegando.Si los 4 farmaceuticos estan ocupados y llegan nuevos clientes esos hay que guardarlos en una cola de espera.

Luego, los farmaceuticos seran procesos , q deberemos lanzar, junto con el generador de clientes, y el planificador del problema. Deduzco que el planificador es el encargado de recibir esos clientes y comprobar el estado de los farmaceuticos(aki deberia de emplear un semaforo para comprobar que los farmaceuticos no estan ocupados, si lo estuvieran, se guardarian el la cola de espera).

El caso es... como puedo programar un lanzador que ejecute el generador de numeros,los farmaceuticos y el planificador .

Gracias :) .
  #4 (permalink)  
Antiguo 11/11/2007, 12:47
 
Fecha de Ingreso: septiembre-2006
Mensajes: 328
Antigüedad: 18 años, 4 meses
Puntos: 3
Re: Generador de numeros aleatorios

podrias ir almacenando los numeros en un arreglo (o en un puntero a int), y a medida que vayas necesitando mas espacio en el arreglo puedes usar funciones como ralloc para agrandarlos.

Tambien puedes hacer uso de la funcion rand(); que general numeros al azar, el problemas es k que no varia la semilla, por tanto siempre k incie el modulo la funcion generara los mismos numeros, me parece que hay otras funciones que hacen general numeros al azar, pero no las conozco, puedes revisar en este link, donde estan la mayoria de las fuiones de C (si no todas): http://www.mkssoftware.com/docs/api_index.asp

Para lanzar los modulos aparte, en vez de crear un lanzador que los llame a todos, lo k que tienes que hacer es un lanzador que llame a main, y que desde el modulo de main se llamen a los demas modulos usando:

#include "nombre_del_modulo"

Aparte:
tambien me parece k esta parte:
Código:
if(argc==1){
        printf("Error \n");
        exit(0);
    }
    if(argc==2){
        printf("Error \n");
        exit(0);
quedaria mejor asi:
Código:
if( argc<=2 ){
        printf("Error \n");
        exit(0);
    }

Última edición por pedro_cesar; 11/11/2007 a las 12:54
  #5 (permalink)  
Antiguo 11/11/2007, 16:23
 
Fecha de Ingreso: marzo-2007
Mensajes: 9
Antigüedad: 17 años, 9 meses
Puntos: 0
Re: Generador de numeros aleatorios

Gracias, mirare haber que puedo hacer, el principal problema radica en que se ejecuten concurrentemente el generador de numeros, los procesos de los farmaceuticos y el planificador que controla el uso de los distintos procesos.

Si es verdad, lo del argc , tienes razon luego lo modificare. ;)
  #6 (permalink)  
Antiguo 24/01/2008, 10:27
 
Fecha de Ingreso: enero-2008
Mensajes: 2
Antigüedad: 17 años
Puntos: 0
Re: Generador de numeros aleatorios

Hola a todos! Acabo de registrarme. He leído vuestras preguntas y respuestas y estoy muy interesado en resolver una duda para la que no encuentro respuesta por ninguna parte. Hace años que juego a la quiniela y juegos de azar, y mi pregunta es la siguiente:

Las máquinas de combinaciones aleatorias, dan la combinación en función a qué? El tiempo tiene algo que ver? Es decir: Si la chica de la administración de loterías me saca una combinación al azar para euromillones a las 17'35 y 48 segundos, habría salido la misma combinación si le da al botón de azar un minuto después????

Alguien me puede explicar esto?

Muchas gracias.
  #7 (permalink)  
Antiguo 25/01/2008, 04:40
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 17 años
Puntos: 606
Re: Generador de numeros aleatorios

Vamos a ver, cada uno se saca el número aleatorio de donde puede, siempre que sea algún suceso que pueda dar valores suficientemente distintos.

Por ejemplo, antiguamente los virus se creaban los valores aleatorios consultando los microsegundos del reloj del sistema (RTC). Es prácticamente imposible que este valor fuese el mismo en varias ejecuciones consecutivas.

Matemáticamente hablando, hay fórmulas para generar números aleatorios. Es más, hay sistemas para comprobar como de aleatorio es un sistema.

En cuanto a la pregunta del euromillón, pues depende de como tome y genere el sistema los números aleatorios, pero precisamente por se un sistema aleatorio, no tendría que generar la misma combinación si la ejecutas un minuto después, 10 minutos, o media hora. No ha de haber un patrón de repetición.
  #8 (permalink)  
Antiguo 25/01/2008, 11:11
 
Fecha de Ingreso: enero-2008
Mensajes: 2
Antigüedad: 17 años
Puntos: 0
Re: Generador de numeros aleatorios

Muchas gracias por la respuesta, me parece todo un mundo bastante complejo, me imagino que el que mejor puede contestar a esto son los propios ingenieros que diseñan las máquinas. No obstante, he aclarado algo mis dudas...
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:12.