Foro de elhacker.net

Foros Generales => Dudas Generales => Mensaje iniciado por: madaflaca en 20 Junio 2018, 01:21 am



Título: Duda sobre generacion de numeros random
Publicado por: madaflaca en 20 Junio 2018, 01:21 am
Buenas , tengo un trozo de codigo que deberia generarme aleatoriamente dos datos y resulta que siempre  me salen los mismos que son el 3,25 y el 5,00

El codigo es el siguiente:

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


#define NUM_DATOS 1000000
#define MAX_LONG 30
#define MAX_CLUSTER 3
#define PI 3.141592
#define rango 7

struct tDato
{
    double d1,d2;
};

struct tDato generador();

struct tDato generador()
{
    struct tDato c;
    int i;
    double angulo;
    double radio;

    i = rand()%rango;
    angulo = rand()%2*PI*1000000;
    angulo /= 1000000;

    switch (i)
    {
        case 0:
        case 1:
        case 2:
            radio = rand()%25 / 10;
            c.d1 = 2 + radio*cos(angulo);
            c.d2 = 7 + radio*sin(angulo);
            break;
        case 3:
        case 4:
            radio = rand()%15 / 10;
            c.d1 = 5 + radio*cos(angulo);
            c.d2 = 5 + radio*sin(angulo);
            break;
        case 5:
            radio = rand()%10 / 10;
            c.d1 = 7 + radio*cos(angulo);
            c.d2 = 5 + radio*sin(angulo);
            break;
        default:
            c.d1 = rand()%1000 / 100.0;
            c.d2 = rand()%1000 / 100.0;
            break;

    }

    return c;
}

int main()
{

    struct tDato d;

    d=generador();

    printf("d1 =%lf\n",d.d1);
    printf("d2 =%lf",d.d2);

    return 0;
}

Gracias de antemano


Título: Re: Duda sobre generacion de numeros random
Publicado por: crazykenny en 20 Junio 2018, 20:19 pm
Hola madaflaca.

Sobre la duda que comentas sobre numeros aleatorios, creo recordar que se utilizan almenos dos valores (o numeros) para generar numeros aleatorios, donde el primero suele ser un "valor base" para generar numeros, y, por otra parte, el segundo valor se incrementa en 1 cada vez que utilizas la funcion rand() para generar un numero.

Entonces, una opcion que muestre valores diferentes cada vez que ejecutes el programa, seria poner que el valor base sea igual al tiempo (en milisegundos, creo recordar) que muestra el sistema.

Y, bueno, un ejemplo que he encontrado para hacerlo en C++ seria insertando la siguiente linea:

Código:

srand(time(NULL));


Sobre la fuente donde he encontrado el ejemplo, es la siguiente:

https://blog.martincruz.me/2012/09/obtener-numeros-aleatorios-en-c-rand.html (https://blog.martincruz.me/2012/09/obtener-numeros-aleatorios-en-c-rand.html)

Espero poder ayudarte en la duda que has expuesto al abrir este tema.

Muchas gracias por vuestra atencion, y, bueno, saludos.