Einführung in das Programmieren mit DELPHI  

13. Funktionen

a) Standard-Funktionen in PASCAL bzw. DELPHI

Abs(x)   |x|
Sqr(x)   x2
Sqrt(x)   √x
Ln(x)      ln x
Sin(x)   sin x
Cos(x)   cos x
ArcTan(x) cos-1x
Exp(x)     ex

Außerdem:

Int(x)     Ganzzahliger Anteil von x ( entspricht der Gaußschen Klammer [x] )
 
Frac(x)    Gebrochener Anteil von x ( Nachkommastellen)

Trunc(x)   Schneidet die Nachkommastellen ab. Ergebnis ist im Gegensatz zu Int(x) vom Typ integer.

Ein Beispiel zur Integerfunktion:

Mit   a/b = Int(a/b)   lässt sich prüfen, ob b eine Teiler von a ist.

procedure TForm1.Button1Click(Sender: TObject);
var n,t : integer;
begin
    n := StrToInt(Edit1.Text);
    memo1.Text := '1';
    for t:=2 to n do
      begin
         if n/t=Int(n/t) then 
            memo1.Text := Memo1.Text + ', ' + IntToStr(t);
      end;
end;

b) Selbstdefinierte Funktionen

Im Gegensatz zu Prozeduren geben Funktionen einen Wert zurück. Bei der Deklaration einer Funktion muss daher der Typ des Funktionswertes angegeben werden.
Um den Funktionswert an das aufrufende Programm zurück zu geben, wird er der formalen variablen result zugewiesen.

Die Syntax für Funktionen ist:

function <Funktionsname> ( <Parameterliste> ) : <Typ des Funktionswerts>;
begin
    . . .
   result := <Funktionswert>
end;
 

Damit lassen sich fehlende Funktionen nachdefinieren, wie zum Beispiel den Tangens nach der Formel    

Um die Winkel im Dreieck aus den Seiten nach dem Kosinussatz   c2 = a2 + b2 - 2ab. cos(g ) berechnen zu können, brauchen wir die Umkehrfunktion des Cosinus, den Arcuscosinus     .

Beispiel:

function Arccos(x: real): real;
begin
  if Abs(x)<0.0000001 then
     result := 90
  else
     result :=Arctan(Sqrt(1-Sqr(x))/x) * 180/Pi;
end; {function Arccos}

procedure TForm1.Button1Click(Sender: TObject);
var a,b,c,alpha,beta,gamma: real;
begin
     a := StrToFloat(Edita.Text);
     b := StrToFloat(Editb.Text);
     c := StrToFloat(Editc.Text);

     alpha := Arccos( (b*b+c*c-a*a) / (2*b*c));
     beta  := Arccos( (a*a+c*c-b*b) / (2*a*c));
     gamma := Arccos( (a*a+b*b-c*c) / (2*a*b));

     EditAlpha.Text := Format('%4.1f°',[Alpha]);
     EditBeta.Text  := Format('%4.1f°',[Beta]);
     EditGamma.Text := Format('%4.1f°',[Gamma]);
end;

Aufgaben :

Definieren Sie folgende Funktionen:

  1. die Fakultät einer natürlichen Zahl n und den Binomialkoeffizienten "n über k"

  2. den ggT und das kgV von zwei nat. Zahlen a und b

  3. prim(x) soll prüfen ob eine Zahl Primzahl ist und true oder false zurück geben.

  4. DMSToDeg(d,m,s) soll Grad, Minuten u. Sekunden in Dezimalgrade umrechnen.   Bsp.: 53°47’14"® 53.7873

» Lösungen

© 2008 : Bernd Schultheiss