somewhere,Naeel Maqsudov, спасибо за помощь, написал так, но ошибка гшдето в вычислениях перевода из 3 в 10 в последнем разряде целой части и первого в доробной (две ближайшие к запятой цифры):
Код: Выделить всё
program perto2from3;
var cel,k,i:longint;
j,c,j1,i1,k1:integer;
a,x,n,drob,b,l,u,b1,v,l1,chislo10:real;
s:string;
xx1,ost,aa,celcel:integer;
xx,yy,bb,drobdrob:real;
ss,rr,chislo:string;
begin
writeln('enter number:');
readln(x);
cel:=trunc(x);
drob:=x-cel;
a:=cel;
l:=cel;
while a>=1 do
begin
k:=k+1;
a:=a/10;
end;
for i:=1 to k do
begin
j:=k-i;
b:=l/exp((k-i)*ln(10));
c:=trunc(b);
if trunc(b)=1 then begin
u:=u+exp(j*ln(3));
end else begin
if trunc(b)=2 then begin
u:=u+2*exp(j*ln(3));
end;
end;
l:=(b-trunc(b))*(exp(j*ln(10)));
{writeln(i,' ',j,' ',b:7:5,' ',c,' ',u,' ',l:7:5);}
end;
u:=u+1;
writeln('kol-vo razradov drobnoi chasti ravno: ');
readln(k1);
l1:=drob*exp(k1*ln(10));
for i1:=1 to k1 do
begin
j1:=-i1;
b1:=l1/exp((k1-i1)*ln(10));
if trunc(b1)=1 then begin
v:=v+exp(j1*ln(3));
end else begin
if trunc(b1)=2 then begin
v:=v+2*exp(j1*ln(3));
end;
end;
l1:=(b1-trunc(b1))*exp((k1-i1)*ln(10));
end;
chislo10:=u+v;
writeln(chislo10:9:7);
celcel:=trunc(chislo10);
drobdrob:=chislo10-celcel;
rr:='';
ss:='.';
while celcel>0 do
begin
ost:=celcel mod 2;
If ost=0 then rr:='0'+rr else rr:='1'+rr;
celcel:=celcel div 2;
end;
while length(ss)<10 do
begin
yy:=drobdrob*2;
aa:=trunc(yy);
If aa=0 then ss:=ss+'0' else ss:=ss+'1';
drobdrob:=yy-trunc(yy);
end;
chislo:=rr+ss;
writeln('number ',x:9:7,' in 2 c/c is ',chislo:9);
readln;
end.