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

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

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

offline
Опыт: 45,134
Активность:
Ну я хз, если не нравиться то предложите свою задачу.
Вот раз зашла речь о рационализации, вот как бы ты выполнил заполнение массива от 8189 до 1 наиболее рационально?
Старый 10.03.2007, 21:25
J
expert
offline
Опыт: 48,447
Активность:
Старый 10.03.2007, 21:26
p01nTT

offline
Опыт: 11,160
Активность:
Цитата:
Сообщение от Jon
если честно.. то я больше времени пытался понять что вообще надо зделать, а не как зделать

я кстати тож :)
Старый 10.03.2007, 21:54
adic3x

offline
Опыт: 108,439
Активность:
Собственно вот вариант кода, который я выкладывал ранее, все проверял, все прекрасно пашет:

Код:
function z takes nothing returns nothing
local integer array z
set z[0]=0
loop
 set z[0]=z[0]+1
 set z[z[0]]=8190-z[0]
 exitwhen z[0]==8190
endloop
endfunction
Старый 10.03.2007, 22:35
adic3x

offline
Опыт: 108,439
Активность:
Ы? Ужо все? ладно... DioD, в след раз плз обьясняй подробно что надо сделать=)
Старый 11.03.2007, 09:20
DioD

offline
Опыт: 45,134
Активность:
нетрат почему-то сразу понял что надо сделать
Старый 11.03.2007, 09:35
NETRAT

offline
Опыт: 83,712
Активность:
ну я же типа программист почти что дипломированный...

мне вообще нравятся задачи которые дает Алексей, по архитектуре процессора, но это достаточно сложно и вряд ли кто будет этим заниматься.

думаю, что лучшим вариантом в этом случае будет задача оптимизации кода или оптимальной реализации алгоритма (сортировки не рассматривать)

NETRAT добавил:
Прикладная сишная задача, описанная в жасссе:
Напишите код эквивалентный
Код:
set k = ModuloInteger(A,2)
if k == 0 then
return 1
else
return 0
endif
без использования операторов условного перехода. Это прикладная задача.
Подсказка 1: Решение записывается в одну строчку.
Подсказка 2: Функция определяет четность числа.
На мой взгляд, решение просто элементарно...
Возможно имеет смысл тем кто знает решение, писать его под тегами admin?!
Старый 12.03.2007, 00:10
Iron
Листовой
offline
Опыт: 24,427
Активность:
Ну я подозреваю что имеет место быть
return ((ModuloInteger(A,2)-1)*(ModuloInteger(A,2)-1))
Так? Ну это приминительно к возможностям именно jass-a
Старый 12.03.2007, 01:01
NETRAT

offline
Опыт: 83,712
Активность:
Вариант неплохой, но, очевидно, не лучший, запросто можно обойтись без квадрата, который в твоем случае доставляет неоптимальность из-за двойного использования функции Modulo

NETRAT добавил:
мда, даже у меня в неоптимальном виде это всего одна функция
Старый 12.03.2007, 02:08
Iron
Листовой
offline
Опыт: 24,427
Активность:
Блин, все ж примитивно, а я как лох фигню спорол.
Воть:
return ModuloInteger(A-1,2)
Старый 12.03.2007, 02:27
DioD

offline
Опыт: 45,134
Активность:
function X2 takes integer A returns integer
return ModuloInteger(A,2) != 0
return 0
endfunction

админ таг это излишне, тема предназнаячена для обучения.

DioD добавил:
да, с буквами у меня плохо, если возращает ноль вместо еденицы достаточно переставить "!=" на "==" .

а если честно я не понял вообще что надо сделать
Старый 12.03.2007, 07:55
Iron
Листовой
offline
Опыт: 24,427
Активность:
DioD, короч так. Разьясню, функция ModuloInteger это функция получения остатка от деления, т.е. ModuloInteger(A,2) - остаток от деления А на 2. При этом число А четное если остаток равен 0, и наша функция должна вернуть 1, а если нечетное то остаток - 1, а функция должна вернуть 0.
Все делается простым прибавлением или вычитанием из А+1 или А-1.
Старый 12.03.2007, 10:02
DioD

offline
Опыт: 45,134
Активность:
ну я например без прибавления это сделал...
Старый 12.03.2007, 10:20
p01nTT

offline
Опыт: 11,160
Активность:
DioD Диод а разве True при переводе в интежер РБом не 64 возвращает?
Старый 12.03.2007, 10:24
DioD

offline
Опыт: 45,134
Активность:
тру это 1 фолс это 0, вообще бул это тот же интегер, через рестор юнит можно без ретур бага писать в переменные другой тип
Старый 12.03.2007, 10:56
NETRAT

offline
Опыт: 83,712
Активность:
ну, я сказал что это сишная задача и выглядит достаточно примитивно, хотя имеет важное значение.
Усложним задачу
Код:
set k = ModuloInteger(A,2)
if k == 0 then
return 1
else
return -1
endif
Вообще, всем кто достаточно долго писал под С удалось встретиться с такими задачками...
DioD не думаю что дополнительная функция - лучшее решение

кстати, в теории программирования считается что int(true) это неизвестно что, отличное от нуля

NETRAT добавил:
Iron лучше A+1 ибо для меня не очевидно что будет в ModuloInteger(<0)
Старый 12.03.2007, 12:54
dk

offline
Опыт: 60,293
Активность:
Ну например используя прошлую задачу:
return ModuloInteger(A+1,2)*2 - 1
Старый 12.03.2007, 13:30
Toadcop

offline
Опыт: 54,313
Активность:
ZzZ takes nothing returns nothing
local integer array ZzZ

set ZzZ[0

функция ZzZ & variable ZzZ ? компилятор не ругаетьса ?!

Toadcop добавил:
Цитата:
set k = ModuloInteger(A,2)
if k == 0 then
return 1
else
return 0
endif
в джассе это будет быстрей чем лишние извращения =) а точнее даже так


if ModuloInteger(A,2) == 0 then
return 1
else
return 0
endif

это еще лутче ! но относительно... кстати инциализация лок переменных занимает 3-4 установки переменой значения это просто между делам т.е. если у НТ к это лок перемменая то мой вариант очень не плохой...
Старый 12.03.2007, 13:50
J
expert
offline
Опыт: 48,447
Активность:
Цитата:
Сообщение от Toadcop
функция ZzZ & variable ZzZ ? компилятор не ругаетьса ?!

принцепи важно не это.. т.к. все писали чисто по памяти, и не пользовались компелятором (по крайне мере я)

хм.. неуспел... на задачу нт, дк уже ответил...
Цитата:
Сообщение от NETRAT
Iron лучше A+1 ибо для меня не очевидно что будет в ModuloInteger(<0)

ModuloInteger( A*4+1 , 4) , функция возвратит остаток которого нехвотает до наименьшего кратного (т.е. то значение которого нехвотает до "A*4") - "1"

ModuloInteger( -(A*4+1), 4) , функция возвратит остаток которого нехватает до большего кратного (т.е. то значение которого нехвотает до "A*4+4") - "3"
Старый 12.03.2007, 15:25
NETRAT

offline
Опыт: 83,712
Активность:
Toadcop нет, не быстрее, и я уже не раз обьяснял почему сумма/разность работает быстрее оператора условного перехода. По поводу локалки - верно

Dead_knight угу, задачо на сообразительность...

Jon че-то я не вьехал в последние строки...
Старый 12.03.2007, 22:53
Закрытая тема

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

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

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

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



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