Lazarus/Computer-Mathematik
"Computer" heißt wörtlich übersetzt "Rechner" und deshalb wäre es ja jetzt auch Zeit, ein Programm auch einmal etwas ausrechnen zu lassen. Denn Rechnen ist nicht nur etwas für Mathematik-Programme (die manchen von uns vielleicht nur wenig interessieren) sondern vor allem auch etwas, was für Computerspiele gebraucht wird. Das merkt man schon daran, dass viele neue Computerspiele nach immer schnellerer Computer-Hardware und Prozessor-Leistung verlangen.
Zum Rechnen muss das Programm drei Dinge tun:
- Die Zahlen, die verrechnet werden müssen, müssen eingelesen werden (das machen wir jetzt zunächst über die Tastatur; einlesen kann man Werte natürlich auch über die Maus, den Joystick oder Lenkrad und Gaspedal für Autorennspiele).
- Die Zahlen müssen zu einem Ergebnis verrechnet werden.
- Das Ergebnis der Verrechnung muss auf der Benutzeroberfläche ausgegeben werden.
Inhaltsverzeichnis
Arbeiten mit eigenen Variablen
Bisher haben wir nur die Eigenschaften von bestimmten Komponenten geändert bzw. Dinge darin gespeichert, etwa die Beschriftung eines Buttons. Bei komplizierteren Programmen müssen wir aber auch andere Dinge speichern, Dinge die nicht unbedingt jeder gleich sehen muss. Hierfür gibt es so selbst definierte Variablen.
Jede Variable hat drei wichtige Punkte:
- Name: Jede Variable hat einen eindeutigen Namen, über den sie im Programm angesprochen werden kann.
- Typ: Wie schon bei den Eigenschaften von Komponenten haben auch Variablen verschiedene Typen: ganze Zahlen (integer), reelle Zahlen (real oder double), Zeichenketten (string) usw.
- Wert: In der Variablen gespeichert ist zu jeder Zeit ein ganz bestimmter Wert. Bei einer Variable vom Typ integer könnte das z.B. die Zahl 42 sein.
Um dem Computer mitzuteilen, dass es eine Variable zahl vom Typ integer geben soll, muss man die Variable deklarieren. Die Liste der Variablen eines Programms findet sich hinter dem Stichwort var im Programm. Dort ist in unserem Fall bereits die Variable Form1 deklariert. Dies ergänzen wir nun um unsere eigene Variable zahl
var Form1 : TForm1;
zahl : integer;
Wie bei den Eigenschaften auch wird den Variablen im eigentlichen Programmtext zwischen begin und end; ein Wert über den ":="-Operator zugewiesen, etwa
zahl:=42;
Ein anschauliches Bild für die Variablen in einem Computerprogramm ist ein Schubladenschrank in der Küche. Der Wert einer Variable entspräche Inhalt einer solchen Schublade, der Name wäre etwa ein Etikett auf der Schublade. Um den Vergleich -- wenn auch etwas hinkend -- weiterzuführen, könnte der Typ der Variablen soetwas wie ein Schubladeneinsatz sein. Es gibt solche Einsätze für Dessertlöffel, aber z.B. auch für Münzgeld.
Einlesen von Integer-Variablen
Die Anweisung zahl:=42; weist der Variablen einen festen Wert, hier die 42 zu. Häufig braucht man jedoch Variablen, deren Wert vom Benutzer während der Laufzeit des Programms eingegeben werden, etwa über eine TEdit-Komponente. Gibt ein Benutzer über eine solche Kompoente eine Zahl ein, steht sie zunächst als Zeichenkette in der Eigenschaft Text. Aus dieser Zeichenkette z.B. in Edit1.Text muss jetzt eine "richtige" Zahl (z.B. vom Typ integer) werden.
Das besorgt der Befehl StrToInt:
a:=StrToInt(Edit1.Text);
Diese Zeile sorgt dafür, dass der Integer-Variablen a der Wert zugewiesen wird, die der Benutzer in das Edit-Feld Edit1 geschrieben hat.
Rechnen mit Integer-Variablen
Nehmen wir an, wir hätten drei Integer-Variablen, a,b und c. Das Programm soll nun die Summe der Werte in a und b ausrechnen; das Ergebnis soll in der Variablen c gespeichert werden.
Dies erreicht man wieder mit einem Zuweisungsbefehl mit dem stilisierten Pfeil nach links:
c := a+b;
Natürlich gibt es neben der Addition von Integer-Zahlen auch andere Rechenoperationen:
Rechenoperation | Rechenzeichen in der Sprache Pascal |
Beispiel |
---|---|---|
Addition | + | c:=a+b; |
Subtraktion | - | c:=a-b; |
Multiplikation | * | c:=a*b; |
(ganzzahlige) Division | div | c:=a div b; |
Rest der (ganzzahligen) Division | mod | c:=a mod b; |
Die ganzzahlige Division ist die Division, die die meisten von uns aus der Grundschule kennen:
Den Wert "6" würde dann die Rechenoperation 34 div 5 liefern, den Wert "4" die Operation 34 mod 5.
Ausgabe von Integer-Variablen
Bisher steht das Ergebnis nur in der Variable c. Der Benutzer des Programms sieht davon gar nichts. Der Wert muss noch irgendwie auf der Oberfläche erscheinen. Eine Möglichkeit dazu wäre, die Zahl in ein weiteres Edit-Feld zu schreiben:
Edit3.Text:=IntToStr(c);
Hintergrund: Der Inhalt von Edit-Feldern sind Zeichenketten (engl.: string). Damit eine Integer-Variable in einem Edit-Feld angezeigt werden kann, muss sie in einen solchen String umgewandelt werden. Das erledigt der Befehl IntToStr(...).
Das ganze Programm zum Rechnen mit Integer-Zahlen
Das folgende Programm funktioniert, wenn es auf der Oberfläche die Komponenten Edit1, Edit2 und Button1 gibt.
1 unit zahlen_main;
2
3 {$mode objfpc}{$H+}
4
5 interface
6
7 uses
8 Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls;
9
10 type
11
12 { TForm1 }
13
14 TForm1 = class(TForm)
15 Button1: TButton;
16 Edit1: TEdit;
17 Edit2: TEdit;
18 Edit3: TEdit;
19 procedure Button1Click(Sender: TObject);
20 private
21 { private declarations }
22 public
23 { public declarations }
24 end;
25
26 var
27 Form1: TForm1;
28 a : integer; // wir erfinden eine Zahlen-Variable a
29 b : integer; // wir erfinden eine Zahlen-Variable b
30 c : integer; // wir erfinden eine Zahlen-Variable c
31
32 implementation
33
34 { TForm1 }
35
36 procedure TForm1.Button1Click(Sender: TObject);
37 begin
38 a:=StrToInt(Edit1.Text); // belege die Variablen
39 b:=StrToInt(Edit2.Text); // mit den Inhalten der Edit-Felder
40
41 c:=a+b; // Addiere a und b und weise den Wert der Variable c zu
42
43 Edit3.Text:=IntToStr(c);
44
45 end;
46
47 initialization
48 {$I zahlen_main.lrs}
49
50 end.
Arbeiten mit Reellen Zahlen
Das Arbeiten mit reellen Zahlen vom Typ real oder double funktioniert sehr ähnlich, mit ein paar kleinen Unterschieden. Zunächst einmal muss man statt integer natürlich double als Typbezeichnung verwenden.
Statt IntToStr und StrToInt werden hier der Befehl StrToFloat und der sehr mächtige Formatierungsbefehl format verwendet.
Die Zeile
Edit3.Text:=format('%5.2f',[c]);
sorgt dafür, dass die double-Variable c in das Edit-Feld geschrieben wird, dass sie insgesamt 5 Stellen und 2 Nachkommastellen hat.
36 procedure TForm1.Button1Click(Sender: TObject);
37 begin
38 a:=StrToFloat(Edit1.Text); // belege die Variablen
39 b:=StrToFloat(Edit2.Text); // mit den Inhalten der Edit-Felder
40
41 c:=a+b; // Addiere a und b und weise den Wert der Variable c zu
42
43 Edit3.Text:=format('%5.2f',[c]);
44
45 end;
Weitere Rechenoperationen für reelle Zahlen sind:
Rechenoperation | Rechenzeichen in der Sprache Pascal |
---|---|
Quadratwurzel-Funktion | sqrt(x) |
Exponentialfunktion | exp(x) |
Sinus-Funktion | sin(x) |
Cosinus-Funktion | cos(x) |
Tangens | tan(x) |
Natürlicher Logarithmus | ln(x) |
Kaufmännisches Runden | round(x) |
Abrunden auf die nächstkleinere ganze Zahl | trunc(x) |
Neben diesen mathematischen Funktionen gibt es noch jede Menge andere in Lazarus. Um diese jedoch verwenden zu können, muss in der Liste der so genannten Software-Bibliotheken noch die Bibliothek Math angegeben werden:
uses Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls, Math;
Rechenoperation | Funktion in der Sprache Pascal |
---|---|
Umkehrfunktionen von trigonometrischen Funktionen | arcsin(x), arccos(x) |
Logarithmus zur Basis 10 | log10(x) |
Logarithmus zur Basis 2 | log2(x) |
Logarithmus zu beliebiger Basis | logn(basis,x) |
Beliebige Potenz | power(basis,exponent) |
Umrechnung von Bogenmaß nach Gradmaß | radtodeg(x) |
Umrechnung von Gradmaß nach Bogenmaß | degtorad(x) |
Wichtig zu wissen ist bei den trigonometrischen Funktionen, dass sie immer von Angaben im Bogenmaß (statt 360° also ausgehen. Angaben in Gradmaß müssen mit degtorad(x) umgerechnet werden.
Welche Funktionen noch alle in "Math" enthalten sind, findet man unter
http://lazarus-ccr.sourceforge.net/docs/rtl/math/
- Einführung
- Technisches
- Komponenten, Eigenschaften, Ereignisse
- Computer-Mathematik
- Verzweigungen
- Spielen mit dem Zufall
- Schleifen
- Computer-Graphik
- Geschachtelte Verzweigungen und Verzweigungen in Schleifen
- Prozeduren, Funktionen und Bibliotheken
- Felder (Arrays)
- Zeichen (Char) und Zeichenkette (String)
- Dateien
- Graphische Komponenten