Entwickler-Ecke

Algorithmen, Optimierung und Assembler - dezimal- in dualzahlen umrechen


flaming|barney - Fr 05.11.04 11:29
Titel: dezimal- in dualzahlen umrechen
Hi,
Bin Anfänger was das Programmieren angeht und hätte mal eine Frage:

meiner Meinung nach müsste das umrechenen von dezimal- zu dualzahlen doch wie folgt funktionieren:
Wenn man zB 23 als ausgangszahl annimmt, teilt man sie durch 2. Das ergebnis ist 11 rest 1. das heißt, dass die 1 als bestandteil der dualzahl auftauchen muss.
nun teile ich 11 durch 2 und erhalte 5 rest 1. also taucht auch die 2 in der dualzahl auf... usw.

ich habe versucht diesen Algorithmus zu programmieren und es klappt irgendwie nicht so wie ich mir das vorstelle... kann mir jemand sagen, worin der Fehler besteht?


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
var eingabe1: Integer;
var ergebnis: String;
begin
  eingabe1:= StrToInt(edit1.Text);

  if eingabe1=0 then
    edit2.Text:= '0';

    ergebnis:= IntToStr(eingabe1 mod 2);
  repeat
    eingabe1:= eingabe1 div 2;
    edit2.text:= ergebnis + IntToStr(eingabe1 mod 2);

  until eingabe1= 0;
end;
end.



schon mal danke,

barney =)

Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt.


.Chef - Fr 05.11.04 11:38

Schreib das Ergebnis mal erst am Ende in Edit2, und andersrum:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
var 
  eingabe1: Integer;
  ergebnis: String;
begin
  eingabe1:=StrToInt(edit1.Text);
  if eingabe1 = 0 then edit2.Text:='0';
  ergebnis:=IntToStr(eingabe1 mod 2);
  repeat
    eingabe1:=eingabe1 div 2;
    ergebnis:=IntToStr(eingabe1 mod 2)+ergebnis;
  until eingabe1 = 0;
  edit2.text:=ergebnis;
end;


Gruß,
Jörg


flaming|barney - Fr 05.11.04 11:49

ohh... vielen dank. So klappt es.
Allerdings verstehe ich nicht, warum ich den Teil


Quelltext
1:
ergebnis:= ergebnis + IntToStr(eingabe1 mod 2);                    


zu
[/code]
ergebnis:= IntToStr(eingabe1 mod 2) + ergebnis;
[code]

umdrehen muss... oder liegt das daran, dass der compiler von links nach rechts übersetzt?


.Chef - Fr 05.11.04 11:54

:shock: Natürlich von links nach rechts, wir sind doch keine Araber.

Da du bei deiner Methode mit dem Modulo die Dezimalzahl beginnend mit der kleinsten Dualstelle auflöst, schreibst du natürlich auch die kleinste Dualstelle zuerst ins Ergebnis. Folglich musst du alle anderen jeweils davor(!) schreiben.


flaming|barney - Fr 05.11.04 11:59

*vordenkopfschlag*

ok scheine irgendwie etwas durch den wind zu sein...
thx a lot