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
Christian 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
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!