nedoPC.org

Community of electronics hobbyists established in 2002

...
Atom Feed | View unanswered posts | View active topics It is currently 20 Jul 2019 01:15



Reply to topic  [ 36 posts ]  Go to page Previous  1, 2, 3
Троичный конвертер на Java 
Author Message
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Понадобился мне для троичного ассемблера алгоритм перевода десятичного числа в его
троичное симметричное представление.
И надеялся я, что все нужные алгоритмы у меня есть в этом самом Троичном конвертере на Java...
Но, как всегда некстати, выяснилось, что исходник с комментариями я потерял, когда HDD рухнул. :osad:
А читать декомпилированную Java весьма муторно, легче и быстрее заново написать.

В общем раскопал я вот такой алгоритм, на мой взгляд - весьма удачный:
Quote:
Перевод числа из десятичной в троичную симметричную систему счисления

Положительное число A можно разделить с остатком на 3 двумя способами

Первый, традиционный: A / 3 = q (остаток r1, 0 <= r1 < 3)
Второй, сдвинутый: A / 3 = q + 1 (остаток r2 = r1 - 3, -3 <= r2 < 0)

Например: 5 / 3 = 1 (остаток 2) или 5 / 3 = 2 (остаток -1)

Берем исходное число и итеративно делим его на 3.
Если число делится нацело, то на выход записываем 0.
Если число не делится нацело, то выбираем тот вариант
(из вышеприведенных), который дает меньший по модулю остаток.
Остаток записываем на выход.

Code:
#include <iostream>
#include <string>

int main() {
  unsigned a = 32;
  std::string s;

  while (a > 0) {
    unsigned q = a / 3; //--- целочисленного деления
    unsigned r = a % 3; //--- возвращает остаток целочисленного деления

    if (r <= 1) {
      s = (char)(r + '0') + s; //---  по сути: r + 30h - код ASCII символа числа r
      a = q;
    }
     else
    {
      r = 3 - r;
      s = '-' + ((char)(r + '0') + s); //---  r + 30h - код ASCII символа числа r
      a = q + 1;
    }
  }

  std::cout << s << std::endl;
}

_________________
iLavr


30 Mar 2019 09:51
Profile
Novelist

Joined: 21 Jan 2019 04:36
Posts: 32
Reply with quote
Я прошу прощения, если мои соображения окажутся не к месту, но:
почему-бы не воспользоваться статьёй Рамиля Альвареса Хосе, которую можно взять по адресу
http://www.computer-museum.ru/books/set ... res_02.pdf и не перевести число из десятичной в (10-1)-ичную систему? А уж из девятеричной попарно получать разряды троичной записи.

Этот-же принцип и при переводе из троичной в двоичную/восьмеричную/шестнадцатеричную можно использовать. Либо из троички в четверичную, а затем хоть в двоичную (если один разряд четверичной раскладывать в два) либо в шестнадцатеричную (если два разряда четверичной объединять в один). Ну или из троички, попарно объединяя разряды, получить девятеричную, а потом хоть в восьмеричную, хоть в десятичную перевести.


31 Mar 2019 22:24
Profile ICQ
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
kvas wrote:
Я прошу прощения, если мои соображения окажутся не к месту,
Совершенно не к месту... :-?
kvas wrote:
почему-бы не воспользоваться статьёй Рамиля Альвареса Хосе, которую можно взять по адресу
http://www.computer-museum.ru/books/set ... res_02.pdf и не перевести число из десятичной в (10-1)-ичную систему? А уж из девятеричной попарно получать разряды троичной записи....

Потому что, это как вырезать гланды... автогеном... через ж@пу... ©

_________________
iLavr


01 Apr 2019 09:24
Profile
Novelist

Joined: 21 Jan 2019 04:36
Posts: 32
Reply with quote
Lavr wrote:
...а вот иностранцы в анекдоте по ссылке приняли такой подход за признак мастерства :)

Однако, если вернуться к теме перевода в троичную симметричную систему счисления, то вот по этой ссылке предлагают алгоритм и функцию, работающие для любых симметричных СС, и приводят образец её вызова для троичной и пятеричной СС.


02 Apr 2019 07:08
Profile ICQ
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
kvas wrote:
..а вот иностранцы в анекдоте по ссылке приняли такой подход за признак мастерства :)
На то они и иностранцы... но если вас устраивает такой "признак мастерства" - то мне тоже не жалко... :mrgreen:

kvas wrote:
Однако, если вернуться к теме перевода в троичную симметричную систему счисления, то вот по этой ссылке предлагают алгоритм и функцию, работающие для любых симметричных СС, и приводят образец её вызова для троичной и пятеричной СС.

...если вернуться к теме, то поскольку вы предлагаете какие-то алгоритмы ЗДЕСЬ, то не поленитесь,
проверьте их на C++ или C и выложите в этот форум работоспособный вариант.
У посетителей будет возможность сравнить, какой алгоритм лучше, быстрее или компактнее.

Алгоритмов в сети много, многие я просмотрел, но пришел к выводу, что тот, который я запостил
выше, наиболее краток и быстр в данной конкретной ситуации.

_________________
iLavr


05 Apr 2019 09:59
Profile
Novelist

Joined: 31 May 2007 09:23
Posts: 30
Location: Украина
Reply with quote
добавил в свой бинарный калькулятор и троичную систему.
алгоритм пересчета с системы A в систему B ...:
b=0
считывается цифра из a слева-направо.
прибавляется репрезентация цифры в B к b

середина:
считывается следующая цифра из a слева-направо.
b умножается на основание A(10, если из десятичной)
прибавляется репрезентация цифры в B к b.

повторить с середины, пока есть еще разряды.

исходник конкатенирован к бинарным файлам. (win32.exe и linux64)

[вычисления проводятся, в основном, путём копирования строк. поэтому разрядность регистров процессора - не помеха, - чмсло может быть большим. также входное число обрабатывается по разрядам, а не целиком(как при делении)+это дает дополнительную "интерактивность" - программа _не_ ждёт "Enter"]

n- Negative, -
p- Positive, +
o- 0 Nul :)


Attachments:
File comment: калькулятор в бинарную систему+троичную
bi.zip [116.86 KiB]
Downloaded 14 times
09 Apr 2019 10:52
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 36 posts ]  Go to page Previous  1, 2, 3

Who is online

Users browsing this forum: No registered users and 2 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.