XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Закрытая тема
 
WEditor

offline
Опыт: 145
Активность:
Функция для расчёта чётное число или нет
Помогите, плз. Может кто знает, как в триггерах или на джазе рассчитывать, чётное число или нет. Очень необходимо для автоматизации работы мапы.
Кто знает как, пришлите плз функцию или объясните просто так.
Старый 24.09.2007, 13:58
rOOse
Kicked by Q
offline
Опыт: 1,205
Активность:
Дык проверяй делится на 2 или нет.
Старый 24.09.2007, 14:16
WEditor

offline
Опыт: 145
Активность:
Да??? И как же мне это, rOOse, сделать? обьясни.

WEditor добавил:
На самом деле так нельзя. Уже пробовал. Точнее можно, но это деление ничего не даёт. Число типа integer и при делении оно всеравно остаётся целым.

А с риалами я незнаю как вычеслять тока значение после точки. Если знашь, обясни.

WEditor добавил:
Чёрт, и неужели никто не знает!? И не поможет бедному мапмейкеру...
Старый 24.09.2007, 14:50
adic3x

offline
Опыт: 108,439
Активность:
Код:
if i-i/2-i/2=1then
 return true
else
 return false
endif


ADOLF добавил:
ану, считаем:

7-7/2(3)-7/3(3)=1

8-8/2(4)-8/2(4)=0
Старый 24.09.2007, 15:30
WEditor

offline
Опыт: 145
Активность:
ADOLF, спасибо огромное. Щас же вставлю ф-ю в мапу.
Старый 24.09.2007, 15:32
Alex_Hell
Mapmaker 'N' Programmer
offline
Опыт: 6,885
Активность:
Код:
function HonestInt takes integer i returns boolean
    local real r = I2R(IAbsBJ(i))

    loop
        exitwhen r <= 2
        set r = r - 2
    endloop

    set i = R2I(r)

    if i == 2 then
        return true
    endif

    return false
endfunction

Функция берет число integer и возвращает boolean(true = четное, false = нечетное)
Тебе это нужно?

Alex_Hell добавил:
опоздал((

Alex_Hell добавил:
но в моей функции нету делений, но зато цикл
Старый 24.09.2007, 15:41
df Hunter
Нападатель
offline
Опыт: 5,749
Активность:
Цитата:
Сообщение от ADOLF
Код:
if i-i/2-i/2=1then
 return true
else
 return false
endif


ADOLF добавил:
ану, считаем:

7-7/2(3)-7/3(3)=1

8-8/2(4)-8/2(4)=0

хехе, только при true он вовзращает, что число нечетное

df Hunter добавил:
и кстати не =,а == (что б при тру возвращал нечетное) или != (что б четное)
Старый 24.09.2007, 15:48
WEditor

offline
Опыт: 145
Активность:
ADOLF, твоя функция работает, но я заметил то же, что и df Hunter. Огромное спасибо всем.

Функция Alex_Hell`а сложнее и больше. Все равно спасибо и ему #:-) (за попытку).
Старый 24.09.2007, 16:18
DeT

offline
Опыт: 5,715
Активность:
хз....число четное если остаток от деления на 2 равен нулю


Код:
function Ch takes integer i returs boolean
 return (ModuloReal(i,2)==0)
endfunction


вроде так
Старый 25.09.2007, 15:37
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
Код:
function ModuloReal takes real dividend, real divisor returns real
    local real modulus = dividend - I2R(R2I(dividend / divisor)) * divisor

    // If the dividend was negative, the above modulus calculation will
    // be negative, but within (-divisor..0).  We can add (divisor) to
    // shift this result into the desired range of (0..divisor).
    if (modulus < 0) then
        set modulus = modulus + divisor
    endif

    return modulus
endfunction
таким образом, DeT цитирует ADOLFа дело в том, что Modulo - БЖ функция
Старый 25.09.2007, 16:00
rOOse
Kicked by Q
offline
Опыт: 1,205
Активность:
Иммено так как DeT написал и надо делать, а не выдумывать всякие вычисления и циклы. WEditor, извини не успел DeT написал уже.
Старый 25.09.2007, 16:05
WEditor

offline
Опыт: 145
Активность:
Хорошо, воспользуюсь советами. Всем спасибо. Тему мозна закрывать.
"Big thanks".
Старый 25.09.2007, 16:13
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
rOOse, делать надо как написал Адольф. К сожалению, способ Дета как раз подразумевает вызов всеми любимой Бж функции и вычисления ,когда как Адольф предложил просто вычисления. Большинство не уделяют внимания этому, но если у тебя надо в цикле посчитать остаток, то на счету каждый вызов. Это как использование констаныт bj_DEGTORAD (= bj_PI/180.0) в вычислении полярных координат - какой смысл, если можно писать численное значение (0.017453)?
Вообще вопрос вкуса, но право, не стоит вызывать ф-ии из blizzard.j для мат. расчетов. Лучше их произвести самому.

FellGuard добавил:
другое дело - натив функции типа SquareRoot
Старый 25.09.2007, 16:21
WEditor

offline
Опыт: 145
Активность:
УВАГА!!! Я уже сделал как мне подсказал ADOLF. (с исправлениями df Hunterа) И все работает.
Старый 25.09.2007, 16:23
DeT

offline
Опыт: 5,715
Активность:
WEditor да поняли мы

Ту фелл: понятно, просто в обычном случае в большинстве языков остаток считать достаточно просто(када действия в двоичной системе проводятся и все по ячейкам разбиваецо)
тут я конечно мб и обломался.

кстати кто мишает скопировать код и переименовать не юзая констант из бж? получаецо ТОЖЕСАМОЕ :)
Старый 25.09.2007, 16:34
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
Цитата:
получаецо ТОЖЕСАМОЕ
о чем и речь)
Старый 25.09.2007, 16:37
df Hunter
Нападатель
offline
Опыт: 5,749
Активность:
самое правильное и оптимальное :D
Код:
return (i+1)/2 == i/2


df Hunter добавил:
это именно мой вариант, я всегда так проверял )
у адольфа будет глючить с отрицательными ))

Отредактировано df Hunter, 03.10.2007 в 16:02.
Старый 25.09.2007, 16:45
DeT

offline
Опыт: 5,715
Активность:
df Hunter Чето мне подсказывает что ты написал бред...

i/2 - это и поделить пополам результат REAL
Старый 25.09.2007, 16:47
adic3x

offline
Опыт: 108,439
Активность:
Цитата:
у адольфа будет глючить с отрицательными ))

угу
Код:
if i<0then
 set i=(-1)*i
endif

DeT, бред как раз написал ты xD, хантер, можно и так...
Старый 25.09.2007, 17:54
FREEZE_ball
Cataclysm => жара
offline
Опыт: 15,247
Активность:
Нужно просто сделать как ADOLF.
Старый 25.09.2007, 19:14
Закрытая тема

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 16:04.