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

Hacer Random, sin función Ran

Estas en el tema de Hacer Random, sin función Ran en el foro de C/C++ en Foros del Web. Buen día, mi nombre es Carlos Fernando Cárdenas Amaro, estoy en la universidad en el primer cuatrimestre de la carrera de sistemas computacionales y pues ...
  #1 (permalink)  
Antiguo 05/11/2012, 10:38
 
Fecha de Ingreso: noviembre-2012
Mensajes: 2
Antigüedad: 11 años, 5 meses
Puntos: 0
Hacer Random, sin función Ran

Buen día, mi nombre es Carlos Fernando Cárdenas Amaro, estoy en la universidad en el primer cuatrimestre de la carrera de sistemas computacionales y pues estamos por terminar, pero el maestro de Lógica computacional, nos pidió un proyecto, con el que me gustaría que me ayudaran. La idea es la siguiente:

Hacer el pseudocódigo en C++ de un programa que me de números aleatorios, que sean entre 0 y 1, osea deben ser decimales.

El programa no puede ser creado con la función ran, esto quiere decir que debo de poner alguna formula especifica para desarrollar los números aleatorios.

Además que el programa me pedirá cuantos números quiero que salgan en pantalla.

El programa debería quedar algo así:

Números aleatorios entre 0 y 1
¿Cuantos números aleatorios necesitas?
R= 5

0.28
0.23
0.76
0.59
0.29


Espero puedan ayudarme, estaría muy agradecido, este proyecto debo entregarlo el Sábado 10 de Noviembre del 2012. Suerte a todos. Estaré esperando su respuesta.
  #2 (permalink)  
Antiguo 05/11/2012, 14:04
Avatar de cronopiomx  
Fecha de Ingreso: mayo-2012
Ubicación: Programing Cloud
Mensajes: 282
Antigüedad: 11 años, 11 meses
Puntos: 28
Respuesta: Hacer Random, sin función Ran

Hola, lo que pides resulta un poco dificil pues para cada vez que compiles tu solucion deberia haber un numero o semilla por donde empezar distinto al anterior.

Existen métodos matemáticos que resuelven este problema y lo simulan, como son "Metodos de Congruencia" y "Cuadrados Medios". Estos metodos realizan calculos de numeros aleatorios U(0,1), siempre que desde 1 inicio exista un ' r0 ' o semilla inicial, aqui te pongo programado en C++, un ejemplo usando Metodo Congruencial.

Código:
#include <iostream>
#include <math.h>

using namespace std;

int main()
{
    double r0 = 11;  //semilla inicial
    double resultado;
    int n;

    cout<<"¿Cuantos números aleatorios necesitas?\n";
    cin>>n;

    for (int i =0; i < n; i++)
    {
        resultado = fmod(( 5 + (9*(r0))),12.0);
        cout<<resultado/12.0<<endl;
        r0 = resultado;
    }
}
Para mas informacion sobre estos metodos puedes ver este link que son 2 img que he puesto para que veas en teoria como funcionan, esta muy bueno.

http://www.sendspace.com/file/iadinv

En ultima instancia lo que podrias hacer es tratar de buscar como esta implementado la funcion rand ().

saludos
cronos
  #3 (permalink)  
Antiguo 05/11/2012, 16:32
 
Fecha de Ingreso: noviembre-2012
Mensajes: 2
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Hacer Random, sin función Ran

Cita:
Iniciado por cronopiomx Ver Mensaje
Hola, lo que pides resulta un poco dificil pues para cada vez que compiles tu solucion deberia haber un numero o semilla por donde empezar distinto al anterior.

Existen métodos matemáticos que resuelven este problema y lo simulan, como son "Metodos de Congruencia" y "Cuadrados Medios". Estos metodos realizan calculos de numeros aleatorios U(0,1), siempre que desde 1 inicio exista un ' r0 ' o semilla inicial, aqui te pongo programado en C++, un ejemplo usando Metodo Congruencial.

Código:
#include <iostream>
#include <math.h>

using namespace std;

int main()
{
    double r0 = 11;  //semilla inicial
    double resultado;
    int n;

    cout<<"¿Cuantos números aleatorios necesitas?\n";
    cin>>n;

    for (int i =0; i < n; i++)
    {
        resultado = fmod(( 5 + (9*(r0))),12.0);
        cout<<resultado/12.0<<endl;
        r0 = resultado;
    }
}
Para mas informacion sobre estos metodos puedes ver este link que son 2 img que he puesto para que veas en teoria como funcionan, esta muy bueno.

[URL="http://www.sendspace.com/file/iadinv"]http://www.sendspace.com/file/iadinv[/URL]

En ultima instancia lo que podrias hacer es tratar de buscar como esta implementado la funcion rand ().

saludos
cronos
Que tal si ponemos como semilla el numero de repeticiones que nos pide, así por lo menos tendríamos algunas diferencias cada vez que se pone una cantidad diferente; la otra es una pequeña función que vi, que utiliza (time(NULL)), que se supone que utiliza de semilla el reloj del sistema, así cada vez es un número diferente, la duda está en si esta función es posible sin utilizar el RAN. Espero una respuesta pronta. Saludos.
  #4 (permalink)  
Antiguo 07/11/2012, 07:17
Avatar de cronopiomx  
Fecha de Ingreso: mayo-2012
Ubicación: Programing Cloud
Mensajes: 282
Antigüedad: 11 años, 11 meses
Puntos: 28
Respuesta: Hacer Random, sin función Ran

Hola, aca en esta pagina describen un algoritmo mas completo de usar metodos congruenciales para realizar un random:

http://es.answers.yahoo.com/question...2180606AAMuxR1

En cuanto a la funcion que utilzia 'time', si rand() debe trabajar con ella e incluso la podes usar para implementar lo que deseas, pero pienso que hay 1 problema, el tiempo siempre va creciente con esa funcion, osea te podra dar valores aleatorios pero en orden creciente: { 0.1, 0.2, ..., 0.9 }

mira este codigo,
Código:
#include <iostream>
#include <stdio.h>
#include <time.h>
#include <math.h>
using namespace std;

int main ()
{
  time_t seconds;

  seconds = time (NULL);
  cout<< fmod(seconds,10.0)/10.0 <<endl; 
  
  system("pause"); 
  return 0;
}

cualquir duda, aqui estamos.

saludos
cronos

Etiquetas: programa, ran, random
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 12:16.