|
Вопрос # 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
Комментарий к оценке: Большое спасибо.
Исключить ноль программно я не подумал.
|
Мини-форум вопроса
Мини-форум пуст.
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|