Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) n° randomico


André Ximenes

Pergunta

Pessoal, tenho que fazer um trabalho envolvendo numero randômico e já tentei muita coisa.. =/

Acho que o erro do programa esta na parte :

x= (float)(rand())/(float)(RAND_MAX)*1.0; //gerar numero randômico de 0 a 1
y= (float)(rand())/(float)(RAND_MAX)*180.0; //gerar numero randômico de 0 a 180

pois bem, gerar o numero ele gera, mas digamos que não seja numeros numeros homogeneos, tento botar uma semente, algum tipo de "time" mas não consegui o resultado com êxito. Já tentei o time.h e o srand(time(NULL)); . O numero tem que ser float ou double o que torna dificil. Utilizo o dev c++ se vocês tiverem alguma sugesttão por favor, ajudem, estou nisso há mais de 3 semenas...

Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0

Desculpe a minha ignorância, o que seriam números homogêneos? Eu ainda não entendi o que quer e o que está dando errado.

O que você quer? Seja direto.

Quer gerar números randomicos do tipo float? int?

Link para o comentário
Compartilhar em outros sites

  • 0
Desculpe a minha ignorância, o que seriam números homogêneos? Eu ainda não entendi o que quer e o que está dando errado.

O que você quer? Seja direto.

Quer gerar números randomicos do tipo float? int?

Desculpa devo não ter sido claro, quero numeros randomicos reais, float ou double. Quando me referi a n° homogeneos quis dizer que toda vez que rodo o programa ele gera numeros randomicos iguais, sempre gera os mesmos numeros.

quero um programa que gere numeros randomicos float de 0 a 1 e de 0 a 180, mas variando os numeros a cada vez que uso o programa e não utilizando sempre os mesmos numeros.

Editado por André Ximenes
Link para o comentário
Compartilhar em outros sites

  • 0
Desculpa devo não ter sido claro, quero numeros randomicos reais, float ou double. Quando me referi a n° homogeneos quis dizer que toda vez que rodo o programa ele gera numeros randomicos iguais, sempre gera os mesmos numeros.

quero um programa que gere numeros randomicos float de 0 a 1 e de 0 a 180, mas variando os numeros a cada vez que uso o programa e não utilizando sempre os mesmos numeros.

Ahhh tahh....

Ó: http://www.cbrasil.org/wiki/index.php?titl...ar_em_C:_randon

Ajuda?

Link para o comentário
Compartilhar em outros sites

  • 0

Então a dificuldade que está tendo é de gerar números aleatórios de ponto flutuante nos intervalos, certo?

A geração dos números aleatórios está funcionando, o que você não consegue é saber como fazer para gerar os números aleatórios nos intervalos que sejam em ponto flutuante. É isso ?

O que eu imagino é que esteja pensando: "Pow, que conta eu devo fazer para gerar os números em ponto flutuante naquele intervalo?"

É mais ou menos essa a dificuldade que está tendo?

Link para o comentário
Compartilhar em outros sites

  • 0

Para gerar a semente do srand o time(NULL) está ótimo, é assim mesmo que é usado normalmente.

Para gerar um float aleatório dentro de uma determinada faixa faça o seguinte:

float val = 20 + 50.0*((float)(rand())/RAND_MAX);

Assim iremos gerar um número aleatório entre 20 e 70. Se começar por zero (como é o seu caso) simplesmente não some nada.

A lógica é que, ao dividir o valor recebido de rand por RAND_MAX teremos um número entre 0 e 1. Multiplicando este resultado pelo valor máximo teremos um número entre zero e o próprio valor máximo. Temos que converter o retorno de rand para float pois caso contrário sempre teríamos zero como resultado devido ao seu tipo ser int.

Link para o comentário
Compartilhar em outros sites

  • 0

Assim galera, gerar o numero float eu consigo o/

o que não consigo é fazer com que ele varie a cada vez que rodo o programa entende??

ex:

srand(time(NULL));
         float val=1.0*((float)(rand())/RAND_MAX);
         printf("%f",val);

o numero que ele gera varia na 3ª casa decimal, queria que ele variasse mais, num intervalo significante.

OUTPUT: 1° RUN-0.616657

2° RUN-0.618946

3° RUN-0.623432

queria que gerasse resultados random, 0.12, 0,89, 0.54,assim e não numeros tão proximos e sempre crescentes =/

Link para o comentário
Compartilhar em outros sites

  • 0

Mas toda vez que seu programa inicia o resultado é o mesmo? Pelo que eu havia entendido isso não era problema.

O único fator que influencia nageração de números aleatórios é a semente de inicialização porém é normal que seja usado o time(NULL) como semente. Caso você não utilize float, o que acontece? Quais os números que o rand estás retornando antes de qualquer conversão?

Outra coisa: se apenas está variando na terceira casa decimal você pode tentar gerar como o código abaixo:

srand(time(NULL));
         float val=100.0*((float)(rand())/RAND_MAX);
         val = val - (int)(val); // remove a parte inteira, sobrando apenas os digitos decimais
         printf("%f",val);

com o código acima seus números seriam:

OUTPUT:

1° RUN-0.6657

2° RUN-0.8946

3° RUN-0.3432

Com o código apenas estamos contornando o problema, o ideal é identificar o que está causando isso...

Link para o comentário
Compartilhar em outros sites

  • 0
Mas toda vez que seu programa inicia o resultado é o mesmo? Pelo que eu havia entendido isso não era problema.

O único fator que influencia nageração de números aleatórios é a semente de inicialização porém é normal que seja usado o time(NULL) como semente. Caso você não utilize float, o que acontece? Quais os números que o rand estás retornando antes de qualquer conversão?

Outra coisa: se apenas está variando na terceira casa decimal você pode tentar gerar como o código abaixo:

srand(time(NULL));
         float val=100.0*((float)(rand())/RAND_MAX);
         val = val - (int)(val); // remove a parte inteira, sobrando apenas os digitos decimais
         printf("%f",val);

com o código acima seus números seriam:

OUTPUT:

1° RUN-0.6657

2° RUN-0.8946

3° RUN-0.3432

Com o código apenas estamos contornando o problema, o ideal é identificar o que está causando isso...

na verdade você esta certo esse não é o problema, nem toda vez que inicio o programa o resultado é o mesmo ^^

Peço mil desculpa a todos, pois acho que o problema está mesmo na hora de rodar o programa, pois percebo que quando inicio o Dev-C++ e rodo o programa começa com numeros bem dinstintos, mas quando aperto F9(1° run) e depois F9(2° run) e assim por diante, repetidamente, os numeros sempre variam na 2ª ou 3ª casa =/

tenho que fechar e abrir o programa de novo para variar novamente =/

mas consegui rodar normalmente o que queria, obrigado a todos ^^

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...