Simulando um dado de 6 caras em ADA-2005
-
18-09-2019 - |
Pergunta
Definitivamente, encontrei o 'simulação de um dado de 6 caras' (que produz um número inteiro aleatório entre 1 e 6, todos os resultados são igualmente prováveis) em Java, Python, Ruby e Bash. No entanto, ainda estou para ver um programa semelhante na ADA. Alguém se deparou com um?
Solução
Veja geração de números aleatórios (LRM A.5.2) para pacotes para ajudar a fazer isso. Ou Ada.numerics.float_random para geração de números aleatórios uniformes (variação 0,0 .. 1,0), que você pode escalar por conta própria ou instanciar a Ada.numerics.discrete_random com um tipo adequado (sub) (trabalha para d4, d10, d12, e D20s também!).
Outras dicas
Você pode aproveitar esta simulação das crianças jogo de cartas de guerra, que usa uma instância de Ada.Numerics.Discrete_Random
.
subtype Card_Range is Positive range 1 .. 52;
package Any_Card is new Ada.Numerics.Discrete_Random(Card_Range);
G : Any_Card.Generator;
…
N : Card_Range := Any_Card.Random(G);
Com o ADA 95, um gerador de números aleatórios foi definido como parte da biblioteca padrão, tornando -o um componente necessário de cada sistema de compilação ADA 95.
Portanto, sim, você pode simular um dado de 6 caras em Ada com bastante facilidade.
Rossetacode.org geralmente possui esse tipo de programas típicos. Você pode encontrar uma implementação simples de dados de 6 face em Pig o jogo de dados.
Essas são as partes relevantes desse programa para uma implementação de dados.
Você define o intervalo de desejos em um tipo:
type Dice_Score is range 1 .. 6;
instanciado ada.numerics.discrete_random com o seu tipo:
with Ada.Numerics.Discrete_Random;
package RND is new Ada.Numerics.Discrete_Random(Dice_Score);
Use a instanciação para obter um valor aleatório no intervalo:
Gen: RND.Generator;
P.Recent_Roll := RND.Random(Gen);