Projekt mit
1 €
unterstützen?
So geht das *:


Step 06 - Ein kleiner Taschenrechner

Hier werden wir den Umgang mit Variablen in einem praktischen Beispiel zeigen.

a) Ein Taschenrechner für ganze Zahlen:

  1. Wir starten ein neues Win32-VCL Projekt und ziehen dann 12 Edit-Felder (3*4 für die vier Rechenarten) in das Formular. Wir reihen immer drei mit etwas Abstand nebeneinander an; löschen anschließend alles im Objektinspektor bei der Eigenschaft "Text".
  2. Wir benennen diese Edit-Felder um, indem Sie im Objektinspektor unter "Name" immer das Kürzel "Ed" mit der mit ihm verbundenen Funktion schreiben: Beispiele: EdSummand1, EdMinuend, EdFaktor1, EdDividend....
  3. Nun brauchen wir noch 4 Labels - jeweils zwischen die ersten Zusammengehörenden Edit-Felder und schreiben als "Caption" das zugehörige Rechenzeichen und verfahren genauso wie bei Schritt 2 mit dem Kürzel "Lbl" (Beispiel: lblPlus...)
  4. Dann brauchen wir im Zwischenraum zwischen der Rechnung und dem Ergebnis-Feld jeweils ein Button mit dem Caption "=" und dem Namen zusammengesetzt aus "Btn"+Ergebnistyp (Bsp: "BtnSumme").

    Nun sollte das Formular in etwa so aussehen:



    Die grafische Arbeit ist nun erledigt. Kommen wir nun zum Programmieren:

  5. Per Doppelklick (in der Design-Ansicht) auf BtnSumme gelangen wir zur automatisch erstellten BtnSummeClick-Prozedur, welche ausgeführt wird, wenn wir später auf den Button einmal klicken.
  6. Nun in der Code-Ansicht deklarieren wir zunächst zwei Variablen, die uns als Speicherplätze für Ganzzahlen dienen sollen.
    Hierzu fügen wir zwischen der "procedure"-Zeile und dem "begin" folgendes ein:
    var
        a, b, c : Integer;
    
  7. Alles, was zwischen "begin" und "end;" steht, ist der Code, der später ausgeführt wird.
    Hier Initialisieren wir zunächst die Variablen a und b, indem wir ihnen die in EdSummand1 und EdSummand2 eingegebenen Werte zuweisen.
    Das ":=" ist in Delphi eine Wert-Zuweisung.
    Da EdSummand1 eine Instanz des Objektes TEdit ist, müssen wir auf eine Eigenschafft zugreifen.

    Dies ist nun der Erste Schritt in OOP:
    Das Objekt TEdit hat die Eigenschaft "Text" vom Typ TCaption ( = String). Schreibend sowie auch lesend können wir nun wie folgt darauf zugreifen:
      // schreibend:
      EdSummand1.Text:='Dies ist ein Text';
      
      // lesend (z.b. bei Anzeige einer Meldung soll der Eingegebene Text gezeigt werden):
      ShowMessage(EdSummand1.Text);
    
    Wenn wir dies in unserem Beispiel benutzen wollen, so kommen wir vor eine kleine Hürde:
    Die Variablen a & b sind vom Typ Integer. EdSummand1.Text ist allerdings vom Typ String!
    Lösung: Wir konvertieren den String in einen Integer-Wert mit der Funktion "StrToInt" ;-)
    begin
      a:=StrToInt(EdSummand1.Text);
      // ...
    
    und das gleiche mit dem zweiten Summanden in einer neuen Zeile.
  8. Nun lassen wir ihn mal rechnen, indem wir in einer weiteren neuen Zeile c die Summe aus a und b zuweisen :
      c := a+b;
  9. Nun müssen wir nur noch das Ergebnis (bzw. die Variable c) in EdSumme ausgeben.
    Hierbei ist wieder die Typumwandlung von Integer nach String notwendig.
    Die Funktion hierbei lautet, darauf wärst auch du gekommen, "IntToStr":
      EdSumme.Text := IntToStr(c);
    
  10. Spätestens jetzt sollte man alles in einem Ordner (z.B. Taschenrechner1) abspeichern.
    Projektname: "Tasch1", Unitname: "MainUnit".
  11. Beim Ausführen (grüne "Wiedergabe"-taste in der Symbolleiste oder F9) bemerken wir, dass die Addition perfekt funktioniert.

    Nun wiederholen wir die Schritte von 5 bis 10 entsprechend für die Subtraktion und die Multiplikation.

  12. Die Division ist etwas schwerer.
    Wie man es vielleicht von Excel kennt, kann man sich vorstellen, dass der Divisions-operator ein Slash (/) ist.
    Dies gilt allerdings nicht für Ganzzahlen. Denn da haben wir ja das Problem, dass bei einer Division ein Rest existieren kann.
    Die Operatoren für diese Rechnung lauten DIV und MOD.
    DIV gibt den ganzzahligen Wert der Division zurück (Bsp: 17 DIV 3 ergibt 5).
    MOD gibt den Rest zurück (Bsp: 17 MOD 3 ergibt 2).
    Wir brauchen zudem noch eine zusätzliche Variable d für den Rest.
    Für die Division wiederholen wir also die Schritte 5 bis 7 mit dem weiteren Unterschied, dass wir eine weitere Variable d deklarieren.
    c weisen wir a DIV b zu, und d weisen wir a MOD b zu, jeweils in einer eigenen Zeile.
  13. Nun kommen wir zur Ausgabe des Ergebnisses der Division.
    Hier müssen wir noch zusätzlich den Rest angeben, das wir einfach als verbundene Zeichenkette ausgeben.
    Zeichenketten können mithilfe von Additionszeichen zusammengefügt werden:
      EdQuotient.Text := IntToStr(c) + ' Rest ' + IntToStr(d);
    
  14. Alles abspeichern, starten, testen und fertig ;-)

    Da bei der Division möglicherweise Probleme entstehen können, hier nochmal die ganze procedure:
    procedure TForm1.BtnDivisionClick(Sender: TObject);
    var
      a, b, c, d : Integer;
    begin
      a := StrToInt(EdDivident.Text);
      b := StrToInt(EdDivisor.Text);
      c := a div b;
      d := a mod b;
      EdQuotient.Text := IntToStr(c) +' Rest '+ IntToStr(d);
    end;
    
