Ich habe mir mal die Arbeit gemacht und den Code sauber formatiert, damit du siehst, wie du es demnächst auch machen solltest, um Überblick zu behalten
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
function FOctToDec(FWert: string): string;
function FBinToHex(FWert: string): string;
function FDecToBin(FWert: string): string;
var
h, d, b, x, a, y, i: Integer;
c: extended;
s: string;
begin
{ Hexadezimal in Dezimal }
if (Radiogroup1.ItemIndex = 1) and (Radiogroup2.ItemIndex = 0) then
begin
// Umwandlung von h in Integer, Methode mit Dollarzeichen aus Internet erworben.
h := StrToInt('$' + Eingabefeld.Text);
// Ausgabe von h
Ausgabefeld.Text := IntToStr(h);
end;
{ Dezimal in Hexadezimal }
if (Radiogroup1.ItemIndex = 0) and (Radiogroup2.ItemIndex = 1) then
begin
// Umwandlung von d in Integer
d := StrToInt(Eingabefeld.text);
// Ausgabe von d, Methode mit Format(...) aus Internet erworben.
Ausgabefeld.Text := Format('%x', [d]);
end;
{ Dezimal in Binär }
if (Radiogroup1.ItemIndex = 0) and (Radiogroup2.ItemIndex = 2) then
begin
// Löschen Des Textes Im Ausgabefeld, sonst kommt das Ergebnis der darauffolgenden Rechnung dazu
Ausgabefeld.Text := '';
// Umwandlung von b in Integer
b := StrToInt(Eingabefeld.text);
for x:= 1 to 16 do
begin
// Formel für Umrechnung aus Internet erworben, wären nie drauf gekommen.
BinArray[x] := b mod 2;
b := b div 2;
Ausgabefeld.Text := IntToStr(BinArray[x]) + Ausgabefeld.Text;
if b = 0 then
break;
end;
end;
{ Binär in Dezimal }
if (Radiogroup1.ItemIndex = 2) and (Radiogroup2.ItemIndex = 0) then
begin
// Drehen des Eingabestrings
s := ReverseString(Eingabefeld.Text);
// Ermittlung der Länge des Eingabetextes/Eingabestrings
a := Length(s);
// c wird auf 0 deklariert
c := 0;
for y := 1 to a do
begin
c := c + StrToInt(s[y]) * Power(2, (-1 + y));
end;
// Ausgabe von c
Ausgabefeld.Text := FloatToStr(c);
end;
{ Oktal in... }
if Radiogroup1.ItemIndex = 3 then
begin
for i := 1 to Length(Eingabefeld.Text) do
// Eingabe Überprüfen, Bolpruef aus Internet erworben
BolPruef := Eingabefeld.Text[i] in ['0'..'7'];
if BolPruef then
begin
// Umwandlung von Oktal in Dezimal
if Radiogroup1.ItemIndex = 0 then Ausgabefeld.text := FOctToDec(Eingabefeld.Text);
// Erst Umwandlung von Oktal in Dezimal, dann von Dezimal in Binär, und schließlich von Bimär in Hexadezimal
if Radiogroup1.ItemIndex = 1 then Ausgabefeld.text := FBinToHex(FDecToBin(FOctToDec(Eingabefeld.Text)));
// Erst Umwandlung von Oktal in Dezimal, dann von Dezimal in Hexadezimal
if Radiogroup1.ItemIndex = 2 then Ausgabefeld.text := FDecToBin(FOctToDec(Eingabefeld.Text));
if Radiogroup1.ItemIndex = 3 then Ausgabefeld.text := Eingabefeld.Text;
end else
// Fehlermeldung, wenn Inhalt vom Eingabefeld nicht dem Oktalzahlensystem entspricht
Application.Messagebox('Wert nicht Oktal', 'Oktalsystem', MB_OK);
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Eingabefeld.Text := '';
Ausgabefeld.Text := '';
end;
Ist doch schon gleich viel besser lesbar, oder?
[edit]
Es hat sich eingebürgert bzw. ist im Delphi-StyleGuide vorgeschrieben, dass
- Blöcke (alles zwischen begin und end) um zwei Leerzeichen eingerückt werden
- Vor und nach ':=' sowie den Vergleichsoperatoren ('=', '<>', '<=', ...) jeweils ein Leerzeichen gelassen wird.
- Schlüsselwörter durchgängig klein geschrieben werden
- Nach (nicht vor) Kommata, Doppelpunkten und Doppelslashes ein Leerzeichen gelassen wird
- ... und noch einiges mehr, aber das sind die wichtigsten, die reichen, um den Code übersichtlich zu halten.
[edit2]
Übrigens ist in den verschachtelten Funktionen das anführende 'F' sehr verwirrend.
Man hält sie zunächst für Felder (Variablen in Objekten).