Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.09.2009, 13:14   #1
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию Random + Преимущественный вариант.

Мне необходимо создать функцию Function RandomAdvance(Vars,PreimVar:Byte);
Попытаюсь объяснить, что она должна делать.
Вызываем Функцию:
Код:
N:=RandomAdvance(3,75);
Что из этого выплывает: У нас три варианта: Random(2); {В конечной функции наверное Random(Vars-1)}
Надо, что-бы число 0 (преимущественное число) выпадало в 75%-тах случаев (то самое PreimVar)

На два варианта все просто:
Код:
M:=Random(100);
Case N of
0..PreimVar:N:=0;
PreimVar+1..100:N:=1;
End;
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ

Последний раз редактировалось Alex Cones; 04.09.2009 в 15:02.
Alex Cones вне форума Ответить с цитированием
Старый 04.09.2009, 13:28   #2
SuperVisor
Павел Сергеевич
Форумчанин
 
Регистрация: 05.11.2006
Сообщений: 665
По умолчанию

Попробуй реализовать обычным MOD...
Код:
N = Random(high(longint));
if N mod trunc(100/percent)=0 then
...
Познавая других, мы познаем себя.
С'est la vie...
SuperVisor вне форума Ответить с цитированием
Старый 04.09.2009, 14:34   #3
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Не совсем понял, что даст данная комбинация. (mod мне знаком) Например, что такое high?
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 04.09.2009, 14:39   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Например, что такое high?
Эт функция, которая возвращает два старших байта из 4-хбатового числа
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.09.2009, 14:51   #5
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

Вы написали Procedure,но она не возвращает параметры
Примерно так?
Код:
function RandomAdvance(Vars,PreimVar:Byte):byte;
var
i,i2:integer;
begin
  i2:=0;
  Randomize;
  i:=random(99);
  if Vars<>0 then
  begin
  Randomize;
  i2:=random(Vars-1);
  end;
  if i<(preimvar-1) then
      result:=0 else
  result:=i2+1;
end;
pushl $0x18E3DF6B
call ICQ

Последний раз редактировалось russian-stalker; 04.09.2009 в 15:52.
russian-stalker вне форума Ответить с цитированием
Старый 04.09.2009, 14:59   #6
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Цитата:
SuperVisor
Спасибо, код прекрасно работает.
Цитата:
Эт функция, которая возвращает два старших
Аааа, ясненько. Спасибо.

А вот как реализовать, что-бы можно было реализовать Function PercentageRandom(Counts:Byte; VariantsInString:String):Byte;
VariantsInString Задается примерно как:'502525' (Если Count =3) - На первый вариант 50% на второй вариант 25% на третий 25%.
Наверное придется как-то проходить в цикле от 1 до Count, считывать Вероятность в виде
Код:
Veroya[I]:=StrToInt(Copy(VariantsInString,1,2); Delete(VariantsInString,1,2);
Массивчик Veroya наверное должен быть динамическим.
___________________________________ ___________________________________ _____________________________
Примерно 10% кода уже, как говорится собрано:
Код:
Function PercentageRandom(Counts:Byte; VariantsInString:String):Byte;
Var
 Veroya:Array of Byte;
 I:Byte;
Begin
 SetLength(Veroya,Count);
 For I:=1 to Count do
  Begin
   Veroya[I]:=StrToInt(Copy(VariantsInString,1,2)); 
   Delete(VariantsInString,1,2);
  End;
 ...
 End;
russian-stalker Я уже заметил, что написал не так. Что бы проверить работосполобность кода проверял так:
Код:
procedure TForm1.Button1Click(Sender: TObject);
Var
N,J,I,Polo,Otr:Integer;
begin
Randomize;
Polo:=0;
Otr:=0;
For I:=0 to 99999999 do
 Begin
  N := Random(high(longint));
  if N mod trunc(100/10)=0 then Inc(Polo) Else Dec(Otr);
 End;
Memo1.Lines.Add('Позитивно - '+IntToStr(Polo));
Memo1.Lines.Add('Негативно - '+IntToStr(Otr));
end;
___________________________________ ___________________________________ ______
Кажется у меня промелькнула мысль о том, каким способом можно
то реализовать. представим Линию от 0 до 100 (см. аттач) Она разбивается на промежутки, указанные в Veroya. Берется Random(101) и кидается на линию. В какой "район" он попал, тот вариант и срабатывает
В Result`е нужно получить номер варианта.
___________________________________ ___________________________________ ________
ВСЕ!!! НАШЕЛ!!! Решение как всегда просто:
Код:
For G:=1 to Count do
 For H:=1 to Veroya[G] do
  MainArray{от 0 до 100 типа байт}[H]:=G;
N:=Random(101);
Result:=MainArray[N];
Изображения
Тип файла: jpg Идея.JPG (5.5 Кб, 96 просмотров)
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ

Последний раз редактировалось Alex Cones; 04.09.2009 в 15:53. Причина: Истчо падумавши
Alex Cones вне форума Ответить с цитированием
Старый 04.09.2009, 19:38   #7
0nni
Форумчанин
 
Аватар для 0nni
 
Регистрация: 24.07.2008
Сообщений: 279
По умолчанию

А если что то вроде этого?
Код:
Result := Ramdom(Trunc(vars + vars * 0.75))
if Result > vars - 1 then Result := PreimVar;


А нет, вру.
Сказал и загрустил от бесспорности своей правоты.

Последний раз редактировалось 0nni; 04.09.2009 в 19:44.
0nni вне форума Ответить с цитированием
Старый 04.09.2009, 19:54   #8
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Я уже нашел правильное решение, посты 2 и 6. Тему даже можно закрывать.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Упрощенный вариант драйвера клавиатуры. NooDle Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 7 09.03.2010 17:32
Нужен свой вариант функций... raspberry Общие вопросы C/C++ 1 24.05.2009 18:19
Будильник. Консольный вариант в Delphi. Amen Помощь студентам 5 12.03.2009 15:33
Предложите свой вариант решения на (Си) @ARXANGEL@ Фриланс 7 10.11.2008 09:54
Сетевой вариант базы данных. A.Tulin БД в Delphi 7 18.06.2007 00:46