Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 012

/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!

Как применяется функция Random я знаю. Интересно, можно ли заполнить с ее помощью массив положительными и отрицательными числами, но чтобы не было нулей.

puporev Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: 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

Комментарий к оценке: Большое спасибо.
Исключить ноль программно я не подумал.

Мини-форум вопроса

Мини-форум пуст.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 26 июня 2017, 16:47
Выполнено за 0.11 сек.
Рейтинг@Mail.ru