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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.04.2010, 17:06   #1
zver777
Пользователь
 
Регистрация: 31.07.2009
Сообщений: 89
По умолчанию Генерация даты в заданном промежутке

Здравствуйте!
Мне надо генерировать рандомно дату из заданного промежутка. Например выбрать случайным образом дату из промежутка
12-3-2008 и 21-5-2010. Сначал думал просто randomom генерировать день, месяц и год. Но не могу придумать как согласовать, чтобы дата потом не выходила за заданный промежуток.
Спасибо за помощь.
zver777 вне форума Ответить с цитированием
Старый 08.04.2010, 17:19   #2
Grag
А может и не...
Участник клуба
 
Аватар для Grag
 
Регистрация: 27.03.2010
Сообщений: 1,269
По умолчанию

Генерируй год, потом месяц, затем дату месяца (в зависимости от месяца выбирай диапазон функции Random(Range)+1.) +1 для исключения 0. В зависимости от года (високосный или нет) выбирай соответствующий Range для февраля... Год генерируешь рандомно пока не окажешься в нужном диапазоне in [2008..2010], ну и так далее по аналогии...
Перемешивай дело с бездельем и не сойдешь с ума...

Последний раз редактировалось Grag; 08.04.2010 в 17:22.
Grag вне форума Ответить с цитированием
Старый 08.04.2010, 17:27   #3
zver777
Пользователь
 
Регистрация: 31.07.2009
Сообщений: 89
По умолчанию

Не всё так просто.
Если промежуток такой 12-5-2008 и 21-2-2010, то как генерировать месяц?
Я пока не нашёл другог решения как использовать кучу ifов
zver777 вне форума Ответить с цитированием
Старый 08.04.2010, 18:22   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

а поиском почему не пользуетесь?!!

вот здесь - "Генерация случайных дат из диапазона, как реализовать?"
мой пост #3
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.04.2010, 18:27   #5
Marsel737
Форумчанин
 
Аватар для Marsel737
 
Регистрация: 09.11.2009
Сообщений: 669
По умолчанию

Код:
var
  strYear: string;
  strMounth: string;
  strDay: string;
  strDate: string;
begin
  Randomize;
  strYear := StrToInt(Random(2) + 2008);
  strMounth := StrToInt(Random(11) + 1);
  if IntToStr(strYear) = 2012 and IntToStr(strMounth) = 2 then
  begin
    strDay := IntToStr(Random(20) + 1);
  end;
  if IntToStr(strYear) = 2008 and IntToStr(strMounth) = 5 then
  begin
    strDay := IntToStr(Random(18) + 12);
  end else
    strDay := IntToStr(Random(30) + 1);
  strDate := 'Дата': strDay + '.' + strMounth + '.' + strDay;
end;
Но нуно ещё добавить проверку на количество дней, в зависимости от месяца.
Я не всегда знаю, о чем говорю, но знаю, что прав. © Мухаммед Али.
К чёрту обстоятельства. Я создаю возможности. © Брюс Ли
Marsel737 вне форума Ответить с цитированием
Старый 09.04.2010, 08:56   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

есть две даты
расчитать количество дней между датами (есть готовые функции F1 date/time routines)
получить случайное число в рассчитанном диапазоне
добавить к первой дате полученное число

Код:
d1:=d1+random(DaysBetween(d1,d2));
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 09.04.2010 в 08:58.
evg_m вне форума Ответить с цитированием
Старый 09.04.2010, 09:33   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

evg_m, дата d2 никогда не будет попадать в диапазон, надо +1 внутри вызова random()
но по сути, абсолютно согласен с Вашим решением.

Цитата:
Сообщение от Serge_Bliznykov
у меня такое впечатление, что мой пост никто не заметил..
ладно, тогда продублирую код прямо здесь:
Код:
var dt1, dt2, dtRandom : TDateTime;
  Diapazon : integer;
begin
  Randomize;
  dt1 := EncodeDate(2006, 01, 02);
  dt2 := EncodeDate(2009, 01, 01);
  Diapazon := trunc(dt2) - trunc(dt1) + 1;
  dtRandom := dt1 + random(Diapazon);

  button1.Caption := DateToStr(dtRandom);
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Автоматизация заполнения даты и зависимость ячейки времени к ячейке даты. Каравай Microsoft Office Excel 14 11.03.2010 18:11
Выборка записей в промежутке нескольких минут ssdm SQL, базы данных 4 29.01.2010 15:47
Как сделать, чтобы ГСЧ выдавал числа в определенном промежутке? HawkSerj Общие вопросы Delphi 8 31.07.2009 20:24
Машина случайным образом генерирует натуральные числа в промежутке [0, 1, 2, … 100] JustinTI Помощь студентам 4 21.12.2008 14:31
Машина случайным образом генерирует натуральные числа в промежутке [0, 1, 2, … 10] до тех пор, пока не 0 JustinTI Помощь студентам 3 21.12.2008 14:31