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

如何在pascal中插入特定数字的随机概率,pascal,turbo-pascal,Pascal,Turbo Pascal,我最近一直在尝试编写一个程序(一个基于文本的游戏),但我只知道一些命令,并不完全理解每个命令 我想做的是抓住机会。比如说,我希望这个程序 90%的几率选择1号(即命中)和 10%选择数字0(表示未命中) 我看到了同样的问题,但我不理解这些命令,因为我从未使用过它们(我说的是set.seed和sample)。有人能给我解释一下它们是怎么工作的吗?有没有其他方法(更容易理解?我不介意它是否会消耗更多的资源)不知道您知道什么“命令”,这很难用一般化来回答 如果您只需要在两个值之间进行选择,则在您知

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

我想做的是抓住机会。比如说,我希望这个程序

  • 90%的几率选择1号(即命中)和
  • 10%选择数字0(表示未命中)
我看到了同样的问题,但我不理解这些命令,因为我从未使用过它们(我说的是set.seedsample)。有人能给我解释一下它们是怎么工作的吗?有没有其他方法(更容易理解?我不介意它是否会消耗更多的资源)

不知道您知道什么“命令”,这很难用一般化来回答


如果您只需要在两个值之间进行选择,则在您知道的任何范围内生成一个随机值,并根据您的概率计算分界线。例如,如果您可以生成一个介于0和1之间的值,那么这里没有任何命令:创建一个包含9个1和1个0的数组,然后将数字从1到10均匀地混洗,并使用该数字作为该数组的索引。这样你就有9/10的机会得到1,只有1/10的机会得到0嘿,谢谢你的回答。这真的帮了我很大的忙。我也可以用一箱,对吗?随机(10);案例随机0:未命中1:命中2:命中。10:击中
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.