Lazarus/Computer-Mathematik: Unterschied zwischen den Versionen

Aus ZUM-Unterrichten
main>Peterdauscher
main>Peterdauscher
Zeile 97: Zeile 97:
=== Das ganze Programm zum Rechnen mit Integer-Zahlen ===
=== 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.
Das folgende Programm funktioniert, wenn es auf der Oberfläche die Komponenten <tt>Edit1</tt>, <tt>Edit2</tt> und <tt>Button1</tt> gibt.
{{kasten_blau|<source  line highlight="33-46" lang="pascal">
{{kasten_blau|<source  line highlight="28-30,36-45" lang="pascal">
unit zahlen_main;
unit zahlen_main;


Zeile 125: Zeile 125:
var
var
   Form1: TForm1;  
   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
implementation
Zeile 131: Zeile 134:


procedure TForm1.Button1Click(Sender: TObject);
procedure TForm1.Button1Click(Sender: TObject);
var a : integer;  // wir erfinden eine Zahlen-Variable a
    b : integer;  // wir erfinden eine Zahlen-Variable b
    c : integer;  // wir erfinden eine Zahlen-Variable c
begin
begin
a:=StrToInt(Edit1.Text);  // belege die Variablen
a:=StrToInt(Edit1.Text);  // belege die Variablen

Version vom 27. Januar 2013, 12:03 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.

Dafür muss das Programm drei Dinge tun:

  • Die Zahlen, die verrechnet werden müssen, müssen von der Benutzeroberfläche eingelesen werden.
  • 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. Das geschieht über die Zeile

var zahl : integer;

Diese Zeile kann man (z.B.) zwischen procedure TForm1.Button1Click(Sender: TObject); und das zugehörige begin schreiben.

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 die Wert zugewiesen wird, die der Benutzer in das Edit-Feld Edit1 geschrieben hat.

Bevor man jedoch der Variable a einen Wert zuweisen kann, muss der Computer wissen, dass es überhaupt eine Integer-Variable mit Namen a gibt.

Dies geschieht mit Hilfe einer so genannten Variablendeklaration:


Wichtig: Dieser Befehl steht noch vor dem Begin.

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);

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. Vorlage:Kasten blau

Arbeiten mit Reellen Zahlen

Das Arbeiten mit reellen Zahlen vom Typ real oder double funktioniert sehr ähnlich, mit ein paar kleinen Unterschieden:

Statt IntToStr und StrToInt werden hier die Befehle FloatToStr und sinnvollerweise 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.

Vorlage:Kasten blau

Weitere Rechenoperationen für reelle Zahlen sind:

Rechenoperation Rechenzeichen
in der Sprache Pascal
Exponentialfunktion exp(x)
Sinus-Funktion sin(x)
Cosinus-Funktion cos(x)
Tangens tan(x)
Natürlicher Logarithmus ln(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 Rechenzeichen
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/

Aufgaben

  1. 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. Eine lineare Funktion hat die Funktionsgleichung . Schreibe ein Programm, bei dem man m, n und x eingeben kann und den Funktionswert erhält.
  3. Schreibe ein Programm, das nach der Eingabe des Wertes für den Wert des Polynoms berechnet.
  4. In Klasse 9 lernt man, wie man aus zwei Punkten und 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:
  5. Erweitere das obige Programm, das aus den zwei gegebenen Punkten auch den y-Achsenabschnitt berechnet.
  6. Eine lineare Funktion hat die Funktionsgleichung . Schreibe ein Programm, bei dem man m und n eingeben kann und das daraufhin die Nullstelle ausrechnet.
  7. Du kennst die p-q-Formel (oder auch a-b-c-Formel) zum Lösen quadratischer Gleichungen. Schreibe ein Programm, das nach Eingabe von q 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.