![]() |
Problem mit Binärrechner
Ich möchte einen Rechner schreiben, der eine beliebige Zahl in Binärcode umwandelt. Folgenden Code habe ich geschrieben:
Delphi-Quellcode:
Edit1 ist das Editfeld in dem die umzurechnende Zahl steht, Edit2 ist das Feld in dem der Binärcode ausgegeben wird.
var x,y,z, r: integer;
begin edit2.Text:=''; z:=2; x:=StrToInt(edit1.Text); r:=x; if x=1 then edit2.Text:=edit2.text+'1' else if x=0 then edit2.Text:=edit2.text+'0' else begin repeat z:=2; repeat y:=r div z; z:=z*2; until y=1; edit2.Text:=edit2.text+'1'; r:=r mod z; until r=0; while z>2 do begin z:=z div 2; edit2.text:=edit2.text+'0'; end; end; end; Jedoch bleibt das Programm immer hängen (ich nehme an es wiederholt eine Schleife unendlich oft) Hat jemand eine Ahnung was an dem Code falsch ist? schon mal vielen dank im vorraus |
Re: Problem mit Binärrechner
Kann es sein das x von vornerein 0 ist, dann kann y in der schleife nie 1 werden.
Ebenfalls kann es sein dass x 1 ist, dann wird ebenfalls nix draus. Erklärung, r:=x; damit kann r 1 oder 0 sein dann wird: y:=r div 2 dann kann y nie 1 werden PS: Kapier deine Umwandlung ins Binärsystem nicht |
Re: Problem mit Binärrechner
mach mal debuggen setz einen breakpoint und lass das programm laufen
|
Re: Problem mit Binärrechner
Mach doch sowas:
Delphi-Quellcode:
function IntToBin(i: int64): string;
begin result := ''; while i > 0 do begin result := inttostr(ord(odd(i))) + result; i := i shr 1; end; if result = '' then result := '0'; end; procedure TForm1.Button7Click(Sender: TObject); var x, y, z, r: integer; begin edit2.Text := IntToBin(StrToIntDef(Edit1.Text, 0)); end; Ist doch einfacher. Gruß DBR [edit=Admin]Delphi-Tags gesetzt. Künftig bitte selber machen. Danke ;-) Mfg, Daniel[/edit] |
Re: Problem mit Binärrechner
Zitat:
Zitat:
Ist doch einfach. :mrgreen: |
Re: Problem mit Binärrechner
Das
Delphi-Quellcode:
am Anfang kannst du auch weglassen.
result := '';
|
Re: Problem mit Binärrechner
Liste der Anhänge anzeigen (Anzahl: 1)
Auch ich würde eine saubere Trennung von GUI und Funktionen vorziehen. Meine Umwandlungsroutine und die von DBR unterscheiden sich aber geringfügig:
Delphi-Quellcode:
Grüße vom marabu
function CardToDual(c: Cardinal): string;
begin Result := ''; repeat Result := Chr(Ord('0') + Ord(Odd(c))) + Result; c := c shr 1; until c = 0; end; procedure TMainForm.ConvertButtonClick(); begin BinaryEdit.Text := CardToDual(StrToInt(DecimalEdit.Text)); end; |
Re: Problem mit Binärrechner
KarteZuDual? :P
wenn'd "CardinalToDual" schreibst siehts doch gleich schmucker aus </senf> |
Re: Problem mit Binärrechner
Hast Recht - schreibe gerade eine wrapper unit für SysUtils:
Delphi-Quellcode:
Magst du mir nicht ein wenig helfen?
unit SysUtilsTheBarf00sWay;
interface function IntegerToString(i: integer): string; implementation uses SysUtils; function IntegerToString(i: integer): string; begin Result := IntToStr(i); end; end. Grüße nach Berlin marabu |
Re: Problem mit Binärrechner
Vielen Dank für die Hilfe. Ich bin aber leider ein ziemlicher Anfänger un hab deshalb en paar Fragen. Leider kenne ich folgende Befehle nicht un wüsste gerne was sie bewirken:
Chr Ord Odd Shr Wär nett wenn mir da nochmal jemand helfen könnte. Vielen dank schon mal. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:41 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz