Цитата:
Сообщение от 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.