Números aleatórios

1. Números aleatórios

Willie Moraes Oliveira
asclows

(usa Slackware)

Enviado em 07/10/2005 - 16:16h

Estou estudando pelo livro do Deitel e não estou conseguindo criar instruções que gerem números aleatórios para os intervalos onde:

d) 1000 <= n <= 1112
e) -1 <= n <= 1
f) -3 <= n <= 11

No exercício é proposto a utilização de Math.random(), lembrando que a mesma gera valores entre 0 e 0,9.

Há como generalizar uma expressão ou cada caso é um caso?

Como ficaria a resolução para as questões acima?


  


2. Re: Números aleatórios

Tiago Barcellos Peczenyj
pacman

(usa Ubuntu)

Enviado em 25/10/2005 - 00:36h

isso não é java, isso é matematica

vc quer gerar um numero aleatório entre X e Y, certo ?
partimos do seguinte, X < Y, tal que o numero gerado vai estar entre X <= numero <= Y

Bom, primeiro, como vc gera um numero aleatório entre 0 e 1 (normalmente os extremos não são incluidos) ?

Ta isso vc sabe, agora e entre 0 e 2 ?

a resposta é rápida, multiplica por 2 o numero aleatório !

e entre 1 e 3 ?

(...)

qual a diferença entre gerar um numero aleatório entre 1 e 3, e um entre 0 e 2 ? a diferença é 1 !

2 * numero_aleatorio + 1

Sacou a malandragem ?

-Pô, então eu tenho que multiplicar e somar por alguma coisa ?
-Sim

Ta, vamos ver por que vc gera entre 1 e 3 desse jeito:

o que interessa, em um primeiro momento, é o intervalo entre os numeros. entre 1 e 3 o intervalo é 2 (3 - 1 = 2 - 0 = 2), este é o valor que vc multiplica pelo numero aleatorio gerado entre 0 e 1. isso é a amplitude do numero.

agora vc precisa ajustar "pro lado". o numero mais baixo que vc gera é zero, e o numero mais alto que vc pode gerar é 2. vc tem que gerar entre 1 e 3.
0 + 1 = 1
2 + 1 = 3

logo vc tem que somar 1 pra tudo isso ser gerado no intervalo certo.

entre -1 e 1 ? barbada !

1 - (-1) = 2
2 * numero aleatorio + (-1)

por que ? por que o menor numero gerado é zero, se vc subtrai 1, fica direitinho

ou seja, (Y - X) * numero_aleatorio + X gera o seu numero entre X e Y.


3. Até então tudo beleza...

Willie Moraes Oliveira
asclows

(usa Slackware)

Enviado em 25/10/2005 - 11:04h

mas quando o intervalo for muito grande ou de números maiores por exemplo

1000 <= x <= 1112

A diferença aqui é 113 elementos para o intervalo requerido. A dedução mais simples seria:

1000 + ( int ) ( Math.random() * 113 )

onde 113 é amplitude e 1000 o deslocamento.

Com valores menores tô conseguindo tranquilamente, mas se o intervalo for entre números de intervalos maiores do que -10 e 10, já fica estranho.

Por exemplo:

0 < x <= 100

Seria pela sua explicação seria algo mais ou menos assim:

1 + (int) ( Math.random() * 100 )

Com este caso por exemplo, encontrei diante de resultados limitados e que não utiliza todos os números do intervalo para a aleatoridade.

Saída: 1, 11, 21, 31, 41 ... 91.

Minha dificuldade tá é neste tipo de caso.

Desde já disposição em ajudar!
Se puder mostrar um exemplo pra valores e intervalos maiores vai ajudar muito!


4. o Segredo...

Jaindson Valentim Santana
jaindson

(usa Debian)

Enviado em 26/10/2005 - 23:50h

Digamos que voce queira valores entre um dado intervalo X e Y, onde X < Y. Digamos que n seja o valor gerado, então teremos: X <= n <= Y , para no caso de intervalo fechado.

Regra geral:

X + (int) (Math.random() * (Y + 1))

Experimente e confira =)

Espero ter esclarecido, qualquer coisa posta ae.








Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts