Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Hilfe bei Schleife (https://www.delphipraxis.net/18086-hilfe-bei-schleife.html)

KermitFrosch 14. Mär 2004 11:53


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:
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;
und bitte nicht auf irgendweleche einträge verweisen, die habe ich alle schon durchstöbert und die helfen mir nicht weiter...
thx

Kermit

[edit=Sharky]Delphi-Tags gesetzt. Mfg, Sharky[/edit]

Sharky 14. Mär 2004 12:03

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.

DelphiDeveloper 14. Mär 2004 12:06

Re: Hilfe bei Schleife
 
Code:
dualzahl:=strtoint(edtdual.Text);
  for i:=dualzahl downto 1 do
da gibt einet bspw. 1011 ein und deine schleife wird da 1011 mal durchlaufen
da haste noch ein denkfehler!

sollte da wohl was mit laenge von edtdual.txt stehen?

KermitFrosch 14. Mär 2004 21:14

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))

???

dR4g0N 14. Mär 2004 22:16

Re: Hilfe bei Schleife
 
guck dir mal hier die seite an ...

KermitFrosch 15. Mär 2004 12:46

Re: Hilfe bei Schleife
 
Das hilft mir aber nicht bei diesem Vorgang weiter

Jens Schumann 15. Mär 2004 13:39

Re: Hilfe bei Schleife
 
Hallo,
wie wäre es damit:
Delphi-Quellcode:
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;
math in uses nicht vergessen

Christian Seehase 15. Mär 2004 15:55

Re: Hilfe bei Schleife
 
Moin Kermit,


Delphi-Quellcode:
Inc(Dezimalzahl, StrToInt(dual[i]) * 1 shl (Length(dual) - i))
dual
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 21:44 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz