function copyab(const s:string; const i:integer):string;
begin result:=copy(s,i,length(s)-i+1) end;
function BinInDezVorkomma(s:string;
var r:extended):boolean;
var k:integer;
p:extended;
begin
trim(s);
r:=0;
p:=1;
for k:=length(s) downto 1 do
Begin
if s[k]='1' then r:=r+p else
if s[k]<>'0' then BEgin
result:=false;
exit;
ENd;
p:=p*2;
End;
result:=true;
end;
function BinInDezNachkomma(s:string;
var r:extended):boolean;
//true kein Fehler
var k:integer;
p:extended;
begin
trim(s);
r:=0;
p:=1/2;
for k:=1 to length(s) do Begin
if s[k]='1' then r:=r+p else
if s[k]<>'0' then BEgin
result:=false;
exit;
ENd;
p:=p/2;
End;
result:=true;
end;
function BinInDez(s:string):string;
var n:integer;
a,b:string;
vork,nachk:extended;
korrekt:boolean;
begin
n:=pos('.',s);
if n=0 then n:=pos(',',s);
if n=0 then Begin
korrekt := BinInDezVorkomma(s,vork);
if korrekt then result := floatToStr(vork)
else result := 'Falsche Eingabe';
End else Begin
a:=copy(s,1,n-1);
b:=copyab(s,n+1);
korrekt:=BinInDezVorkomma(a,vork) and
BinInDezNachkomma(b,nachk);
if korrekt then result:=floatToStr(vork+nachk)
else result:='';
End;
end;
function DezInBinVorkomma(s:string):string;
var n:integer;
begin
result:='';
try n:=StrToInt(s) Except result:=''; exit End;
repeat
if n mod 2 =0 then result:='0'+result
else result:='1'+result;
n:=n div 2;
until n=0;
end;
function DezInBinnachkomma(s:string):string;
var r:extended;
n:integer;
begin
r:=StrToFloat('0'+Decimalseparator+s);
result:='';
n:=0;
repeat
inc(n);
r:=2*r;
if r>=1 then Begin
result:=result+'1';
r:=r-1;
End else result:=result+'0';
until (r=0) or (n>64);
end;
function DezInBin(s:string):string;
var n:integer;
a,b:string;
begin
n:=pos('/',s);
if n>0 then Begin //Bruch->Dezimalzahl
a:=copy(s,1,n-1);
b:=copyab(s,n+1);
try s:=FloatToStr(strToFloat(a)/StrToFloat(b));
except result:='Falsche Eingabe' End;
End;
n:=pos('.',s);
if n=0 then n:=pos(',',s);
if n=0 then result:=DezInBinVorkomma(s) else Begin
a:=copy(s,1,n-1);
b:=copyab(s,n+1);
result:=DezInBinVorkomma(a)
+decimalseparator+DezInBinNachkomma(b);
End;
end;
Beispiel :
procedure TForm1.Edit1Change(Sender: TObject);
begin
//if Edit1.focused then exit;
try
Edit2.text := dezInBin(Edit1.text);
except
Edit2.text := 'Falsche Eingabe'
End;
end;
procedure TForm1.Edit2Change(Sender: TObject);
begin
//if Edit2.focused then exit;
try
Edit1.text := BinInDez(Edit2.text);
except
Edit1.Text := 'Falsche Eingabe'
End;
end;
Keine Kommentare:
Kommentar veröffentlichen