Entwickler-Ecke
Algorithmen, Optimierung und Assembler - Dualzahl in Dezimalzahl
Stinke - Di 06.12.05 16:56
Titel: Dualzahl in Dezimalzahl
So ich muss ein programm entwickeln dualzahl in dezimalzahl aber naja ich komm nich weiter :D aber naja seht selber hier ist der quellcode:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| procedure TForm1.ButtondualdeziClick(Sender: TObject); Var dezi:integer; anzahl:integer; position:integer; zeichen:integer; begin dezi:=0; Anzahl:=length(editdual.text); position:=1; while Anzahl=0 do begin dezi:=Zeichen(Position)*2^(anzahl-1); <----- hier macht der nie weiter!!! dec(anzahl); inc(position); dezi:=dezi+dezi end; editdezi.text:=IntToStr(dezi);
end; |
Moderiert von
Christian S.: Delphi-Tags hinzugefügt.
Allesquarks - Di 06.12.05 17:20
Wenn deine Dualzahl kleiner als 32 Bit ist könntest du Bitweise die Bits eines Cardinal setzen (Wenn Ziffer 1=true dann setze Bit 0 usw.), da der ja auch binär codiert ist und anschließend inttostr aufrufen.
Ironwulf - Di 06.12.05 17:26
hy,
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| while Anzahl=0 do begin dezi:=Zeichen(Position)*2^(anzahl-1); <----- hier macht der nie weiter!!! dec(anzahl); inc(position); dezi:=dezi+dezi end; |
also mag sein das ich da jetz falsch lieg aber wenn die länge größer is als null geht der doch niemals in die schleife rein, wenn er die nur solang durchführt wie anzahl 0 ist...
ich würd das mit ner for schleife machen
Delphi-Quelltext
1: 2:
| for i:= 1 to Length(editdual.text) Do bla... |
Allesquarks - Di 06.12.05 17:51
Das Problem warum der da nie weiter geht ist, dass der ^-Operator nur zur Compilierzeit ausgewertet wird, das heißt insbesondere der Exponent muss konstant sein. Zur Laufzeit musst du hierzu eine Funktion aufrufen z.B. EXP() oder Intpower() oder du baust dir die Potenz selbst mit ner Schleife.
Stinke - Mi 07.12.05 17:42
ok dann frag ich mal so!
ich hab ja die anzahl der stellen ermittelt mit dem befehl....
naja und bei z.B. 1011 wären das 4!!!!!
so jetzt will ich die position "1" auswählen d.h. die erste ziffer von den zahlen...
und dann will ich, dass eine andere variable diese 1. zahl speichert und dann
die zahl *2 hoch die (anzahl minus ... [kommt drauf an])
naja und dann will ich dass er beim nächsten durchlauf die 2. position wählt und die ziffer 0 nimmt...
ich hab die befehle bl0oß nich drauf und delphi hilfe kann mir nich heflen
Allesquarks - Mi 07.12.05 18:56
Wie schon gesagt. Du solltest die Tipps auch lesen! Dein Algo sollte funktionieren nur das 2^(anzahl-1) musst du durch eine Exponentialfunktion, die3 ich dir oben genannt habe ersetzen.
Stinke - Do 08.12.05 16:48
hehe habs hinbekommen (etwas unkomplizierter):
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| procedure TForm1.ButtondualdeziClick(Sender: TObject); Var faktor:integer; dezi:integer; laenge:integer; dual:string;
begin Faktor:=1; Dezi:=0; laenge:=length(editdual.text); while laenge>0 do begin dual:=editdual.text; dezi:=StrToInt(dual[laenge])*faktor+dezi; dec(laenge); faktor:=faktor*2; end; editdezi.text:=IntToStr(dezi);
end; |
funktioniert einwandfrei :)
thx an alle die zu diesem thema geschrieben haben
Moderiert von
Christian S.: Delphi-Tags hinzugefügt.
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!