(Programmer) Перевод из одной сист. в другую | |
---|---|
Grumax Сообщений: 104 Откуда: г. Кинешма Дата регистрации: 30.01.2005 |
Господа программисты, будучи без спец.образования...затруднительно, т.е. вообще забыл как из одной системы в другую переводить. Речь идет о переводе из 2-ичной в 10-ричную и т.д...если кому не трудно, не могли бы превести алгоритм.
А если уж Вы совсем добрая душа, то перед мной стоит такая задачка... Есть 33-ричная система "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ", необходимо перевести в десятиричную, прибавить +1, и вернуть обратно в 33-ричную, например переменную "ББ" сделать "БВ" Спасибо. ------------------ Я во все дела суюсь - всесторонне разовьюсь Visual FoxPro 8.0 |
Re: (Programmer) Перевод из одной сист. в другую | |
---|---|
matod Сообщений: 3062 Откуда: Иркутск Дата регистрации: 31.10.2001 |
По поводу перевода из двоичной в десятиричную.
Пусть a(1),a(2), ...., a(n) - цифры двоичного числа. Тогда для перевода понадобится формула: d = A(n) + A(n-1)*2 + A(n-2)*2^2 .... + A(1)*2^(n-1) т.е. получаем алгоритм, например для двоичного числа заданного строкой единиц и нулей:
Про вторую задачу. Здесь можно воспользоваться тем, что мы легко можем перевести в фоксе букву в число и обратно. Что-то вроде этого. Думаю, по-аналогии можно легко переделать на сложение с любыми числами и для друних целей.
|
Re: (Programmer) Перевод из одной сист. в другую | |
---|---|
Grumax Сообщений: 104 Откуда: г. Кинешма Дата регистрации: 30.01.2005 |
С прескорбием понимаю, что это скорее подходит, чтобы решить вторую половину задачи из 10-ричной в 33-ичную. Все еще нужна формула перевода из большего основания в меньшее... На основе функций ASC(), CHR() всё уже сделано и претензий нет, просто рассматриваю другой вариант (более интересный и универсальный) Если будет возможно перевести из 33 в -> 10+1 -> снова в 33, то что мешает сделать то же самое для 50-ричной(дальше больше) ------------------ Я во все дела суюсь - всесторонне разовьюсь Visual FoxPro 8.0 |
Re: (Programmer) Перевод из одной сист. в другую | |
---|---|
Владимир Максимов Сообщений: 14097 Откуда: Москва Дата регистрации: 02.09.2000 |
Цитата:А зачем здесь вообще надо переводить в 10-ричную систему? Делай все вычисления в той системе, в которой и работаешь!
Смысл заключается в следующем. Когда ты складываешь 2 числа столбиком на бумажке (в 10-ричной системе), то действуешь примерно так: 62+1 -) 2+1 = 3 - это меньше, чем основание системы. Т.е. в данном случае меньше 10. Значит переносить 1 в старший разряд не надо. Оставлем это число как результат -) 6+0 = 6 -) Результат 63 Абсолютно то же самое реализовано в приведенном коде. Тонкость заключается в том, что буква "А" соответствует цифре 0, поэтому если прибавить к "А" любую букву, то получим эту же букву. |
Re: (Programmer) Перевод из одной сист. в другую | |
---|---|
Rustam Автор Сообщений: 235 Откуда: Иркутск Дата регистрации: 14.10.2000 |
Как говорят дело было вечером и делать было нечего.
Написал три функции в определенной степени универсальные. Функция FromAnyBase(tcNumber,tcFromBaseDigits) Перевод числа в десятичную с любой основы. Пример для 16-ой системы, FromAnyBase('FFEFFE','0123456789ABCDEF') Функция ToAnyBase(tcNumber,tcFromBaseDigits) Перевод числа c любой основы в 10-ную. Пример для 16-ой системы, ToAnyBase(1023,'0123456789ABCDEF') Функция Increment(tcNumber,tcBaseDigits) Прибавление единицы в число любой основой. Пример для 16-ой системы, Increment(1023,'0123456789ABCDEF')
|
© 2000-2024 Fox Club  |