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

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

Ответ
 
ELITE
АДмин
offline
Опыт: 4,078
Активность:
конвертация из одной системы исчисления в другую и обратно
Доброе время суток
помогите написать код конвертации из 10-тичной системы в другие системы

точнее надо из числа 931364106410610 (от 10 до 50 знаков длиной)
конвертировать в 32-64 символьную систему (получить J78rnJN7jfi)

ну и обратно

мне бы хотябо сам алгоритм расписаный, как это делается, а то чтото гугл не дает нормального ответа - почти во всех языках для этого используется готовые команды конвертации и нигде нет описания. как это сделать без них (в варике то конвертеров нет таких)
Старый 05.05.2012, 11:58
ScorpioT1000
Работаем
online
Опыт: отключен
Только тут xgm.ru/p/wc3/creating_loading_code написано нормально. В варе нехватает некоторых жизненно-важных операторов, я бы расписал, да там слишком много хитростей.
Вот по ск2, пожалуйста, расскажу: xgm.ru/p/sc2/scencrypt
Старый 05.05.2012, 12:13
ELITE
АДмин
offline
Опыт: 4,078
Активность:
тогда вопрост - какое максимальное число сможет понять варик? (сколько знаков)
Старый 05.05.2012, 14:21
ScorpioT1000
Работаем
online
Опыт: отключен
xgm.ru/p/wc3/w3_data_types есть статьи
Старый 05.05.2012, 14:42
ELITE
АДмин
offline
Опыт: 4,078
Активность:
real - реальное 32-битное цисло с плавающей точкой (аналог float на Си), принимает значения от -3.4 * 10^38 до 3.4 * 10^38.

это как?
32 битное число или всётаки 10^38 ????
32 бита - это 4 с небольшим милиарда
а 10^38 это очень большое число
------------
да прочитал я википедию - там вообще 4000 степени описаны
мне надо просто знать
в типе реал сколько знаков я могу взять?

Отредактировано ELITE, 05.05.2012 в 14:56.
Старый 05.05.2012, 14:49
ScorpioT1000
Работаем
online
Опыт: отключен
real - реальное 32-битное цисло с плавающей точкой (аналог float на Си), принимает значения от -3.4 * 10^38 до 3.4 * 10^38. Выделяется особенностью хранения – точность может быть сверхвысокой в одних и низкой в других диапазонах. Подробнее на Википедии.
Ты какой-то трудный ребёнок =(
Старый 05.05.2012, 14:51
ScorpioT1000
Работаем
online
Опыт: отключен
ELITE, реал считается не знаками, а точностью. Почитай еще два раза.
ScorpioT1000 добавил:
Старый 05.05.2012, 19:39
ELITE
АДмин
offline
Опыт: 4,078
Активность:
в общем вот наработка работающая
из N-ричной системы в 10-ти ричную
и обратно конвертирует
тока код не оптимизировал - извиняйте уж
кому надо - мож пригодится
да и интегер держит только 32 бита - тоесть 2.000.000.000 с небольшим можно использовать
Миниатюры
Кликните на картинку для увеличения
Название:  10toN.jpg
Просмотров: 16
Размер:  105.7 Кбайт  Кликните на картинку для увеличения
Название:  Nto10.jpg
Просмотров: 16
Размер:  234.2 Кбайт  
Старый 07.05.2012, 19:44
ScorpioT1000
Работаем
online
Опыт: отключен
Госспади, сделал бы на jass хотябы, пригодилось бы кому-нибудь.
Старый 07.05.2012, 20:22
ELITE
АДмин
offline
Опыт: 4,078
Активность:
итак вот на jass в виде функции
--------
1) перевод из 10-ти ричной системы в N-ричную
функцмм надо передать словарь, по которому будет преобразовываться (строка) и преобразуемое число (целочисленое число от 0 до 2.147.483.646)
на выходе будет строка

Код:
// передаю алфавит кодирования , кодируемое число - получаю закодированую строку
function I2RAW takes string alp, integer cod returns string

 local string res = ""  
 local integer j = 0 
 local integer i = 1 
 
    loop
        exitwhen i > 10
        if cod >= StringLength(alp) then
            set j = ( cod - (  cod / StringLength(alp) * StringLength(alp) ) )
            set res = ( SubString(alp, j, ( j + 1 )) + res )
            set cod = ( cod / StringLength(alp) )
            set i = 1
        else
            set res = ( SubStringBJ(alp, ( cod + 1 ), ( cod + 1 )) + res )
            set i = 10
        endif
        set i = i + 1
    endloop    
    
  return res  
endfunction


----------
и вот в обратную сторону
передаю s1 и s2 - словари кодирования заглавными и строчными буквами
саму раскодируемую строку и на выходе число
Код:
function RAW2I takes string s1, string s2, string cod returns integer

 local integer res = 0  
 local integer i = 0 
 local integer j = 0 
 local integer m = 0 
 local integer n = 0 
 local integer p = 0 

    set m = 1
    loop
        exitwhen m > StringLength(cod)
        set n = 1
        loop
            exitwhen n > StringLength(s1)
            if ( ( SubString(cod, m-1, m) == SubString(s1, n-1, n) )or( SubString(cod, m-1, m) == SubString(s2, n-1, n)) )  then
                set j = ( n - 1 )
                set n = StringLength(s1)
            else
            endif
            set n = n + 1
        endloop
        set p = 0
        loop
            exitwhen p > ( StringLength(cod) - m )
            if p == 0 then
                set i = 1
            else
                set i = ( i * StringLength(s1) )
            endif
            set p = p + 1
        endloop
        set res = ( res + ( i * j ) )
        set m = m + 1
    endloop
 return res
endfunction

Отредактировано ELITE, 08.05.2012 в 21:20.
Старый 08.05.2012, 09:50
Ответ

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

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

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

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



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