Люди подскажите пожалуйста алгоритм перевода целого числа из десятичной с.с. в троичную уравновешенную. и что это за система такая троичная уравновешенная?
... Еще одна разновидность позиционных нумераций - уравновешенные системы счисления. В качестве примера рассмотрим так называемую троичную уравновешенную систему счисления. Ее алфавит состоит из трех (поэтому - "троичная"!) элементов:
A3={1, 0, 1},
где красный цвет использован для обозначения "минус 1". Присутствие такой "nega-единицы" в соответствующем разряде числа означает, что этот разряд учитывается со знаком "минус". Например:
1101(3)=((-1)*3^0+0*3^1+(-1)*3^2+1*3^3)(10)= 17(10)
Уравновешенная система счисления не является лишь "математическим фокусом". С ее помощью удобно представлять числа, соответствующие, в частности, использованию двухчашечных весов, на которых гири, для уравновешивания чашек, учитываются со знаками как "+", так и "-".
К существенному достоинству этой нумерации следует отнести тот факт, что при вычислениях на ее основе отпадает необходимость в операции "вычитания". Действительно, изменение знака числа на противоположный осуществляется простой заменой всех 1 на 1 и наоборот. Скажем, число -17(10) запишется как 1101(3).
Спасибо большое ! еще бы кто нибудь алгоритм привел перевода было бы вообще замечательно
Вот PDF с сайта http://www.ternary.info/:
Там приведены основные правила работы с троичными системами счисления (в том числе и перевод (10) -> (3))
Прикрепленные файлы
troichnaja_arifmetika.rar ( 120.46 килобайт )
Кол-во скачиваний: 919
попробывал я написать эту программу перевода вот что у меня получилось:
var
n,i: integer;
st: string;
k,j,v,code: integer;
sum: real;
begin
writeln('vvedite n');
readln(n);
str(n,st);
j:= 3;
for i:=1 to length(st) do
begin
val(st[i],v,code);
sum:= (k * exp(3*ln(i)));
end;
writeln(sum);
readln;
end
Значит, неправильно сделал... Вот это выводит те же ответы, которые записаны в PDF ("0" = 0, "+" = 1, "-" = -1):
var
n, ost: integer;
s: string;
begin
write('n = '); readln(n);
s := '';
while n >= 3 do begin
ost := n mod 3;
case ost of
0: s := '0' + s;
1: s := '+' + s;
2: s := '+-' + s;
end;
n := n div 3;
end;
case n of
0: s := '0' + s;
1: s := '+' + s;
2: s := '+-' + s;
end;
writeln('s(3) = ', s);
end.
я тут напутал немного мне надо переводить из тоичной уравновешенной в десятичную, вся запара у меня щас в том что я не магу сделать так что бы -1 при вводи троичного числа тоже считалась, извеняюсь за свою глупость
Смотря как ты вводишь число в (3) системе... Если пользоваться "+-0", то вот так оно переводится в (10):
var
s: string;
base, n, i: integer;
begin
write('s(3) = '); readln(s);
base := 1; n := 0;
for i := length(s) downto 1 do begin
case s[i] of
'0': ;
'+': n := n + base;
'-': n := n - base;
end;
base := base * 3;
end;
writeln('n(10) = ', n);
end.