Ich habe ein Problem hinsichtlich der Umwandlung von Dual- in Dezimalzahl. Zwar habe ich die richtige Lösung, weiß aber nicht wie man darauf kommt.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35:
| function dezimal(zahl:integer):string; var dez,i,faktor:integer; duzahl:string; begin; duzahl:=inttostr(zahl); dez:=0; faktor:=1; for i:=length(duzahl) downto 1 do begin dez:=dez+faktor*(strtoint(duzahl[i])); faktor:=faktor*2; end; dezimal:=inttostr(dez); end;
procedure TForm1.Button1Click(Sender: TObject); VAR umwandlung:integer; eingabe,berechnung:string; begin eingabe:=Form1.Edit1.text; IF RadioButton1.checked THEN umwandlung:=1 ELSE IF RadioButton2.checked THEN umwandlung:=2 ELSE IF RadioButton3.Checked THEN umwandlung:=3 ELSE IF Radiobutton4.checked THEN umwandlung:=4; CASE umwandlung OF 1:berechnung:=dual(strtoint(eingabe)); 2:berechnung:=hex(strtoint(eingabe)); 3:berechnung:=dezimal(strtoint(eingabe)); 4:berechnung:=hexadezi(eingabe); END;
Edit2.text:=berechnung; end;
end. |
-------------
Im unten gegebenen Hauptprogramm seh ich ja noch durch.
Die Function ist für mich an einigen Stellen aber nicht durchschaubar.
Beispiel: Umwandlung von Dualzahl 1100 (Dezimalzahl wäre also 12)
1. Frage: Wozu genau legt man die Variablen dez und faktor mit 0 bzw. 1 fest?
Dann wenn man der Function folgt, würde man ja für dez=4 erhalten (denn i=4, da Dualzahl 1100 4stellig ist)
Als Faktor würde man den Wert 2 erhalten.
Dann kommt das eigentlich größte Problem:
for i:=length(duzahl) downto 1 do begin
Diese Zählschleife sagt ja eigentlich aus, dass die nachfolgenden Schritte so lange ausgeführt werden sollen, bis i=1 ist. An welcher Stelle aber ist beschrieben, dass i was ja am Anfang den Wert 4 hat, nachfolgend kleiner wird, dass es überhaupt den Wert 1 erreichen kann?
Also wie gesagt, dass das Programm so funktioniert, habe ich schon festgestellt, aber wie man darauf kommt, darin liegt mein Problem. Es wäre schön, wenn mir hier jemand weiterhelfen könnte und sagen könnte wo mein Denkfehler liegt.
Über eine möglichst schnelle Antwort würde ich mich sehr freuen.
Moderiert von
raziel: Delphi-Tags hinzugefügt