![]() |
Hilfe bei Schleife
Also, ich möchte eine Zahl aus dem Dualen Zahlensystem (sprich Nullen und Einsen) in das Dezimale Zahlensystem umwandeln... irgendwie spuckt meine schleife aba nicht das richtige ergebnis aus
Delphi-Quellcode:
und bitte nicht auf irgendweleche einträge verweisen, die habe ich alle schon durchstöbert und die helfen mir nicht weiter...
procedure TForm1.Button5Click(Sender: TObject);
var dualzahl,faktor,i,dezimalzahl:Integer; begin dezimalzahl:=0; faktor:=1; dualzahl:=strtoint(edtdual.Text); for i:=dualzahl downto 1 do dezimalzahl:=dezimalzahl+faktor*dualzahl; faktor:=faktor*2; edtdezimal.text:=Inttostr(dezimalzahl); end; thx Kermit [edit=Sharky]Delphi-Tags gesetzt. Mfg, Sharky[/edit] |
Re: Hilfe bei Schleife
Hai KermitFrosch,
wenn man sich deinen Sourcode mal richtig formatiert ansieht ;-) bemerkt man das da wohl ein begin-end bei deiner Schleife fehlt. |
Re: Hilfe bei Schleife
Code:
da gibt einet bspw. 1011 ein und deine schleife wird da 1011 mal durchlaufen
dualzahl:=strtoint(edtdual.Text);
for i:=dualzahl downto 1 do da haste noch ein denkfehler! sollte da wohl was mit laenge von edtdual.txt stehen? |
Re: Hilfe bei Schleife
Kann mir mal jemand helfen?
Kann mit einer sagen, was dieses hier genau bewirkt /wie es funzt? Inc(Dezimalzahl, StrToInt(dual[i]) * 1 shl (Length(dual) - i)) ??? |
Re: Hilfe bei Schleife
guck dir mal
![]() |
Re: Hilfe bei Schleife
Das hilft mir aber nicht bei diesem Vorgang weiter
|
Re: Hilfe bei Schleife
Hallo,
wie wäre es damit:
Delphi-Quellcode:
math in uses nicht vergessen
function TForm1.Dual2Dezimal(const DualString: String): LongWord;
var iCnt : Integer; begin Result:=0; For iCnt:=1 to Length(DualString) do Result:=Result+StrToInt(DualString[iCnt])*Round(IntPower(2,Length(DualString)-iCnt)); end; |
Re: Hilfe bei Schleife
Moin Kermit,
Delphi-Quellcode:
dual
Inc(Dezimalzahl, StrToInt(dual[i]) * 1 shl (Length(dual) - i))
ist ein String, der eine Dualzahl (Binärzahl) enthält, so wie in Deinem Editfeld. i ist ein Schleifenzähler, für eine Schleife, die alle Stellen des Strings dual durchgeht. Dezimalzahl muss vor der Schleife auf 0 initialisiert werden, und enthält am Ende den Wert, den die Dualzahl dargestellt hat. StrToInt(dual[i]) ergibt, in Anghängigkeit es Wertes von dual[i] 0 oder 1, so dass auf der linken Seite von shl immer 0 oder 1 steht length(dual) - i sorgt dafür, dass die Anzahl der shl Vorgänge der Wertigkeit der jeweiligen Stelle entspricht. Beispiel: dual := '11001'; geht die Schleife jetzt von 1 bis 5, so ergibt sich beim ersten Durchlauf: StrToInt(dual[i]) = 1. Das ganze *1 ist also 1 length(dual) - i = 5 - 1 = 4 also wird 1 viermal nach links geschoben. Jedes nach links schieben verdoppelt den Wert => 1 shl 4 = 16 Was dem Dezimalwert der höchsten Stelle der Dualzahl entpsricht. Bei der nächsten Stelle wäre das Ergebnis dann also 8, dann zweimal hintereinander 0, und anschliessend 1, weil 1 shl 0 = 1 Ergibt 16 8 1 == 25 Was wiederum der Dezimalwert der Dualzahl 11001 ist. (1*2^4 + 1*2^3 + 0*2^2 + 0*2^1 + 1*2^0) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:02 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