Autor Beitrag
flaming|barney
Hält's aus hier
Beiträge: 11



BeitragVerfasst: Fr 05.11.04 11:29 
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?

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1112



BeitragVerfasst: Fr 05.11.04 11:38 
Schreib das Ergebnis mal erst am Ende in Edit2, und andersrum:
ausblenden 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

_________________
Die Antworten auf die 5 häufigsten Fragen:
1. Copy(), Pos(), Length() --- 2. DoubleBuffered:=True; --- 3. Application.ProcessMessages bzw. TThread --- 4. ShellExecute() --- 5. Keine Vergleiche von Real-Typen mit "="!
flaming|barney Threadstarter
Hält's aus hier
Beiträge: 11



BeitragVerfasst: Fr 05.11.04 11:49 
ohh... vielen dank. So klappt es.
Allerdings verstehe ich nicht, warum ich den Teil

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1112



BeitragVerfasst: 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.

_________________
Die Antworten auf die 5 häufigsten Fragen:
1. Copy(), Pos(), Length() --- 2. DoubleBuffered:=True; --- 3. Application.ProcessMessages bzw. TThread --- 4. ShellExecute() --- 5. Keine Vergleiche von Real-Typen mit "="!
flaming|barney Threadstarter
Hält's aus hier
Beiträge: 11



BeitragVerfasst: Fr 05.11.04 11:59 
*vordenkopfschlag*

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