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.