Я очень определенно столкнулся с «симуляцией шестигранной кости» (которая дает случайное целое число от 1 до 6, все результаты равновероятны) в Java, Python, Ruby и Bash. Однако я еще не видел подобной программы в Аде. Кто-нибудь сталкивался с таким?
Моделирование шестигранной кости в Аде-2005
Ответы (4)
См. Генерация случайных чисел (LRM A.5.2) для пакетов, которые помогут в этом. Либо Ada.Numerics.Float_Random для равномерной генерации случайных чисел (диапазон 0.0.. 1.0), которые вы затем можете масштабировать самостоятельно, либо создать экземпляр Ada.Numerics.Discrete_Random с подходящим (под)типом (работает для d4, d10, d12, и d20s тоже!).
Вам может понравиться эта имитация детской карточной войны, в которой используется экземпляр 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);
В Ada 95 генератор случайных чисел был определен как часть стандартной библиотеки, что сделало его обязательным компонентом каждой системы компиляции Ada 95.
Поэтому да, вы можете довольно легко смоделировать шестигранную кость в Аде.
На RossetaCode.org обычно есть такие типовые программы. Вы можете найти простую реализацию шестигранной кости в Игра в кости.
Это важные части этой программы для реализации игры в кости.
Вы определяете желаемый диапазон в типе:
type Dice_Score is range 1 .. 6;
создайте экземпляр Ada.Numerics.Discrete_Random с вашим типом:
with Ada.Numerics.Discrete_Random;
package RND is new Ada.Numerics.Discrete_Random(Dice_Score);
Используйте экземпляр, чтобы получить случайное значение в диапазоне:
Gen: RND.Generator;
P.Recent_Roll := RND.Random(Gen);