SA-MP Forums Archive
Рандомная дата - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Русский/Russian (https://sampforum.blast.hk/forumdisplay.php?fid=32)
+---- Thread: Рандомная дата (/showthread.php?tid=303366)



Рандомная дата - Mass_Deboose - 13.12.2011

Дело в том, что я пытаюсь сделать что бывыпадало рандомное число, с определенного месяца по другой. ZiGGi подсказал код, но это совсем не то:
pawn Code:
// вот функция
stock rand(min,max) return (min+random(max - min));
// либо макрос
#define rand(%0,%1) (%0+random(%1 - %0))
// юзай так
rand(21,36);
Но дело в том, что числа должны быть не больше 31. В некоторых случаях даже 28, 29, 30.
Тоесть rand(21,20), диапозон чисел от 21 до 31, и от 1 до 20.
А если использовать код выше, то при rand(21,36); может выпасть число где то 50000, что не как не подходит под число месяца.
Помогите пожалуйста.


Re: Рандомная дата - Stepashka - 13.12.2011

pawn Code:
randomDate(month, isLeapYear = false)
{
    if (!(0 < month < 13)) return 0;
    static monthDays[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30 ,31};
    monthDays[2] = (isLeapYear && month == 2) ? 29 : 28;
    return (1 + random(monthDays[month] - 1));
}



Re: Рандомная дата - ZiGGi - 13.12.2011

Quote:
Originally Posted by Mass_Deboose
View Post
А если использовать код выше, то при rand(21,36); может выпасть число где то 50000, что не как не подходит под число месяца.
Помогите пожалуйста.
при rand(21,36)
получится это
(21+random(15))
тут не может выпасть число 50000, максимальное - 35


Re: Рандомная дата - Stepashka - 13.12.2011

Quote:
Originally Posted by ZiGGi
View Post
максимальное - 35
36, random работает включительно.


Re: Рандомная дата - Norck - 13.12.2011

Quote:
Originally Posted by Stepashka
View Post
36, random работает включительно.
Неужели?


Re: Рандомная дата - CaHbKo - 13.12.2011

Quote:
Originally Posted by Stepashka
View Post
36, random работает включительно.
Какраз таки нет.
Quote:
Returns A random number ranging from 0 to max-1.
(21+random(15)) = 21 + (0 ... 14) = 21 .. 35


Re: Рандомная дата - Stepashka - 13.12.2011

Quote:
Originally Posted by CaHbKo
View Post
Какраз таки нет.
ну тогда просто удалите из моего скрипта "- 1"


Re: Рандомная дата - Mass_Deboose - 13.12.2011

Quote:
Originally Posted by ZiGGi
View Post
при rand(21,36)
получится это
(21+random(15))
тут не может выпасть число 50000, максимальное - 35
Не знаю, выпало такое число при rand(21,20).
549357572


Re: Рандомная дата - Norck - 13.12.2011

Quote:
Originally Posted by Mass_Deboose
View Post
Не знаю, выпало такое число при rand(21,20).
549357572
Всё ясно. Теперь попробуй rand(20,21). В результате должно получиться 20.

первый параметр - это минимальное значение
второй параметр - это (максимальное_значение)-1

Ты же их перепутал, вот и получилась такая белиберда


Re: Рандомная дата - Mass_Deboose - 13.12.2011

Quote:
Originally Posted by Norck
View Post
Всё ясно. Теперь попробуй rand(20,21). В результате должно получиться 20.

первый параметр - это минимальное значение
второй параметр - это (максимальное_значение)-1

Ты же их перепутал, вот и получилась такая белиберда
Разве я настолько глуп? Я их не перепутал и описал по поводу диапазона чисел в первом посте. Диапазон в этом случае 21 марта - 20 апреля.


Re: Рандомная дата - Stepashka - 13.12.2011

Если тебе нужны такие диапазоны забудь про месяцы.


Re: Рандомная дата - Mass_Deboose - 16.12.2011

Quote:
Originally Posted by Stepashka
View Post
pawn Code:
randomDate(month, isLeapYear = false)
{
    if (!(0 < month < 13)) return 0;
    static monthDays[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30 ,31};
    monthDays[2] = (isLeapYear && month == 2) ? 29 : 28;
    return (1 + random(monthDays[month] - 1));
}
Использовать так?
pawn Code:
randomDate(месяц,високосный год или нет);
Немного понял, но это опять не совсем то, мне нужно, что бы например если месяц март, то число ниже 21 выпасть не как не должно. Так же мне нужно, что бы число выпадало не только от одного месяца марта, а например от марта и апреля. Ну примерно что бы так:
pawn Code:
randomDate(месяц1,месяц2,високосный год или нет);
Тобишь что бы число выпадало не от одного месяца, а от двух, март, апрель. Если март, то число не может быть ниже 21, если апрель, то число не может быть больше 20.
Побывал сделать сам, но получается что то ужасное.


Re: Рандомная дата - Stepashka - 16.12.2011

Quote:
Originally Posted by Stepashka
View Post
Если тебе нужны такие диапазоны забудь про месяцы.
прочти это сообщение ещё раз!


Re: Рандомная дата - Mass_Deboose - 16.12.2011

Quote:
Originally Posted by Stepashka
View Post
прочти это сообщение ещё раз!
Не понимаю.


Re: Рандомная дата - Stepashka - 16.12.2011

Не привязывайся к месяцам, считай дни от начала года или как на сайтах, с использованием юникс тайм.


Re: Рандомная дата - Mass_Deboose - 22.12.2011

Заплачу рублей 50 за нормальный код, который мне нужен. WMR