Download Taschenrechner für Ganzzahlen

 

b) Ein Taschenrechner für reelle Zahlen:

  1. Wir wiederholen die Schritte 1 bis 4 aus Abschnitt a).
    (Man kann auch das Projekt aus a komplett in einen neuen Ordner kopieren, alle unnötigen Dateien löschen (alles bis auf .dpr, .pas, .dfm), die .dpr öffnen, Meldung ignorieren und die entsprechenden Programmteile abändern)
  2. Addition:
    Unterschiede von Schritt a.5 bis a.10:
    Schritt a.5: keine Änderung;
    Bei Schritt a.6 anstatt "Integer", "Real" oder "Double" als Variablen-Typ nehmen;
    Bei Schritt a.7 anstatt "StrToInt", "StrToFloat" benutzen; (diese Funktion wandelt einen String in eine Kommazahl um)
    Schritt a.8: keine Änderung;
    Bei Schritt a.9 anstatt "IntToStr" "FloatToStr" verwenden.
    Schritt a.10: Abspeichern in eigenem Ordner (Wenn nicht schon aus a) kopiert ; z.B. in Ordner "Taschenrechner2")
  3. Schritt b.2 genauso für Subtraktion und Multiplikation.
  4. Bei der Division besteht nun kein Rest mehr, und Schritt 2 kann auch für die Division angewandt werden.
    Als Operator benutzen sie nun den Slash "/".
  5. Alles abspeichern, starten, testen und fertig ;-)

Download Taschenrechner für Real-Werte ;-)

 

Hier noch ein Überblick über die wichtigsten Operatoren:
(a,b,c,i sind vom Typ Integer, mit b ungleich 0; d, e, r vom Typ Real; s, s1..s5 vom Typ String (Inhalt: s1:='abc', s2:='def'....)

Operator Bedeutung Beispiele
+,-,*

Zahlenarithmetik
Anwendung bei Ganz- sowie Kommazahlen

i:=a+b;
c:=(i-1)*a+(b-1);
d:=e*(a+r)*(a-r);
DIV, MOD Division von Ganzzahlen

i:=a div b;
i:=91000 div 1000 mod 60; // = 31
i:= 91000 mod 60 div 1000; // = 0

/ Division von Kommazahlen

i:=a/b; // falsch!
r:=a/b; // richtig!
r:=(a+c)/(d+e)

+ Zusammenführen von Strings

s:=s1+s2; // 'abcdef'
s:=s+s3; // 'abcdefghi'
s:=''; // leerer String.
s:=s2+s3; // 'defghi'
s4:=s1+s+s4; // 'abcdefghijkl'
s:=s4+s5; // 'abcdefghijklmno'

 

Hinweis:

Wenn du eine Ganzzahl (also Integer) nur um eins (1) erhöhen willst, dann kann man eine Methode dazu benutzen: Inc(zahl); . Um das Dekrement zu bilden, also eins runterzuzählen, wird Dec() benutzt. Also wenn die Integer-Variable "zahl" heißt, dann auch wieder: Dec(zahl); einfach in eine eigene Zeile als Anweisung schreiben. Später werden wir uns genauer um "Methoden" kümmern.

Da das Kommentarmodul dieser Seite zur Zeit neu überarbeitet werden muss, sendet bitte alle Fragen, Anregungen oder Probleme mit Betreff zu welchem Thema es sich handelt an folgende Mailadresse:



www.marco-hetzel.de
www.delphi-lernen.de
www.lazarus-lernen.de

© 2006-2019 by Marco Hetzel , last modified 01.11.2018, 11:28

(* Unterstützung dient der Aufrechthaltung laufender Kosten für dieses Projekt.)