Помощь - Поиск - Пользователи - Календарь
Полная версия: Перевод числа из десятичной с.с. в троичную уравновешенную
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
НУК
Люди подскажите пожалуйста алгоритм перевода целого числа из десятичной с.с. в троичную уравновешенную. и что это за система такая троичная уравновешенная? blink.gif
volvo
... Еще одна разновидность позиционных нумераций - уравновешенные системы счисления. В качестве примера рассмотрим так называемую троичную уравновешенную систему счисления. Ее алфавит состоит из трех (поэтому - "троичная"!) элементов:
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).
НУК
Спасибо большое ! еще бы кто нибудь алгоритм привел перевода было бы вообще замечательно smile.gif
volvo
Вот PDF с сайта http://www.ternary.info/:
Там приведены основные правила работы с троичными системами счисления (в том числе и перевод (10) -> (3))
НУК
попробывал я написать эту программу перевода вот что у меня получилось:

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


но вывоит она очень странный ответ wacko.gif , может кто подскажет в чем дело и заодно как сделать, чтоб и -1 тоже считалось
volvo
Значит, неправильно сделал... Вот это выводит те же ответы, которые записаны в 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 при вводи троичного числа тоже считалась, извеняюсь за свою глупость mega_chok.gif
volvo
Смотря как ты вводишь число в (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.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.