Показать сообщение отдельно
Старый 18.12.2011, 10:18   #6 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от 11Angelav Посмотреть сообщение
Спасибо огромное! До завтра!
Вот, сотворил нечто чудовищное. Но работает:
Код:
Const
 W=['3','4','5','6','7','8','9'];
VAR
 S:String;
 b:Boolean;
 N3,N10,N3_frc_re:Real;
 N3_int,N3_frc,N3_frc0,m,dd10,dd3:LongInt;
 Sign:ShortInt;
 i,N3f_int,N3f_frc,fig:Byte;


BEGIN
 Repeat
  b:=true;
  Write('Enter the number in 3-based system: ');
  Readln(N3);
  STR(N3:0:8,S);
  for i:=1 to length(S) do
   if S[i] in W then
    begin
     Writeln('Wrong input!');
     b:=false;
    end;
 Until b;
 If N3<0 then Sign:=-1 else Sign:=1;
 N3:=Abs(N3);
 N3_int:=Trunc(N3);
 N3_frc_re:=N3-1.0*N3_int;
 m:=1;
 Repeat
  m:=m*10;
  N3_frc:=Round(N3_frc_re*m);
 Until Round(1.0*N3_frc/m*100000000)=Round(N3_frc_re*100000000);
 N10:=0;
 N3_frc0:=N3_frc;
 If N3_int>0 then
  begin
   N3f_int:=Round(Ln(N3_int)/Ln(10)); {Number of figures in integer part
                                       of 3-based number -1}
   For m:=N3f_int downto 1 do
    begin
     dd10:=1;
     for i:=1 to m do dd10:=dd10*10;
     fig:=N3_int div dd10;
     dd3:=1;
     for i:=1 to m do dd3:=dd3*3;
     N10:=N10+fig*dd3;
     N3_int:=N3_int mod dd10;
    end;
   N10:=N10+N3_int;
  end;
 If N3_frc>0 then
  begin
   N3f_frc:=Round(Ln(N3_frc)/Ln(10)); {Number of figures in fractional part
                                       of 3-based number -1}
   For m:=N3f_frc downto 0 do
    begin
     dd10:=1;
     for i:=1 to m do dd10:=dd10*10;
     fig:=N3_frc div dd10;
     dd3:=1;
     for i:=1 to N3f_frc-m+1 do dd3:=dd3*3;
     N10:=N10+1.0*fig/dd3;
     N3_frc:=N3_frc mod dd10;
    end;
  end;
 N10:=N10*Sign;
 Write('N in decimal system is ');
 If N3_frc0=0 then
  Writeln(Round(N10))
 else
  Writeln(N10:0:8);
 Readln;
END.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070