Dezimal in Dualzahlen

Hallo, ich soll ein Programm schrein um Dezimal in Dulzahlen zu konvertieren. Es gibt schöe Anleitungen, nur dass, egal was ich nehme immer nur eins oder eine große Zahl mit anderen Zahlen außer null und eins rauskommen.
Hier der Quelltext:
procedure TForm1.BitBtn1Click(Sender: TObject);
var e,z,a:longint;
begin
e:=strtoint(Edit_dezimal.Text);

repeat
z:= e MOD 2;
e:= e DIV 2;
a:= z + a;
until
e=0;

Edit_dual.Text:=floattostr(a);
end;

wo ist mein Denkfehler?

Ok hab mein Programm verbessert, kommt immer noch nicht hin. Hier das neue Programm:
procedure TForm1.BitBtn1Click(Sender: TObject);
var e,z,a:longint;
begin
e:=strtoint(Edit_dezimal.Text);
a:=0;
repeat
z:= e MOD 2;
e:= e DIV 2;
a:= (z + a)*10;
until
e

Hallo,

wie wär’s, wenn Du das Ergebnis gleich als String berechnest?

Gruß, Niels

Hallo Maxilein,
eine kleine Hilfe:

procedure TForm1.BitBtn1Click(Sender: TObject);
var e,z,a:longint;
begin
e:=strtoint(Edit\_dezimal.Text);
a:=0;
repeat
z:= e MOD 2; // hier ist z=0 oder z=1
e:= e DIV 2;
a:= (z + a)\*10; // hier liegt der Hund begraben :smile:
 // überleg mal:
 // nach dem ersten Durchgang ist a=0 (z=0) oder a=10 (z=1)
 // nach dem zweiten Durchgang ist a=0 (z=0 bei a=0) oder a=10 (z=1 bei a=0) oder a=110 (z=1 bei a=1)
until
e

Manfred
PS: weiter unten eine Lösung aus meiner Bibliothek.
Bitte nach unten scrollen, da Spoiler :smile:


































    
    function dual(x:integer) : string;
     var b : string;
    begin
     b:='';
     repeat
     if x mod 2=0
     then b:='0'+b
     else b:='1'+b;
     x:=x div 2;
     until x=0;
     result:=b;
    end;

müsste man dann nicht einfach durch zehn teilen?

müsste man dann nicht einfach durch zehn teilen?

Was willst Du durch 10 teilen?
Hast Du meine Anmerkungen gelesen?