Arquivos

Posts Etiquetados ‘Números aleatórios’

[C#] Gerando N números aleatórios sem repetição

Olhando muitos debates sobre números aleatórios, percebi que as vezes muitas pessoas em um determinada situação precisa gerar uma quantidade de números aleatórios sem repetição. Parando então para pensar, foi criada uma função par isso, veja o código abaixo no qual definimos um método que permite definir a faixa de valores e a quantidade de números randômicos sem repetir nenhum.

static void Main(string[] args)
{
    // Queremos 20 números aleatórios sem repetição dentro
    // do conjunto 1..100
    ArrayList numbers = RandomNumbers(1, 100, 20);
    // Escreveos números na tela
    Console.WriteLine("Os números gerados foram:");
    for(int i = 0; i < numbers.Count; i++)
    {
        Console.Write("{0} ", numbers[i]);
    }
    // Aguarda até que uma tecla seja pressionada
    Console.ReadKey();
}
// Método para gerar n números aleatórios sem repetição
static ArrayList RandomNumbers(int begin, int end, int quantity)
{
    // cria um objeto da classe Random
    Random rnd = new Random();
    // vamos preencher um ArrayList com a faixa de números
    ArrayList values = new ArrayList();
    for(int i = begin; i < end; i++)
    {
        values.Add(i);
    }
    // Vamos embaralhar o ArrayList
    for(int i = 0; i < values.Count; i++)
    {
        int aux = rnd.Next(values.Count);
        object temp = values[i];
        values[i] = values[aux];
        values[aux] = temp;
    }
    // Retorna o array e números obtidos
    return values.GetRange(0, quantity);
}

Abraços galera, até a próxima

CategoriasC# Tags:, ,

[C#] Números aleatórios (Random)

Em algumas situações precisamos fazer o uso de números aleatórios para o correto funcionamento do aplicativo que estamos desenvolvendo. Um lançamento de dados por exemplo. Você nunca saberá qual lado irá cair, tudo depende do fator sorte. Mas como simular isso em C#? Para isso utilizamos a classe Random.

A classe Random gera números pseudo-aleatórios em igual probabilidade através de um algorítimo de cálculos complexos e depende de um valor de propagação para a criação de seus números. Este valor também é conhecido como semente, ou seed, sua tradução em inglês. Dizemos que estes números são pseudo-aleatórios por que se a mesma semente for fornecida, a mesma sequência de números será criada. Então como a classe resolve este problema? Simples. Ou passamos este valor de semente como parâmetro em seu construtor ou deixamos que a própria classe utilize o tempo para obter este número. Assim a cada segundo um novo seed e uma nova sequência aleatória será criada. É importante lembrar que a cada instância de Random, uma nova sequência será produzida. Para melhor desempenho, crie uma instância para gerar muitos números ao longo do tempo, em vez de criar um novo Random para gerar um número aleatório repetidamente.
Para acessarmos nossa lista de números, utilizamos o método Next que retorna nosso inteiro não negativo com o valor máximo definido pela constante de SystemInt32.MaxValue (2.147.483.647). O método Next também retorna números aleatórios entre uma valor máximo e um valor mínimo. Por exemplo, considere um sorteio entre 100 pessoas com bilhetes numerados de 1 a 100 respectivamente. Não seria nada elegante termos o bilhete 103855485 sorteado. Então criamos o intervalo: rnd.Next(1, 101).
static void Main(string[] args)
{
    // Criar um objeto aleatório</div>
    // Random rnd = new Random ();
    // Criar um objeto aleatório com uma semente com um grau de pseudoaleatória
    Random rnd = new Random (DateTime.Now.Millisecond);
    // Gerando um número aleatório qualquer
    Console.WriteLine(rnd.Next().ToString());
    // Gerando um número aleatório entre 50 e 100 (não inclui o ultimo valor [100])
    Console.WriteLine(rnd.Next(50,100).ToString());
    // Gerando um número aleátório entre 0 e 100
    Console.WriteLine(rnd.Next(100).ToString());
    // Aguarda até que uma tecla seja pressionada
    Console.ReadKey();
}

Abraços, espero que ajudem muita gente

CategoriasC# Tags:, ,
Seguir

Obtenha todo post novo entregue na sua caixa de entrada.

Join 29 other followers