Projekt Taschenrechner im GK Informatik der Stufe 11:

Version 0

  • Auf einem Formular werden implementiert:
    - 1 Edit-Objekt e_anzeige zur Anzeige der Eingabe und des Ergebnisses
    - 10 Button-Objekte b_1, ... , b_9, b_0 für die Eingabe der Ziffern
    - 1 Button-Objekt b_clear zum Löschen der Anzeige (0 wird angezeigt)
    - 4 Button-Objekte b_plus, b_minus, b_mal und b_durch für die Wahl des Operators
    - 1 Button-Objekt b_gleich zur Ausgabe des Endergebnisses
    - 1 Button-Objekt b_komma für spätere Dezimaleingabe.
    Der Button b_komma soll noch nicht aktiv sein (Eigenschaft enabled auf false setzen!).
    Das Edit-Objekt soll nur anzeigen, keine Angaben annehmen (Eigenschaft ReadOnly).
    Die Caption-Eigenschaft des Formulars f_rechner kann z. B. Mein Taschenrechner sein,
    es soll beim Start in der Mitte des Bildschirms angezeigt werden (Eigenschaft Position).
  • Erzeugen Sie zum Projekt ein Verzeichnis Taschenrechner und speichern Sie dieses Roh-Formular eines Taschenrechners in einem neuen Unterverzeichnis (z.B. RechnerV0) als Unit uRechner und Projekt pRechner ab.
  • Kopieren Sie dieses Unterverzeichnis als neues Unterverzeichnis (z. B. RechnerV1) für die weitere Version 1.

Version 1

  • Öffnen Sie nun im neu erzeugten Unterverzeichnis RechnerV1 das dortige Projekt,
    um es weiter auszubauen:
  • Erstellen Sie erste Methoden für den Taschenrechner:
    Durch Doppelklick auf einen Button wird ein Methodenrumpf erzeugt: z. B.
        
    procedure Tf_rechner.b_1Click (Sender: TObject);
        begin
        end;
  • Füllen Sie diesen Rumpf jeweils mit den notwendigen Anweisungen;
    Es sollen die gedrückten Zahlen erscheinen (nicht nur jeweils 1 Ziffer!),
    Die C-Taste erzeugt wieder die Anzeige '0', danach darf nach neuer Zifferneingabe nicht '01', sondern muss '1' erscheinen.
  • Nach Drücken einer Operatortaste
    - muss die bisher eingegebene Zahl gespeichert werden (globale Variable nutzen:
      hilfsspeicher : Real)
    - muss der Operator gemerkt werden (globale Variable operator : Char)
  • Nach Drücken der '='-Taste muss das Ergebnis ermittelt und angezeigt werden.
  • Testen Sie Ihre Version 1 ausführlich. Mögliche Rechenterme hierzu:
    2 x 3 =  ,  3 - 5 =  ,  4 : 9 =  ,  4 : 0 =  ,  2 x 3 = + 4 = , 2 x 3 + 4 =  ,  2 + 3 x 4 =
  • Implementieren Sie auch zusätzlich Button-Objekte b_quadrat, b_qwurzel und b_potenz.
    Hinweis: Die Funktion SQRT() liefert in Delphi die Quadratwurzel (siehe Delphi-Hilfe).
    Für die Potenz nutzen Sie eine Zählschleife; testen Sie z. B., ob 3 ^ 4 = das korrekte Ergebnis 81 liefert.
    Nach Eingabe von 3 x² sollte sofort  - auch ohne '=' - das Ergebnis 9 erscheinen.

 

Version 2

  • Kopieren Sie das Unterverzeichnis RechnerV0 als neues Unterverzeichnis RechnerV2.
  • Öffnen Sie nun im neu erzeugten Unterverzeichnis RechnerV2 das dortige Projekt,
    um das Rohformular erneut weiter auszubauen.
  • In der bisherigen Version 1 führten Kettenrechnungen meist zu falschen Ergebnissen, da die Punkt-Vor-Strich-Logik nicht beachtet wird: 2 + 3 x 4 = ergibt 20 statt 14.
    Im Unterricht wurde daher über den Einsatz einer globalen Variablen stapel : String diskutiert, die jede gedrückte Taste (Ziffer oder Operator) zwischenspeichert, bis ein weiterer Operator mit niedrigerer Priorität als der gespeicherten, bereits eingegebenen erfasst wird. Auch diese Operatorprioritäten müssen global gespeichert werden in den Variablen alte_prioritaet, neue_prioritaet : Byte (für Zahlen zwischen 0 und 255).
    Strichrechnungs-Operatoren (+ und -) erhalten die Priorität 1, Punktrechnungen die 2.
    Welche Priorität sollte dann das '='-Zeichen erhalten?
  • Im Unterricht wurde an einem Flussdiagramm der Ablauf für jeden einzelnen Tastendruck behandelt. Hier fehlte die detaillierte Darstellung zu
    - Term aus Stapel auslesen und bearbeiten
    - Zahl als Ergebnis einstapeln
    - Zahl aus Stapel auslesen
    Notieren Sie zu diesen Aktionen eigene Flussdiagramme.
    Vergeben Sie für alle Buttons außer der C-Taste zum Ereignis OnClick dieselbe Methode und benennen Sie diese im Objektinspektor um (z. B. zu TastenDruck). Kontrollieren Sie dies im Objektinspektor. Füllen Sie dann die erzeugte Rumpfmethode anhand des Flussdiagrammes.
  • Hier werden als Wiederholungsstrukturen die Zählschleife (FOR...TO...DO...) und die vorprüfende Schleife (WHILE...DO...) einzusetzen sein. Lesen Sie hierzu auch in der Delphi-Hilfe.
  • Um festzustellen, welcher Button gedrückt wurde, dient der Inhalt des Parameters Sender: Er enthält den NAMEN des sendenden Buttons. Dies könnte so genutzt werden:
      IF Sender = b_1 then zeichen := '1';
      IF Sender = b_2 then zeichen := '2';
      ...
      IF Sender = b_plus then zeichen := '+';
      ...
  • Es werden eine Reihe von Hilfsvariablen LOKAL in dieser Methode benötigt.
    Diese werden deshalb IN der Prozedur LOKAL deklariert:
    procedure Tf_rechner.Tastendruck(Sender: TObject);
    var zeichen       : Char;
        neue_zahl     : Boolean;
        operatoren    : SET OF Char;   // Mengen aus Zeichen;
        ziffern       : SET OF Char;   // werden noch festgelegt
        temp          : String;
        op1, op2, erg : Real;
        op            : Char;
        i             : Byte;
    begin
      // Operator- und Ziffern-Mengen festlegen:
      operatoren := ['*','+','-','/'];
      ziffern    := ['0','1','2','3','4','5','6','7','8','9','.'];
      ...
    end;
  • Nur hilfsweise - nachdem Sie es selbst ausreichend versucht haben, können Sie weiter unten eine Rumpfmethode TastenDruck laden. Diese ist an den markierten Stellen zu ergänzen.

 

Download für Schüler:

Download nur für den Lehrer:

© 2004 Ziemke .:. Letzte Aktualisierung am 20. Dezember 2003 durch den WebMaster.