| 
| 
 | Вопрос # 1 012/ вопрос открыт / | 
 |  Доброго времени суток, уважаемые эксперты!
 Как применяется функция Random я знаю. Интересно, можно ли заполнить с ее помощью массив положительными и отрицательными числами, но чтобы не было нулей.
 
|  |   Вопрос задал: puporev (статус: 2-ой класс)Вопрос отправлен: 27 октября 2007, 07:57
 Состояние вопроса: открыт, ответов: 1.
 |  Ответ #1. Отвечает эксперт: Dron Здравствуйте, puporev!Конечно можно! Имея такой простой инструмент, как генератор случайных чисел, можно построить алгоритмы любой сложности подборки случайных чисел. А теперь конкретно, как заполнить массив положительными и отрицательными числами, но чтобы не было нулей.
 Для удобства можно написать миниатюрную функцию, которая возвращала бы случайное число из указанного диапазона:
 
 function MyRandom(Min, Max: Integer): Integer;
begin
  Result:=Random(Max-Min+1)+Min;
end;Принцип работы очень прост - сначала мы выбираем случайное число от 0 до длины заданного диапазона, а затем делаем смещение, равное нижней границе. Дальше дело за малым - применить эту функцию. В примере генерируются 20 чисел от -10 до 20 и выводятся в ListBox:
 
 procedure TForm1.Button1Click(Sender: TObject);
label NewRand;
var i,r,min_r,max_r: integer;
begin
  min_r:=-10; {Нижняя граница}
  max_r:=20; {Верхняя граница}
  for i := 1 to 20 do
  begin
    NewRand:
    r:=MyRandom(min_r,max_r);
    if r = 0 then goto NewRand;
    ListBox1.Items.Add(IntToStr(r))
  end
end;Обратите внимание, что для отсеивания нулей мы просто "крутим" генератор до тех пор, пока он не сгенерирует число, отличное от нуля. То же самое можно сделать без использования меток - с помощью цикла Repeat.P.S. Не забудьте прописать вызов Randomize.
 Удачи!
 
|  | Ответ отправил: Dron (статус: Студент)Время отправки: 27 октября 2007, 09:23
 Оценка за ответ: 5
 Комментарий к оценке: Большое спасибо.Исключить ноль программно я не подумал.
 
 |  
 Мини-форум вопросаМини-форум пуст. Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |