如何在pascal中插入随机化特定数字的概率

时间:2014-11-24 20:24:30

标签: pascal turbo-pascal

我最近一直在尝试编写程序(基于文本的游戏),但我只知道一些命令并且不能很好地理解每个命令。

我想做的是一次机会。让我们说我希望程序有

  • 有90%的机会选择数字1(表示命中)和
  • 10%选择数字0(表示未命中)。

我看到同样的问题Here但是我不理解这些命令,因为我从未使用过它们(我说的是 set.seed sample < /强>)。有人可以向我解释它们是如何工作的吗?还有其他方式(更容易理解吗?我不介意它是否消耗更多资源)

2 个答案:

答案 0 :(得分:1)

program Project1;
{$ASSERTIONS ON}

function getProb(aProbability: Integer): boolean;
begin
  result := aProbability > (100 - random(100));
end;

procedure miss;
begin
  writeln('miss');
end;

procedure hit;
begin
  writeln('hit');
end;

var
  i, success, probability, errorMarge: Integer;
const
  combat: array[boolean] of procedure = (@miss, @hit);

begin

  // show that getProb() is reliable
  errorMarge := 4;
  success := 0;
  probability := 80;
  for i in [0..99] do
    Inc(success, Byte(getProb(probability)));
  assert(success >= probability - errorMarge);

  success := 0;
  probability := 50;
  for i in [0..99] do
    Inc(success, Byte(getProb(probability)));
  assert(success >= probability - errorMarge);

  // example usage
  combat[getProb(20)];
  combat[getProb(80)];
  combat[getProb(90)];

  readln;
end.

答案 1 :(得分:0)

不知道你知道什么“命令”,这很难回答而不进行概括。

如果您只需要在两个值之间进行选择,则在您知道如何的范围内生成随机值,并根据您的概率计算分界线。因此,对于您的示例,如果您可以生成0到1之间的值,如果它是&lt; = 0.9,则点击。

通过添加连续概率,可以将其扩展为多个值。因此,如果您有4个值可供选择,每个值的概率为25%,则获得0到1之间的随机值:如果小于0.25,则选择0否则小于0.5,如果小于0.75,则选择1否则选择2否则选择3。