IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> перевод из 10 с.с. в троичную уравновешенную, можно ли короче это сделать?
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 19
Пол: Мужской
Реальное имя: Игорь

Репутация: -  0  +


это программка перевода из десятичной системы счисления в троичную уравновешенную, но меня смущает её размер. можно ли её реализовать другим путём, чтобы она занимала меньше строк? мне кажется, она должна быть меньше, но я не допираю, куда ещё меньше.


uses crt;
const
n = 18;
procedure converter(var out:string;x:longint);
var str3,d: array [1..n] of longint;
i:integer;
s:longint;
begin
clrscr;
(*Вычисление str3 и d*)
str3[1]:=1;
d[1]:=1;
s:=1;
for i:=2 to n do
begin
str3[i]:=str3[i-1]*3;
d[i]:=s+1;
s:=s+str3[i];
end;
for i:=n downto 1 do
begin
if abs(x)>=d[i] then
if x>0 then
begin
out:=out+'1';
x:=x-s3[i];
end
else
begin
out:=out+'-1';
x:=x+str3[i];
end
else
out:= out+'0';
end;
end;

var str: string;
i:integer;
x: longint;
begin
clrscr;
writeln('Введите целое число в десятичной системе счисления [-193710244..193710244]');
readln(x);
if (x<-193710244) or (x>193710244) then
begin
writeln ('Error');
readln;
halt;
end;
converter(str,x);
writeln('Число в троичной уравновешенной системе счисления: ', str);
readln;
end.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Тут был ? Перевод числа из десятичной с.с. в троичную уравновешенную


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 19
Пол: Мужской
Реальное имя: Игорь

Репутация: -  0  +


до этого не смотрел, но тем не менее тот вариант не работает с отрицательными десятичными числами.
а мой работает. просто подскажите, можно ли его как-нибудь ещё укоротить.

Сообщение отредактировано: /7popok -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


code warrior
****

Группа: Пользователи
Сообщений: 484
Пол: Мужской
Реальное имя: Славен

Репутация: -  8  +


Цитата(/7popok @ 11.02.2007 20:27) *
до этого не смотрел, но тем не менее тот вариант не работает с отрицательными десятичными числами.
а мой работает. просто подскажите, можно ли его как-нибудь ещё укоротить.

Цитата

изменение знака числа на противоположный осуществляется простой заменой всех 1 на 1 и наоборот

тот же код, что привёл volvo, но добавлена проверка на отрицательность. good.gif
Код
var
  n, ost: integer;
  s: string;

plus: string;
plusminus: string;

begin
  write('n = '); readln(n);

  if n >= 0 then begin
     plus := '+';
     plusminus := '+-';
  end else begin
     plus := '-';
      plusminus := '-+';
     n := -n;
  end;

  s := '';
  while n >= 3 do begin
    ost := n mod 3;

    case ost of
      0: s := '0' + s;
      1: s := plus + s;
      2: s := plusminus + s;
    end;

    n := n div 3;
  end;

  case n of
    0: s := '0' + s;
    1: s := plus + s;
    2: s := plusminus + s;
  end;
  writeln('s(3) = ', s);
end.



--------------------
ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 28.09.2020 19:58
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name