Duda sobre generacion de numeros random

Iniciado por madaflaca, 20 Junio 2018, 01:21 AM

0 Miembros y 1 Visitante están viendo este tema.

madaflaca

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

crazykenny

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:



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

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

Muchas gracias por vuestra atencion, y, bueno, saludos.
A nivel personal, lo que me da mas miedo no son los planteamientos y acciones individuales, sino las realizadas en grupo, ya que estas ultimas pueden acabar con consecuencias especialmente nefastas para todos.
Se responsable, consecuente y da ejemplo.
http://informaticayotrostemas.blogspot.com.es/2013/12/situacion-de-la-educacion-actual-en.html
https://informaticayotrostemas.blogspot.com/