Zitat von
Satty67:
Btw: Macht die vorherige Zuweisung auf die lokale Variable CurrentPLZ überhaupt Sinn?
Kann ich nicht sagen. Es erhöht aber die Lesbarkeit und man kann es einfacher debuggen.
So, erst hatte ich meine for-Schleifen zu while-Schleifen gemacht und nach jaenickes Beitrag wieder zurück gebaut, weil er mich doch bestätigt hat. Da wären zum einem die technischen Gründe und dann noch die gefühlten Gründe, wie sie Satty67 erwähnt hat.
Aber einen hätte ich noch:
Delphi-Quellcode:
function GetNextLowerPLZFromList(
var PLZ: Integer; PLZSunHours: TPLZSunHours): Integer;
begin
// Raises EPLZNotInList exception if no lower PLZ can be found
Result := PLZ;
while (
not IsPLZInList(PLZ, PLZSunHours))
and (PLZ <> -1)
do
begin
Dec(PLZ);
Result := PLZ;
end;
if PLZ = -1
then
Raise EPLZNotInList.Create(rsENotInList);
end;
Mit
Delphi-Quellcode:
Type
TPLZSunHours = array[0..4, 0..1] of Integer;
const
PLZSunHours: TPLZSunHours = ((34126, 1200), (34127, 2100), (54123, 1000), (80459, 5210), (90785, 1500));
Ich denke, hier muss man eine while-Schleife nehmen. Aber die Abbruchbedingungen verursachen mir noch Kopfschmerzen. Das sieht irgendwie komisch bzw. umständlich aus.
Zur Aufgabe: Gegeben ist eine zwei dimensionale Liste mit PLZ Zahlen und Sonnenstunden pro Jahr. Nach Eingabe der Postleitzahl sollen die zugehörigen Sonnenstunden ausgegeben werden. Ist die PLZ nicht in der Liste, soll die nächst niedrigere genommen werden. Wird keine PLZ gefunden soll -1 ausgegeben werden. Aus der -1 habe ich eine
Exception gemacht, aber das ist nebensächlich. (Das ist ein Aufgabe aus der Abschlussprüfung für Fachinformatiker. Dort sollte das allerdings nur in Pseudocode gelöst werden.)
Beim Schreiben des Codes habe ich mich versucht an die Regeln für sauberen Code zu halten, wie es in
Clean Code dargestellt wird.