Моделирование 6-кратной кубики в ADA-2005
-
18-09-2019 - |
Вопрос
Я очень окончательно наткнулся на «моделирование 6-кратного матрица» (которое создает случайное целое число между 1 и 6, все результаты одинаково вероятно) в Java, Python, Ruby и Bash. Тем не менее, мне еще предстоит увидеть аналогичную программу в ADA. Кто -нибудь сталкивается с одним?
Решение
См. Генерацию случайных чисел (LRM A.5.2) для пакетов, чтобы помочь с этим. Либо ada.numerics.float_random для универсального генерации случайных чисел (диапазон 0,0 .. 1,0), который затем можно масштабировать самостоятельно, либо создание экземпляра Ada.numerics.discrete_random с подходящим (sub) типом (работает для 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.
Поэтому да, вы можете довольно легко смоделировать 6-кратную кубик в ADA.
Rossetacode.org обычно имеют такие типичные программы. Вы можете найти простую реализацию на 6-м кости в Свинья игра в кости.
Это соответствующие части этой программы для реализации костей.
Вы определяете разыскиваемый диапазон в типе:
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);