Jüdische Sagen und Lazarus/Computer-Mathematik: Unterschied zwischen den Seiten

Aus ZUM-Unterrichten
(Unterschied zwischen Seiten)
 
(formatiert)
Markierung: 2017-Quelltext-Bearbeitung
 
Zeile 1: Zeile 1:
'''Jüdische Sagen''' aus {{wpd|Talmud}}, {{wpd|Midrasch}} und {{wpd|Aggada}} eröffnen einerseits ein tieferes Verständnis des [[Judentum]]s, andererseits machen sie noch deutlicher, dass die biblischen Schriften vor Abschluss des Kanons auch lebendige Überlieferung waren.
"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.


== Sagensammlungen ==
* Bernhard Kuttner : Jüdische Sagen und Legenden. Für jung und alt gesammelt und wiedererzählt, Arani Verlag 1998 ISBN 978-3760586748
* {{wpd|Micha Josef bin Gorion}}: Die Sagen der Juden, 1913 - 1927
:Bin Gorion hat seine Sagen weitgehend der lange Zeit rein mündlichen Überlieferung, der Aggada, und anderer {{wpde|Rabbinische Literatur|rabbinischer Literatur}} entnommen.
* Daniel Ehrmann (Hrsg.): Sagen und Legenden aus Talmud und Midrasch, Wien 1880


== Kurze Textbeispiele ==
Zum Rechnen muss das Programm drei Dinge tun:
===Erschaffung des Menschen===
*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).
"Der Herr sprach zu der Schrift: Wir wollen einen Menschen machen, daß er unserem Bilde gleiche. Und die Schrift erwiderte dem Herrn: Herr der Welten! Dein ist das All, aber der Mensch, den du schaffen willst, seiner Tage werden nicht viele sein auf Erden, und voll Gram wird sein Herz sein, und gewisslich wird er der Sünde verfallen; so du nun nicht mit ihm Langmut übest, ist es wohl besser, er käme gar nicht auf die Welt. Da sprach der Herr: Heiße ich denn umsonst ein Gott, der Langmut übt und barmherzig ist?
*Die Zahlen müssen zu einem Ergebnis verrechnet werden.
Und Gott fing an, die Erde zu sammeln für Adams Leib an einem reinen Orte geschah dies, der Nabel der Welt war es; und er formete ihn und richtete ihn zu, aber es war noch kein Odem und keine Seele in dem Menschen. Was tat der Herr? Er blies ihm einen lebendigen Odem ein und gab ihm eine Seele [...]
*Das Ergebnis der Verrechnung muss auf der Benutzeroberfläche ausgegeben werden.
Der Mensch stand da und war herrlich anzuschauen als ein Bild Gottes; da sahen ihn die Geschöpfe und fürchteten sich vor ihm, denn sie dachten, dies wäre ihr Schöpfer. Und sie kamen alle zu ihm und bückten sich vor ihm. Da sprach der Mensch zu ihnen: Ihr seid zu mir gekommen und wollet euch vor mir bücken, wohlauf, lasset uns zusammen gehen, mich und euch, wir wollen gehen und uns in Stolz und Stärke kleiden und über uns zum König machen, der uns alle schuf, gleich wie ein Volk sich einen zum König macht. Denn wahrlich immer ruft das Volk sich einen König aus, nicht aber ruft der König selbst sich zum König aus.  
Und Adam schritt voran und rief zuerst den Herrn als König aus, und nach ihm kamen alle Geschöpfe und schrien: Der Herr ist König und herrlich geschmückt!"


"Adam, der erste Mensch war auch Gottes erste Schöpfung. Gott schuf die ganze Welt durch sein Wort, aber den Menschen machte er mit seinen eigenen Händen.
== Arbeiten mit eigenen Variablen ==
Am Anfang reichte Adam von der Erde bis zum Himmel. Als ihn aber die Heerscharen erblickten, erschauerten sie in Furcht [...]"


"Als der Herr an das Erschaffen der Welt ging, war sein erstes, daß er den Menschen machte, aber er formte zuerst nur seinen Leib. Schon war er dabei, ihm seinen Odem einzublasen, als er zu sich selber sprach: Wenn ich den Menschen jetzt lebendig vor mich hinstelle, so wird man ihn als Mitschöpfer der Welt ansehen. Ich will ihn noch als Erdklumpen daliegen lassen, bis ich alles erschaffen habe. [...]"
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.  


