athena.gif (7242 Byte)

 PÜ 5: Prämienberechnung
    

Zielstellung und Szenario:

In den vergangenen Jahren mutierte die Struktogrammdarstellung oft zum Fetisch, indem die Schüler angehalten wurden, doch jede auch noch so profane Problemlösung zunächst als Struktogramm "aufzumalen".
Deren Gegenreaktion: Oft wurde der Algorithmus gleich in Programmiersprache ausformuliert und erst im Nachgang ein liebloses Struktogramm dazu hingezeichnet - eine den Algorithmiker schmerzende Vorgehensweise.

Das nachfolgende Problem ist ausreichend einfach für den Unterricht, aber kompliziert genug, um die meisten "Sofortprogrammierer" an ihre Grenzen zu führen. Ergo soll es die Zweckmäßigkeit von Struktogrammen bewusst machen und gleichzeitig den sicheren Umgang mit ihnen festigen.

Problemformulierung:

Unter folgenden Bedingungen zahlt ein Betrieb an seine Mitarbeiter eine Jahresendprämie:
Beträgt das Betriebszugehörigkeit weniger als ein Jahr, wird keine Prämie gezahlt;
beträgt sie mindestens ein Jahr aber weniger als 6 Jahre, erhält man 200 DM.
Bei einer Betriebszugehörigkeit von sechs oder mehr Jahren bekommt man 80 DM dazu und für jedes geleistete Dienstjahr 20 DM.
Beträgt im letzteren Falle das Lebensalter 50 oder mehr Jahre, so wird nochmals eine Zulage von DM 50 gezahlt.

Problemanalyse (Vorbetrachtung)

Betriebszu-
gehörigkeit
Lebensalter Prämie
  3 Jahre 28 ?
  7 Jahre 38 ?
12 Jahre 48 ?
20 Jahre 58 ?
Zunächst wird diese Tabelle angeschrieben, und nach vermutlichen Lösungen für die einzelnen Fälle gefragt. Mit ziemlicher Sicherheit kommen für jeden Fall verschiedene Antworten zustande, die mit Fragezeichen versehen und notiert werden.
Nach Entwicklung des Struktogramms werden die Antworten verifiziert und nach der Programmerstellung noch einmal.
Der Effekt ist meist verblüffend ... ;-)

Lösungsalgorithmus als Struktogramm:

praemie1.jpg (30519 Byte)
Variablen:

  bez.: Betriebszugehörigkeit,
  la:  Lebensalter,
  p:   Prämie.

Anmerkung:
Zur inhaltlich korrekten Darstellung der obigen Formulierungen in Struktogrammform sind mehrere (vielleicht weitaus elegantere) Lösungen denkbar.
Im vorliegenden Fall wurde bewusst eine abfolgegleiche grafische Repräsentation des verbalen Algorithmus gewählt, um den Einsteiger die inhaltliche Übereinstimmung beider Darstellungsformen besser sichtbar zu machen.

Formular:

praemie2.jpg (25324 Byte)Um sukzessive mit weiteren Komponenten vertraut zu machen, wurden hier zwei RadioButtons, angeordnet in einer GroupBox, zur "Eingabe" des Lebensalters gewählt.
Da der Algorithmus nicht das genaue Alter benötigt, scheint diese Variante zur Erhöhung der Nutzerfreundlichkeit recht sinnvoll, reicht doch nunmehr ein Mausklick zur Eingabe der Altersstufe aus.
Bei der Programmierung der Ereignisbehandlungsroutine müssen diese neuen Eingabekomponenten natürlich berücksichtigt werden.

Prozedur zur Berechnung

procedure TForm1.Button1Click(Sender: TObject);
  var bez, p: integer;
  begin
    bez := StrToInt(Edit1.Text);
    if bez < 1 then
      p := 0
    else begin
      p := 200;
      if bez >= 6 then begin
        p := p + 80 + bez * 20;
        {Falls Lebensalter >= 50}
        if RadioButton2.Checked then
          p := p + 50;
      end;{of if}
    end;{of else}
    Edit2.Text := IntToStr(p);
  end;