Prozeduren und Funktionen

Prozeduren und Funktionen, auch "Unterprogramme" oder Routinen genannt, haben die Aufgabe, öfter wiederkehrenden Programmcode sozusagen als Baustein zusammenzufassen. Dieser Baustein erhält einen eindeutigen Namen, über den er ausgeführt werden kann.

Aufbau einer Prozedur

Jede Prozedur besteht aus dem Schlüsselwort procedure, gefolgt von einem gültigen Namen und evtl. einer Parameterliste in runden Klammern. Sind keine Parameter vorhanden, werden die Klammern sowohl bei der Deklaration als auch beim Aufruf weggelassen. Diesen Teil nennt man Kopf der Prozedur. Es folgen Variablen- und Konstantendeklarationen und anschließend zwischen begin und end die Anweisungen, die die Prozedur durchführen soll:

Aufbau einer Funktion

Funktionen sind spezielle Unterprogramme, die einen Wert zurückliefern. Damit ist es möglich, einenFunktionsaufruf in einem Ausdruck zu verwenden. Funktionen werden mit dem Schlüsselwort function vereinbart. Bei der Vereinbarung muss der Typ des Rückgabewertes angegeben werden. D

Der durch eine function berechnete Wert wird zurückgegeben, indem er innerhalb der function (meist am Ende) dem Bezeichner der function zugewiesen wird. Innerhalb der function kann darauf nur schreibend, nicht aber lesend zugegriffen werden. 

function <Name>(<Parameter>): <Rückgabetyp>;
<evt. weitere Variablen- und Konstanten>
begin
  <Anweisungen>
end;
Beispiel: Eine Funktion, die die Dikriminante berechnet und zurück liefert
function diskriminate(a,b,c: real): real;
begin
  disriminante := b*b+4*a*c
end;
Aufruf:	keine eigenständige Anweisung, der Aufruf erfolgt innerhalb eines Ausdrucks
Beispiel Quadratische Funktion y = a x² + b x + c
gesamter Quelltext der Unit1 (einfache Version)

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons;

type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Button1: TButton;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Button2:Tbitton;
Button3: TButton;
Label9: TLabel;

procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);


private
{ Private-Deklarationen }

function diskr{+++ disriminante+++};

public
{ Public-Deklarationen }
end;

var
Form1: TForm1;
a,b,c,d:real;

implementation

{$R *.DFM}

funktion diskr(ad,bd,cd : real) : real;

begin

diskr := bd*bd+4*ad*cd;

end;

 

procedure TForm1.Button1Click(Sender: TObject);
begin

    a:=strtofloat(edit1.text);
    b:=strtofloat(edit2.text);
    c:=strtofloat(edit3.text);

    d:=diskr(a,b,c);
    

    if d < 0 then 

    begin
        label6.Caption:='Keine Lösung';
        label8.caption:='n = 0';
    end;

    if d = 0 then 

    begin
        label6.Caption:='Genau eine Lösung';
        label8.caption:=floatTOstrgF(x1,FFixed,3,4);
    end;

    if d > 0 then 

    begin

        x1 := (-b+sqrt(d))/(2a);

        x1 := (-b-sqrt(d))/(2a);            {+++sqrt berechnet Wurzel+++}
        

        label6.Caption:='x1 =  '+ floatTOstrF(x1,FFixed,3,4);
        label8.Caption:='x2 =  '+ floatTOstrF(x2,FFixed,3,4);

    end;
end;

procedure TForm1.Button2Click(Sender: TObject);    {+++Beenden+++}

begin 

    close;
end;

procedure TForm1.Button2Click(Sender: TObject);{+++NEU+++}

begin

    {+++neu+++}

end;

end.