Funktionen

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.

Zurück zu Delphi

© Dietrich Praclik