Funktionen liefern bei Aufruf einen Rückgabewert. Daher muss bei ihrer Deklaration der Typ dieses Rückgabewerts festgelegt werden.
Die beiden folgenden Deklarationen liefern dasselbe Ergebnis. In beiden Fällen wird in einen Speicherplatz namens meinefunktion der berechnete Funktionswert - in diesem Fall eine reelle Zahl - geschrieben.
function meiny(x:real):real; begin meinefunktion := 2*x*sin(x); end; |
function meiny(x:real):real; begin result := 2*x*sin(x); end; |
Der Aufruf der Funktion kann in einem beliegen anderen Programmmodul erfolgen: y := meiny(4); y muss dabei natürlich eine Variable sein, die vorher als real-Typ deklariert wurde.
procedure TForm1.Button1Click(Sender: TObject);
var zz : integer;
x,y : real;
begin
zz := 1; x := 0;
// Initialisierung
while x <= 10 do begin
y := meiny(x); // Berechnung der Funktionswerte
Tabelle.Cells[0,zz] := FloatToStr(x);
// Ausgabe der x-Werte
Tabelle.Cells[1,zz] := FloatToStr(y);
// Ausgabe der y-Werte
x := x+0.5; inc(zz); //
Vorbereitung f. nächsten Durchgang
end;
end;
Lästig ist es, für jede neue Funktionsberechnung den Programmcode ändern zu müssen. Man kann sich das Leben etwas leichter machen, wenn man im Laufe des Programmcodes seine Lieblingsfunktionen
function f1(x:real):real;... function f27(x:real):real;
deklariert und später dann in der Ausgaberoutine die entsprechende Funktionsnummer einsetzt.
Delphi- Pascal kennt auch einen Variabelentyp function:
var f : function(x : real) : real;
In einer Auswahlprozedur kann man dann den gewünschten Funktionsterm z.B. mit der Zuweisung f := f13; auswählen und anzeigen lassen. Allerdings müssen Funktionsdeklarationen formal (d.h. in Anzahl, Reihenfolge und Typ der übergebenen Parameter und im Typ des Rückgabewertes) übereinstimmen.
Für unsere bisherigen Programmier-Kenntnisse bleibt ein Wunschtraum noch unerfüllt: Gib den Funktionsterm in einer Textzeile ein und lass das Programm selber den entsprechende Funktionscode schreiben. Dazu müsste man den Funktionsterm als Text interpretieren können und das ist bereits ein ziemlich anspruchsvolles Projekt.
Die obige Form der Tabellenberechnung lässt sich allerdings sehr schön verwenden, wenn es sich um einen physikalischen Vorgang handelt, dessen berechnete Werte (hier Weite in x- und y-Richtung) von verschiedenen Parametern abhängt. In unserem Beispiel : Kugelstoßen können die Parameter Abwurfwinkel, Abwurfgeschwindigkeit, Winkel und Abwurfhöhe in entsprechenden Feldern eingegeben werden. Sie werden in die Berechnungsformeln übergeben und zur Berechnung der verschiedenen Größen verwendet.
Die Werte für y und y sind vom Typ real, d.h. sie werden mit ziemlich hoher Stellenzahl nach dem Komma berechnet und auch so ausgegeben. Um eine formatierte Ausgabe zu erhalten verwendet man die sog. Formatfunktion:
Tabelle.Cells[2,1] := Format('%8.2f',[xweite(t)]);
Die Syntax ist wie folgt zu verstehen. Der String '%8.2f' besagt, dass die Zahl Typ Floatingpoint ist, acht Schreibstellen benutzt (einschließlich des Kommas) und zwei Nachkommastellen hat. Der zu formatierende Ausgabe-Wert folgt in eckigen Klammern. Um eine wirkliche Formatierung (z.B. Komma unter Komma) zu erreichen, muss man allerdings auch noch einen Schrifttyp mit festem Zeichenabstand (z.B. Courier) verwenden.
© Dietrich Praclik