Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Случайные числа!


Автор: alikoder 17.1.2011, 15:36
Всем привет, нужно сгенерировать случайное число от 1 до 6, и результат вывести в edit, но при этом есть RadioGroup в котором также есть 6 items, так вот, в зависимости от того, какой itemIndex сейчас в RadioGroup, то результат случайного числа нужен, что бы было чаще именно то что в itemindex, кто знает как решить проблемку?

Автор: Frees 17.1.2011, 15:52
Код

var
n: Integer;
begin
  n := Random(1);
  if n = 1 then
    n := RadioGroup1.ItemIndex + 1
  else
    n := Random(5) + 1;
  edit1.Text := IntToStr(n);
..



Автор: Poseidon 17.1.2011, 16:17
Цитата(alikoder @  17.1.2011,  15:36 Найти цитируемый пост)
нужно сгенерировать случайное число от 1 до 6

Цитата(alikoder @  17.1.2011,  15:36 Найти цитируемый пост)
то результат случайного числа нужен, что бы было чаще именно то что в itemindex

Как бы если есть какое-то условие, то результат уже не будет случайным. Код Frees не выполняет условие "нужен, что бы было чаще именно то что в itemindex". Тут нужно уточнить, на сколько чаще? В 2 раза? В 10? Это же теория вероятности. Тут вероятность нужно точно знать.

Автор: Gwire 17.1.2011, 20:36
Исли совместить написаное Frees и Poseidon:
Код

// Позволить использовать пользовательское значение
function AllowUseUserValue(ProbabilityPersent: Integer): Boolean;
begin
    Result:= Random(100)+1 < ProbabilityPersent;  // 1..100
end;

// Получить случайное или пользовательское значение с вероятностью Persent
function GetRandomOrUserValue(MaxRandVal, UserVal, Persent: Integer): Integer;
begin
    if AllowUseUserValue(Persent)
      then Result:= UserVal
      else Result:= Random(MaxRandVal) + 1;
end;


Автор: alikoder 18.1.2011, 08:15
Gwire что то я непойму, но куда функции вписывать если юзать код Frees-а

Автор: Gwire 23.1.2011, 13:41
alikoder, без обид, но если ты дорос до классов, нужно знать как вызывать функции.
А по поводу - "куда вставлять", если уже совсем непонятно:
Код

procedure TForm1.Button1Click(Sender: TObject);
var N: Integer;
begin
    N:= GetRandomOrUserValue( 6, RadioGroup1.ItemIndex+1, 30);    // 30%
    Edit1.Text:= IntToStr(N);
end;


Примечание: Вероятность возникновения UserVal будет больше чем 30%,
так-как не икслючено появление UserVal в оставшихся 70% значениях
Примерное значение = 30% + (70% / 6)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)