Und um das nochmal an einem Beispiel zu zeigen.
Ein CASE-Statement entspricht praktisch vielen aneinanderhängenden IF-Statements.
Zitat:
Delphi-Quellcode:
if S_zeichen = '+' then
begin
r_erg := (r_Zahl1 + r_Zahl2 + r_zahl3);
end
else
begin
if S_zeichen = '-' then
begin
r_erg := (r_Zahl1 - r_Zahl2 - r_zahl3);
end
else
begin
if S_zeichen = '*' then
begin
r_erg := (r_Zahl1 * r_Zahl2 * r_zahl3);
end
else
begin
if S_zeichen = '/' then
begin
r_erg := (r_Zahl1 / r_Zahl2 / r_zahl3);
end
else
showmessage('Falsches Rechenzeichen');
end;
end;
end;
BEGIN+END braucht man praktisch nur, um "mehrere" Befehle zusammenzufassen.
Steht nur ein Befehl dazwischen, dann kann das auch weg.
Delphi-Quellcode:
if S_zeichen = '+' then
r_erg := (r_Zahl1 + r_Zahl2 + r_zahl3)
else
if S_zeichen = '-' then
r_erg := (r_Zahl1 - r_Zahl2 - r_zahl3)
else
if S_zeichen = '*' then
r_erg := (r_Zahl1 * r_Zahl2 * r_zahl3)
else
if S_zeichen = '/' then
r_erg := (r_Zahl1 / r_Zahl2 / r_zahl3)
else
showmessage('Falsches Rechenzeichen');
Nun noch etwas anders formatiert, womit es eher auffällt, daß die Befehle (r_erg := ...) alle in einer Ebene stehen.
Delphi-Quellcode:
if S_zeichen = '+' then
r_erg := r_Zahl1 + r_Zahl2 + r_zahl3
else if S_zeichen = '-' then
r_erg := r_Zahl1 - r_Zahl2 - r_zahl3
else if S_zeichen = '*' then
r_erg := r_Zahl1 * r_Zahl2 * r_zahl3
else if S_zeichen = '/' then
r_erg := r_Zahl1 / r_Zahl2 / r_zahl3
else
showmessage('Falsches Rechenzeichen');
Tja, und nun wurden nur noch die "zusammenhängenden" IFs durch das CASE ersetzt.
Delphi-Quellcode:
case S_zeichen of
'+': r_erg := r_Zahl1 + r_Zahl2 + r_zahl3;
'-': r_erg := r_Zahl1 - r_Zahl2 - r_zahl3;
'*': r_erg := r_Zahl1 * r_Zahl2 * r_zahl3;
'/': r_erg := r_Zahl1 / r_Zahl2 / r_zahl3;
else ShowMessage('Falsches Rechenzeichen');
end;
In deinem Fall hättest du also deine ganze Funktion durch 2 CASE ersetzen können. (jeweils die zusammengehörenden Rechenoperationen)
Und dann noch ein IF (oder CASE, falls es noch mehr Variablen werden ... nicht nur "2" oder "3").
Wobei du natürlich auch die Variante mit 3 Variablen auch für die mit 2 Variablen nutzen könntest. (dabei muß nur r_zahl3 bei +|- mit 0 und bei *|/ mit 1 gefüllt werden, damit sie mathematisch nicht auffällt)
PS: S_zeichen muß hier natürlich ein Char sein, denn CASE versteht nur ordinale Typen.