gifts2017

Перевод систем счисления (включая перевод римских чисел)

Опубликовал Александр Венгер (venger) в раздел Программирование - Практика программирования

В обработке реализованы алгоритмы (функции) перевода средствами 1С целых и дробных чисел из одной позиционной системы счисления с неотрицательными целочисленными основаниями в другую. При переводе отрицательных чисел знак сохраняется. Диапазон возможных систем счисления от 2-х до 36-ти. Также реализован перевод в римскую систему счисления из арабской (10-ричная) и обратно (галка «Вкл. римские числа» на форме обработки). Перевод из/в римскую систему счисления реализован только для целых неотрицательных чисел. «Расширенные римские цифры» также не поддерживаются.

Для бесконечных периодических дробей в результате, есть возможность указания точности выводимого дробного числа. По умолчанию - "0" знаков после запятой. Цифры выше 9-ти обозначаются латинскими буквами от A до Z. Регистр вводимого символа значения не имеет. В итоговом числе символы отображаются в верхнем регистре. Дробная часть отделяется от целой как точкой, так и запятой.

Перед переводом производится проверка на корректность вводимого числа, т.е. на допустимость символов и цифр для данной системы счисления или присутствия более одной точки/запятой или более одного знака «минус» перед числом. Так, например, цифры 5 не может быть в 4-ричной системе счисления, а символа «R» в 20-ричной системе.

Возможна проверка в виде обратного перевода - кнопка «Обратно». Направление последнего перевода показывается стрелкой, расположенной слева на форме.

Объявления реализованных в обработке функций для перевода:

//-------------------------------------------------------
Функция глПереводИзДесятичнойВПроизвольнуюСистемуСчисления(Знач ЧислоДляПеревода, Знач ОснованиеРезультата=2,Знач Погрешность=0) Экспорт Далее
Функция
глПереводИзПроизвольнойСистемыСчисленияВДесятичную(Знач СтрокаДляПеревода, Знач ОснованиеЧисла=2, Знач Погрешность=0) Экспорт Далее
Функция
глПереводПроизвольныхСистемСчисления(Знач СтрокаДляПеревода, Знач ОснованиеЧисла=10, Знач ОснованиеРезультата=2, Знач Погрешность=0) Экспорт Далее
Функция
глПроверитьСтрокуПоПроизвольнойСистемеСчисления(Знач СтрокаДляПеревода, Знач Основание) Экспорт Далее

Функция
глПереводИзДесятичнойВРимскуюСистемуСчисления(Знач ЧислоДляПеревода) Экспорт Далее
Функция
глПереводИзРимскойВДесятичнуюСистемуСчисления(Знач СтрокаДляПеревода) Экспорт Далее
Функция
глПроверитьСтрокуПоРимскойСистемеСчисления(Знач СтрокаДляПеревода) Экспорт Далее
//-------------------------------------------------------

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
NumberSystems.zip
.zip 25,05Kb
14.05.10
134
.zip 25,05Kb 134 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Александр Венгер (venger) 14.05.10 13:45
(0) Кому надо, выдергиваете функции из обработки в глобальник к себе и пользуетесь. Эта обработка просто демонстрация их использования...
2. Александр Венгер (venger) 14.05.10 14:18
(0) Обновил файл, маленькую описку исправил;-) Тестируем, теперь вроде все должно быть нормуль;-)
3. Андрей Янакаев (YAN) 14.05.10 15:10
А практическое применение возможно и где если не секрет?
4. Александр Венгер (venger) 14.05.10 15:17
(3) Как минимум мне понадобилось для работы со стилями контролов FormEx. Это 10 в 2 и обратно. Потом можно использовать для нумерации чего-нить римскими цифрами. Это пока с ходу, что пришло в голову...
6. Александр Венгер (venger) 14.05.10 16:01
(5) Тоже гуд, только для целых по-моему, без учета знака и без римских;-)

Но что понравилось это вариант определения по символу числа, у меня это отдельная функция, а там красивее, вот так:
Найти("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",Сред(Значение,Х,1))-1
7. Епрст (Ёпрст) 14.05.10 16:07
(6) Ну.. це же Рупор делал.... мозг!

:)
8. Сергей Ожерельев (Поручик) 14.05.10 21:46
Что бы мы делали без web.archive.org? :(
9. Armando Armando (Armando) 15.05.10 15:26
Мне перевод в другие системы счисления пригодился для "упаковки" guid ссылки в восьмерке, только там использовал, скажем так, 95ричную систему)
10. Galytskyy Volodymyr (arithmometr) 16.05.10 19:14
С римскими числами не все гуд.
Будет полезно почитать:
http://forum.algolist.ru/algorithm-maths-mathematical/663-rimskie-chisla.html
http://ru.wikipedia.org/wiki/Римские_цифры
А также Help по функции РИМСКОЕ() в MS Excel или Roman() в OpenOffice.org Calc
11. Александр Венгер (venger) 17.05.10 11:30
(10) Примерчик не корректного перевода можно
12. Galytskyy Volodymyr (arithmometr) 17.05.10 17:32
(11) Максимальное число, которое можно записать в римской системе = 3999
Возможные варианты записи этого числа:
MMMCMXCIX
MMMLMVLIV
MMMXMIX
MMMVMIV
MMMIM
Для вариантов с 2 по 5 обработка выдает предупреждение о некоректности
13. Олег Пономаренко (O-Planet) 17.05.10 20:39
Мдя, и чем не аля перенумератор ;)
15. Александр Рытов (Арчибальд) 18.05.10 09:25
(12) Если возможна запись CM, то никакие LM, XM, VM, IM уже некорректны. Так же как некорректно писать LC вместо L.
16. Galytskyy Volodymyr (arithmometr) 18.05.10 20:27
(15)
Существует «сокращённый способ» для записи больших чисел, таких как 1999. Он не рекомендуется, но иногда используется для упрощения. Отличие состоит в том, что для уменьшения цифры слева от неё может писаться любая цифра:

* 999. Тысяча (M), вычтем 1 (I), получим 999 (IM) вместо CMXCIX. Следствие: 1999 — MIM вместо MCMXCIX
* 95. Сто ©, вычтем 5 (V), получим 95 (VC) вместо XCV
* 1950: Тысяча (M), вычтем 50 (L), получим 950 (LM). Следствие: 1950 — MLM вместо MCML

http://ru.wikipedia.org/wiki/Римский_счёт
17. Galytskyy Volodymyr (arithmometr) 18.05.10 20:30
(15) Рекомендую прочитать Help по функции РИМСКОЕ() в MS Excel. И поэкспериментировать со вторым параметром.
18. Александр Венгер (venger) 18.05.10 23:11
19. GSoft. (GSoft) 19.05.10 09:53
ребят а кто подскажет - может встречали подобное на 7ке но для систем шифрования паролей

есть справочник пользовательские логины - и уж очень не хочется хранить там пароли в открытом виде
20. SPiker (spkvxnet) 19.09.11 15:44
Полезная обработка. Не нужно самому "выдумывать велосипед"...
21. Осипов Сергей (fixin) 28.05.12 11:17
готовые отлаженные функции по переводу в/из систем счисления можно взять в моей "Библиотеке продвинутых функций" также. ;-)
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа