Entwickler-Ecke
Algorithmen, Optimierung und Assembler - Dezimal nach Binär in einer Rekursivfunction
Sotov - Mi 14.06.06 16:55
Titel: Dezimal nach Binär in einer Rekursivfunction
Ich möchte Dezimalzahlen in Binär umwandeln, unzwar mit einer Rekursion. Die Rekursion besteht darin, dass wenn man die Dezimalzahl durch 2 teilt, kommt etweder ein Rest oder eben keins. Wenn ein Rest kommt, dann ist es 1 wenn keins dann 0
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| 117 :2 rest 1 58 :2 rest 0 29 :2 rest 1 14 :2 rest 0 7 :2 rest 1 3 :2 rest 1 1 :2 rest 1 0 :2 rest 0 |
Also Binär ist 117 : 1110101
Nur habe ich ein Problem beim Erstellen der Rekursion. Falls mir jemand helfen könnte, oder sonst irgendwelche Tipps für mich parat hat...
Danke im Voraus
DelphiAnfänger - Mi 14.06.06 17:01
deine rechnug ist falsch!
dezimal: 127
binär: 1111111
binär: 1110101
dezimal: 75
EDIT ich hatte noch ne null drangehängt :oops: (11101010 ist 234)
BenBE - Mi 14.06.06 17:09
@DelphiAnfänger: eine 7-bit-Binärzahl kann nicht größer als 127 sein. Zumal dann nicht, wenn Du so rechnest, wie Du's gezeigt hast. 1110101 = 64 + 32 + 16 + 4 + 1 = 117
Zum Thema Rekursion:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| Function Rekurse(Number: Integer; BitCount: Integer): String; const Digits = '01'; Begin If Bitcount = 0 Then Result := '' else Result := Digits[(Number shr (BitCount - 1)) and 1] + Rekurse(Number and (1 shl BitCount) - 1, Bitcount - 1); end; |
Ist eine von vielen Rekursiven Möglichkeiten ...
Narses - Mi 14.06.06 17:13
Moin!
Mein Vorschlag:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TForm1.Button1Click(Sender: TObject);
function DezToBin(Value: Integer): String; begin if (Value > 1) then Result := DezToBin(Value div 2) +Char( (Value mod 2) +48) else Result := Char( (Value mod 2) +48); end;
begin Edit2.Text := DezToBin(StrToIntDef(Edit1.Text,0)); end; |
cu
Narses
Phantom1 - Mi 14.06.06 17:18
Noch ein Vorschlag ;O)
Delphi-Quelltext
1: 2: 3: 4: 5:
| function DezToBin(Dez: LongInt): string; begin if Dez>0 then Result:=DezToBin(Dez Div 2)+IntToStr(Dez Mod 2); end; |
Narses - Mi 14.06.06 17:20
@
Phantom1:
DezToBin(0) :arrow: :?: :|
Abgesehen davon ist das meine Lösung... ;)
cu
Narses
Sotov - Mi 14.06.06 17:26
Danke für eure Hilfe. Ich versuche jetzt, obwohl eure Vorschläge enthalten sehr viele mir unbekannte Sachen, wie zb DezToBin was wir bestimmt nicht verwenden dürfen, weil wir es noch gar nicht hatten... oder const Digits = '01' oder shr ...
Gibt es nicht eine ganz einfache Lösung?
Narses - Mi 14.06.06 17:30
Moin!
:? Hua... Ganz blutiger Anfänger... ;)
Sotov hat folgendes geschrieben: |
obwohl eure Vorschläge enthalten sehr viele mir unbekannte Sachen, wie zb DezToBin |
Öhm, das ist die Funktion, die du schreiben wolltest, das ist also beabsichtigt neu. :D
Sotov hat folgendes geschrieben: |
weil wir es noch gar nicht hatten...
[...]
Gibt es nicht eine ganz einfache Lösung? |
Mach mal ein paar Anfänger-Tutorials oder frag deinen Lehrer und pass mal besser im Unterricht auf. ;) Wenn ihr schon bei Rekursion seid, dann hast du nicht erst seit gestern Informatik. :mrgreen: Oder? ;)
cu
Narses
Sotov - Mi 14.06.06 17:36
Leider habe ich einen behinderten Lehrer, der absolut gar nix erklärt und eigentlich nur will das wir uns selbder überlegen. Aber wenn keine Grundkenntnise vorhanden sind, können wir uns gar nichts so richtig alles selber überlegen.
Ich habe Informatik seit einen halben Jahr und wir sind schon bei Rekursion!
Nun gut. Ich versuche es jetzt! Obwohl ich glaube nicht, dass es klappt!
Vielen Dank für die Hilfe!
GTA-Place - So 25.06.06 08:51
Scheint eine sehr soziale Schule zu sein, wenn die sogar behinderte Lehrer einstellen :roll: .
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!