program zahlenumwandlung; { rekursive Spielereien ... }
uses crt;

procedure pdezidual(dezimal : integer);
var rest : integer;
begin
     if dezimal = 0 then exit
else begin
     pdezidual(dezimal div 2);
     write(dezimal mod 2);
end;
end;

function fdezdual(dezimal : integer) : string;
var s1 : string[1];

begin
   fdezdual:='';
   if dezimal = 0 then exit
      else begin
               str(dezimal mod 2,s1);
               fdezdual:=fdezdual(dezimal div 2)+s1;
   end;
end;


function fdualdezi(dual :string) : longint;
var dezi,faktor,i : longint;
begin
   dezi:=0;
   faktor:=1;
   for i:=length(dual) downto 1 do
       begin
           if dual[i] = '1' then dezi := dezi + faktor;
           faktor:=faktor*2;
       end;
       fdualdezi := dezi;
end;


function frdualdezi(dual : string) : longint;
var zahl,i : longint;
err : integer;

function potenz(basis,expo : longint) : longint;
    begin
        if expo=0 then potenz:=1 else potenz:=basis * potenz(basis,expo-1);
    end;

begin
    frdualdezi:=0;
    if dual='' then exit
         else begin
                  val(dual[1],zahl,err);
                  frdualdezi :=zahl*potenz(2,length(dual)-1)+frdualdezi(copy(dual,2,length(dual)))
               end;
    end;

(* Hauptprogramm *)
begin
    clrscr;
    pdezidual(23);writeln;
    writeln(fdezdual(23));writeln;
    writeln(fdualdezi('10111'));
    writeln(frdualdezi('10111')); readln;
end.