"Von den Menschen ist nur einer erschaffen worden. Warum denn nur einer? Auf daß die Gerechten nicht sagen sollten: Wir sind Kinder eines Gerechten; und auf dass die Gottlosen nicht sagen sollten: Wir sind Kinder eines Gottlosen, [...]"
Jede Variable hat drei wichtige Punkte:


"Der Herr offenbarte ihnen [den Heerscharen] nur, daß Gerechte von dem Menschen herkommen würden, er sagte ihnen aber nicht, daß auch Böse von ihm herkommen würden. Hätte er's ihnen verraten, so wäre vom Reich der Strenge die Erschaffung des Menschen nicht zugelassen worden."
* '''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.


"Der Herr verlieh Adam - so lesen wir - eine Übermacht, die ewig währen sollte, und wies ihm einen Raum zu, der inwendiger war denn der, darin die Engel saßen. Als aber Adam den Willen des Herrn brach und dem Willen der Schlange folgte, veränderte der Herr sein Antlitz und ließ ihn fahren. Wie er ihn jedoch von sich fortschickte, fing der Herr an zu klagen über ihn und sprach: War doch der Mensch wie unser eins, wie ein einziger in der Welt!"


"Es war Adams Leib aus Babylons Erde genommen, sein Kopf war aus der des Landes Israel, seine Glieder waren aus der Erde aller übrigen Länder gemacht.  
Um dem Computer mitzuteilen, dass es eine Variable <tt>zahl</tt> vom Typ <tt>integer</tt> geben soll, muss man die Variable ''deklarieren''.  Die Liste der Variablen eines Programms findet sich hinter dem Stichwort <tt>var</tt> im Programm. Dort ist in unserem Fall bereits die Variable Form1 deklariert. Dies ergänzen wir nun um unsere eigene Variable <tt>zahl</tt>
Der Herr faßte Adam bei der Hand und führte ihn duch die Welt und sprach zu ihm: Schau, hie ist ein Acker zu bauen, hie ist ein Feld zu säen.
Jedes Land, so Adam darüber bestimmte, daß es besetzt werde, ward auch besetzt; jedes Land aber, das Adam nicht zum Wohlstand bestimmte, blieb unbewohnt.
Man sagt, die Palmenwälder Babylons seien die Urwälder aus der Zeit Adams her."


"Der Herr vertrieb Adam aus dem Garten Eden und lagerte davor die Cherubim mit dem bloßen hauenden Schwert, zu bewahren den Weg zum Baum des Lebens."
<source highlight="2" lang="pascal">
var Form1 : TForm1;
    zahl : integer;
</source>


===Entwicklung der Heilkunst===
Wie bei den Eigenschaften auch wird den Variablen im eigentlichen Programmtext zwischen <tt>begin</tt> und <tt>end;</tt> ein Wert über den ":="-Operator zugewiesen, etwa
"Die Weisen Mazedoniens waren die ersten, welche die Heilkunst ausübten, [...] und als Asklepios, einer der Weisen Mazedoniens, aufstand, zog er im Lande umher und mit ihm vierzig Mann von den Schriftkennern, welche alle in den niedergeschriebenen Büchern Bescheide wußten; sie wanderten durch das Inderland nach dem Lande, das jenseits Eden gen Morgen lag, und dort eine Spur vom Baume des Lebens aufzufinden, wodurch ihr Ruhm größer würde, denn der aller Weisen im Lande.
<source lang="pascal">
Und es geschah, als sie an diesen Ort kamen, da fanden sie auch die heilbringenden Gewächse und auch den Baum des Lebens; wie sie aber die Hand ausstreckten, um davon zu nehmen, da zückte der Herr die Flamme des zweischneidigen Schwertes über sie, und sie loheten alle auf in den Funken des Blitzes, und keiner von ihnen entkam.
zahl:=42;
So ging die Heilkunst den Ärzten verloren, und es war ein Stillstand in der Heilkunde sechshundertdreißig Jahre lang, bis dann der König Arthasasta kam. In seinen Tagen war ein sehr weiser und verständiger Mann, der in den Büchern der Heilkunde sich auskannte [...] namens Hippokrates der Mazedonier; auch kamen dazu mal anderer Völker Weise wie Asaph der Judäer, Dioskorides der Baalathäer, Galenos, der Kaphtorite und noch viele andere Weise; die brachten die Heilkunst wieder zu Ehren, daß sie noch heutigen Tages besteht."
</source>


===Mose===
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.
"Mose [...] trat die Herrschaft über das Volk der Mohren an. Siebenundzwanzig Jahre war er damals alt, und er regierte über das Land vierzig Jahre. Der Herr ließ ihn Gnade und Wohlgefallen finden in den Augen aller seiner Untertanen, und es herrschte eitel Güte zwischen Mose und Gott, zwischen Mose und seinem Volk."<ref>Nach dieser Darstellung wird Mose König in {{wpde|Reich_von_Kusch|Kusch}} und heiratet eine Kuschitin ({{B|Num|12|1}}). Weil er aber, um Gott zu gefallen, nicht zusammen mit ihr schläft, ruft sie nach vierzig Jahren ihr Volk dazu auf, ihn abzusetzen. Das tun sie auch, entlassen ihn aber ehrenvoll und mit vielen Abschiedsgeschenken. [http://www.michael-klonovsky.de/content/view/41/42/ Gab es Mose?],[http://www.geo.de/GEO/kultur/geschichte/53.html War Moses ein Ägypter?] vgl. Wikipedia: {{wpd|Mose}} und {{wpd|Amenmesse}}</ref>
(bin Gorion: Die Sagen der Juden)


===Fußnoten===
<small><references/></small>


== Unterrichtsmaterial ==
=== Einlesen von Integer-Variablen ===
[http://www.lpb-bw.de/publikationen/ghettos/b04.htm Text und Aufgabenstellung zur Sage:''Wie der Golem die Juden beschützte'']
== Siehe auch ==
[[Judentum]]


[[Kategorie:Judentum]]
Die Anweisung <tt>zahl:=42;</tt> 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 <tt>Text</tt>. Aus dieser Zeichenkette z.B. in <tt>Edit1.Text</tt> muss jetzt eine "richtige" Zahl (z.B. vom Typ <tt>integer</tt>) werden.
[[Kategorie:Literatur]]
 
Das besorgt der Befehl <tt>StrToInt</tt>:
<source lang="pascal">
a:=StrToInt(Edit1.Text);
</source>
 
Diese Zeile sorgt dafür, dass der Integer-Variablen <tt>a</tt> der Wert zugewiesen wird, die der Benutzer in das Edit-Feld <tt>Edit1</tt> geschrieben hat.
 
=== Rechnen mit Integer-Variablen ===
Nehmen wir an, wir hätten drei Integer-Variablen, <tt>a</tt>,<tt>b</tt> und <tt>c</tt>. Das Programm soll nun die Summe der Werte in <tt>a</tt> und <tt>b</tt> ausrechnen; das Ergebnis soll in der Variablen <tt>c</tt> gespeichert werden.
 
Dies erreicht man wieder mit einem Zuweisungsbefehl mit dem stilisierten Pfeil nach links:
<source lang="pascal">
c := a+b;
</source>
 
Natürlich gibt es neben der Addition von Integer-Zahlen auch andere Rechenoperationen:
 
{| class ="wikitable toptextcells"
! Rechenoperation
! Rechenzeichen <br />in der Sprache Pascal
! Beispiel
|-
| Addition || <nowiki>+</nowiki> || c:=a+b;
|-
| Subtraktion || <nowiki>-</nowiki> || c:=a-b;
|-
| Multiplikation || <nowiki>*</nowiki> || c:=a*b;
|-
| (ganzzahlige) Division|| <nowiki>div</nowiki> || c:=a div b;
|-
| Rest der (ganzzahligen) Division|| <nowiki>mod</nowiki> || c:=a mod b;
|}
 
Die ganzzahlige Division ist die Division, die die meisten von uns aus der Grundschule kennen:
 
<math>34 : 5 = 6 \text{ Rest } 4</math>
 
Den Wert "6" würde dann die Rechenoperation <tt>34 div 5</tt> liefern, den Wert "4" die Operation <tt>34 mod 5</tt>.
 
=== Ausgabe von Integer-Variablen ===
 
Bisher steht das Ergebnis nur in der Variable <tt>c</tt>. 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:
 
<source lang="pascal">
Edit3.Text:=IntToStr(c);
</source>
 
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 <tt>IntToStr(...)</tt>.
 
=== Das ganze Programm zum Rechnen mit Integer-Zahlen ===
Das folgende Programm funktioniert, wenn es auf der Oberfläche die Komponenten <tt>Edit1</tt>, <tt>Edit2</tt> und <tt>Button1</tt> gibt.
<source  line highlight="28-30,36-45" lang="pascal">
unit zahlen_main;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  Form1: TForm1;
  a : integer;  // wir erfinden eine Zahlen-Variable a
  b : integer;  // wir erfinden eine Zahlen-Variable b
  c : integer;  // wir erfinden eine Zahlen-Variable c
 
implementation
 
{ TForm1 }
 
procedure TForm1.Button1Click(Sender: TObject);
begin
a:=StrToInt(Edit1.Text);  // belege die Variablen
b:=StrToInt(Edit2.Text);  // mit den Inhalten der Edit-Felder
 
c:=a+b; // Addiere a und b und weise den Wert der Variable c zu
 
Edit3.Text:=IntToStr(c);
 
end;
 
initialization
  {$I zahlen_main.lrs}
 
end.
</source>
 
==Arbeiten mit Reellen Zahlen==
Das Arbeiten mit reellen Zahlen vom Typ <tt>real</tt> oder <tt>double</tt> funktioniert sehr ähnlich, mit ein paar kleinen Unterschieden. Zunächst einmal muss man statt <tt>integer</tt> natürlich <tt>double</tt> als Typbezeichnung verwenden.
 
Statt <tt>IntToStr</tt> und <tt>StrToInt</tt> werden hier der Befehl <tt>StrToFloat</tt> und der sehr mächtige Formatierungsbefehl <tt>format</tt> verwendet.
 
Die Zeile
<source lang="pascal">
Edit3.Text:=format('%5.2f',[c]);
</source>
sorgt dafür, dass die double-Variable <tt>c</tt> in das Edit-Feld geschrieben wird, dass sie insgesamt 5 Stellen und 2 Nachkommastellen hat.
 
<source  start=36 line highlight="1-14" lang="pascal">
procedure TForm1.Button1Click(Sender: TObject);
begin
a:=StrToFloat(Edit1.Text);  // belege die Variablen
b:=StrToFloat(Edit2.Text);  // mit den Inhalten der Edit-Felder
 
c:=a+b; // Addiere a und b und weise den Wert der Variable c zu
 
Edit3.Text:=format('%5.2f',[c]);
 
end;</source>
 
 
Weitere Rechenoperationen für reelle Zahlen sind:
{| class ="wikitable toptextcells"
! Rechenoperation
! Rechenzeichen <br />in der Sprache Pascal
|-
| Quadratwurzel-Funktion|| <nowiki>sqrt(x)</nowiki>
|-
| Exponentialfunktion|| <nowiki>exp(x)</nowiki>
|-
| Sinus-Funktion|| <nowiki>sin(x)</nowiki>
|-
| Cosinus-Funktion|| <nowiki>cos(x)</nowiki>
|-
| Tangens|| <nowiki>tan(x)</nowiki>
|-
| Natürlicher Logarithmus|| <nowiki>ln(x)</nowiki>
|-
| Kaufmännisches Runden|| <nowiki>round(x)</nowiki>
|-
| Abrunden auf die nächstkleinere ganze Zahl|| <nowiki>trunc(x)</nowiki>
|}
 
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 <tt>Math</tt> angegeben werden:
 
<source lang="pascal">
uses Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls, Math;
</source>
 
{| class ="wikitable toptextcells"
! Rechenoperation
! Funktion <br />in der Sprache Pascal
|-
| Umkehrfunktionen von trigonometrischen Funktionen || <nowiki>arcsin(x), arccos(x)</nowiki>
|-
| Logarithmus zur Basis 10 || <nowiki>log10(x)</nowiki>
|-
| Logarithmus zur Basis 2 || <nowiki>log2(x)</nowiki>
|-
| Logarithmus zu beliebiger Basis  || <nowiki>logn(basis,x)</nowiki>
|-
| Beliebige Potenz || <nowiki>power(basis,exponent)</nowiki>
|-
| Umrechnung von Bogenmaß nach Gradmaß|| <nowiki>radtodeg(x)</nowiki>
|-
| Umrechnung von Gradmaß nach Bogenmaß|| <nowiki>degtorad(x)</nowiki>
|}
 
Wichtig zu wissen ist bei den trigonometrischen Funktionen, dass sie immer von Angaben im Bogenmaß (statt 360° also <math> 2\pi</math> ausgehen. Angaben in Gradmaß müssen mit <tt>degtorad(x)</tt> umgerechnet werden.
 
 
Welche Funktionen noch alle in "Math" enthalten sind, findet man unter <br />
http://lazarus-ccr.sourceforge.net/docs/rtl/math/
 
{{Aufgabe|
#'''Wirtschaft: Handwerk hat goldenen Boden'''<br>Malermeister Klecksel muss zur Berechnung des ungefähren Verbrauchs an Farbe nach Angabe von Höhe, Breite und Länge eines Raums wissen <br /> a) Welche Fläche die Wände haben (Fenster spielen erst mal keine Rolle)<br /> b) Welche Fläche die Decke hat (wird manchmal in einer anderen Farbe gestrichen)<br />Entwickle eine geeignete komfortable Software!
#'''Wirtschaft: Mehrwertsteuer'''<br>Schreibe ein Programm, das für einen eingegebenen Betrag die Mehrwertsteuer berechnet und außerdem den Betrag zuzüglich Mehrwertsteuer. Den aktuellen Mehrwertsteuersatz findet man wahrscheinlich im Internet. Der Wert sollte kaufmännisch auf zwei Nachkommastellen gerundet sein.
#'''Mathematik: Lineare Funktionen'''<br>Eine lineare Funktion hat die Funktionsgleichung <math>f(x)=m \cdot x + n</math>. Schreibe ein Programm, bei dem man m, n und x eingeben kann und den Funktionswert erhält.
#'''Mathematik: Kompliziertere Funktionen'''<br>Schreibe ein Programm, das nach der Eingabe des Wertes für den Wert des Polynoms <math>x^2-8x+5</math> berechnet.
#'''Mathematik: Geradensteigung aus zwei Punkten'''<br>In Klasse 9 lernt man, wie man aus zwei Punkten die Steigung einer Gerade durch diese beiden Punkte berechnet. <br />Schreibe ein Programm für einen Freund aus der 9. Klasse, der seine Hausaufgaben „kontrollieren“ will.<br />Zur Erinnerung: <math>m=\frac{y_2-y_1}{x_2-x_1}</math>
#'''Mathematik: y-Achsenabschnitt aus zwei Punkten'''<br>Erweitere das obige Programm, das aus den zwei gegebenen Punkten auch den y-Achsenabschnitt berechnet.
#'''Mathematik: Nullstellenberechnung'''<br>Eine lineare Funktion hat die Funktionsgleichung <math>f(x)=m \cdot x + n</math>. Schreibe ein Programm, bei dem man m und n eingeben kann und das daraufhin die Nullstelle ausrechnet.
#'''Mathematik: Nullstellen quadratischer Funktionen'''<br>Du kennst die p-q-Formel (oder auch a-b-c-Formel) zum Lösen quadratischer Gleichungen. Schreibe ein Programm, das nach Eingabe von p und q (bzw. a, b und c) die beiden Nullstellen der entsprechenden Funktion berechnet. Versuche einige Eingaben und überlege, ob es nicht Eingaben geben könnte, die Probleme verursachen.
#'''Physik: Pendelhöhe''' <br> Ein Fadenpendel mit einem kleinen Pendelkörper am Ende einer Länge wird um einen bestimmten Winkel (angegeben im Gradmaß) ausgelenkt. Schreibe ein Programm, das nach Eingabe der Pendellänge und des Auslenkwinkels die Höhe des Pendelkörpers über der Ruhelage errechnet.}}
 
{{Lazarus-Buch}}

Aktuelle Version vom 10. August 2019, 06:15 Uhr

"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.

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.

unit zahlen_main;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end; 

var
  Form1: TForm1; 
  a : integer;  // wir erfinden eine Zahlen-Variable a
  b : integer;  // wir erfinden eine Zahlen-Variable b
  c : integer;  // wir erfinden eine Zahlen-Variable c

implementation

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
begin
a:=StrToInt(Edit1.Text);  // belege die Variablen
b:=StrToInt(Edit2.Text);  // mit den Inhalten der Edit-Felder

c:=a+b; // Addiere a und b und weise den Wert der Variable c zu

Edit3.Text:=IntToStr(c);

end;

initialization
  {$I zahlen_main.lrs}

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.

procedure TForm1.Button1Click(Sender: TObject);
begin
a:=StrToFloat(Edit1.Text);  // belege die Variablen
b:=StrToFloat(Edit2.Text);  // mit den Inhalten der Edit-Felder

c:=a+b; // Addiere a und b und weise den Wert der Variable c zu

Edit3.Text:=format('%5.2f',[c]);

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/


Aufgabe
  1. Wirtschaft: Handwerk hat goldenen Boden
    Malermeister Klecksel muss zur Berechnung des ungefähren Verbrauchs an Farbe nach Angabe von Höhe, Breite und Länge eines Raums wissen
    a) Welche Fläche die Wände haben (Fenster spielen erst mal keine Rolle)
    b) Welche Fläche die Decke hat (wird manchmal in einer anderen Farbe gestrichen)
    Entwickle eine geeignete komfortable Software!
  2. Wirtschaft: Mehrwertsteuer
    Schreibe ein Programm, das für einen eingegebenen Betrag die Mehrwertsteuer berechnet und außerdem den Betrag zuzüglich Mehrwertsteuer. Den aktuellen Mehrwertsteuersatz findet man wahrscheinlich im Internet. Der Wert sollte kaufmännisch auf zwei Nachkommastellen gerundet sein.
  3. Mathematik: Lineare Funktionen
    Eine lineare Funktion hat die Funktionsgleichung . Schreibe ein Programm, bei dem man m, n und x eingeben kann und den Funktionswert erhält.
  4. Mathematik: Kompliziertere Funktionen
    Schreibe ein Programm, das nach der Eingabe des Wertes für den Wert des Polynoms berechnet.
  5. Mathematik: Geradensteigung aus zwei Punkten
    In Klasse 9 lernt man, wie man aus zwei Punkten die Steigung einer Gerade durch diese beiden Punkte berechnet.
    Schreibe ein Programm für einen Freund aus der 9. Klasse, der seine Hausaufgaben „kontrollieren“ will.
    Zur Erinnerung:
  6. Mathematik: y-Achsenabschnitt aus zwei Punkten
    Erweitere das obige Programm, das aus den zwei gegebenen Punkten auch den y-Achsenabschnitt berechnet.
  7. Mathematik: Nullstellenberechnung
    Eine lineare Funktion hat die Funktionsgleichung . Schreibe ein Programm, bei dem man m und n eingeben kann und das daraufhin die Nullstelle ausrechnet.
  8. Mathematik: Nullstellen quadratischer Funktionen
    Du kennst die p-q-Formel (oder auch a-b-c-Formel) zum Lösen quadratischer Gleichungen. Schreibe ein Programm, das nach Eingabe von p und q (bzw. a, b und c) die beiden Nullstellen der entsprechenden Funktion berechnet. Versuche einige Eingaben und überlege, ob es nicht Eingaben geben könnte, die Probleme verursachen.
  9. Physik: Pendelhöhe
    Ein Fadenpendel mit einem kleinen Pendelkörper am Ende einer Länge wird um einen bestimmten Winkel (angegeben im Gradmaß) ausgelenkt. Schreibe ein Programm, das nach Eingabe der Pendellänge und des Auslenkwinkels die Höhe des Pendelkörpers über der Ruhelage errechnet.