Funktionen in Pascal

Funktionen in Pascal
Ein langes Programm kann sehr schnell unübersichtlich werden. Man fasst deshalb
Teilprobleme zu Unterprogrammen zusammen. Aus dem Hauptprogramm werden
diese Unterprogramme dann entsprechend aufgerufen. Das bringt Vorteile, wenn ein
Unterprogramm mehrfach genutzt werden kann. Solche Unterprogramme machen große
Programme auch strukturierter und übersichtlicher.
Sehr oft liefert ein Algorithmus aus einer oder mehreren Eingangsinformationen genau einen
neuen Ausgangswert, den Funktionswert der Eingangsgrößen. Aus der Mathematik ist das
Beispiel der reellen Funktion f: x f(x) bekannt. In Pascal sind bereits viele Funktionen
vordefiniert.
• y := Sqr ( n ); Quadratfunktion
• y := Sqrt ( n ); Wurzelfunktion ( square root )
• y := Sin( n ); Sinusfunktion ( Ergebnisse liegen im Bogenmaß vor ! )
• y := Cos( n ); Cosinusfunktion .. ebenfalls im Bogenmaß
• y := ArcTan( n ); Umkehrfunktion des Tangens ( n in rad ! )
• y := Trunc( n ); Nachkommastellen abschneiden
• y := Round( n ); Wert runden
• y := Abs( n ); Absolutbetrag ( Vorzeichen spielen keine Rolle mehr )
• y := UpCase ( n ); Buchstaben in Großbuchstaben umwandeln
• y := Random( n ); ergibt eine Zufallszahl zwischen 0 und n (n:integer)
Es lassen sich aber beliebige neue Funktionen definieren.
Beispiel 1: Berechnung des Umfangs von Rechtecken
Eine Funktion mit dem Namen Rechteckumfang soll aus Länge und Breite den Umfang des
zugehörigen Rechtecks als Funktionswert liefern. So wird diese Funktion vereinbart.
function Rechteckumfang(l,b: real): real;
{ermittelt den Umfang eines Rechtecks}
begin
Rechteckumfang := 2*l + 2*b;
end; {function}
Wichtig für die Anwendung ist der sog. Funktionskopf. Er hat stets den Aufbau
function Funktionsname (Eingabewerte : Typ der Eingabewerte) : Typ des
Funktionswertes
Die Eingabewerte heißen auch Eingabeparameter; sie werden nicht direkt über die Tastatur
eingelesen, sondern z.B. als Zahlen oder Variablen beim Aufruf der Funktion übergeben.
Innerhalb der Funktionsvereinbarung muss dem Namen der Funktion der Funktionswert
zugewiesen werde.
Funktionen können im Hauptprogramm wie eine Variable behandelt werden; sie können also
in Ausdrücken oder Ausgabeanweisungen vorkommen.
Funktionen in Pascal – Seite 1
Das folgende Programm zeigt die Verwendung der Funktion Rechteckumfang.
program funk1;
{Zweck: Rechteckumfang mit einer Funktion ermitteln
Autor: W. Steffen
Datum: 29.12.2015}
uses crt;
var a,b,U : real;
function Rechteckumfang(l,b: real): real;
{ermittelt den Umfang eines Rechtecks}
begin Rechteckumfang := 2*l + 2*b;
end; {function}
begin clrscr;
writeln(' Umfang eines Rechtecks');
writeln;
write(' Laenge: '); readln(a);
write(' Breite: '); readln(b);
U := Rechteckumfang(a,b);
writeln(' Umfang = ',U:12:2);
readln;
end.
Beispiel 2: Ermittlung der Teileranzahl einer natürlichen Zahl
Diese Funktion ist vor allem bei der Suche nach Primzahlen hilfreich, denn eine Primzahl ist
genau dann Primzahl, wenn sie zwei Teiler hat.
function teilerzahl(zahl:integer):integer;
var t,anzahl: integer;
begin anzahl := 0;
for t := 1 to zahl do
if zahl mod t = 0 then anzahl := anzahl + 1;
teilerzahl := anzahl;
end; {function}
Diese Funktion erhält eine natürliche Zahl als (virtuelle) Eingabe und liefert als Funktionswert die Anzahl der Teiler dieser Zahl. Die Hilfsvariablen t und anzahl sind nur lokal in der
Funktion definiert, der Nutzer braucht davon im Hauptprogramm nichts zu wissen.
Mögliche Aufrufe dieser Funktion sind:
Writeln( teilerzahl(26) );
T := teilerzahl( n )
If teilerzahl( z ) = 2 then writeln(' Primzahl ');
Die formale Variable „zahl“ in der Funktionsdefinition wird also durch eine aktuelle Zahl
oder Variable beim Aufruf ersetzt.
Funktionen in Pascal – Seite 2
program funk2;
{Zweck: Teileranzahl einer natuerlichen Zahl
Autor: W. Steffen
Datum: 29.12.2015}
uses crt;
var n : integer;
function teilerzahl(zahl:integer):integer;
var t,anzahl: integer;
begin anzahl := 0;
for t := 1 to zahl do
if zahl mod t = 0 then anzahl := anzahl + 1;
teilerzahl := anzahl;
end; {function}
begin clrscr;
writeln(' Anzahl der Teiler einer natuerlichen Zahl');
writeln;
write(' Gib eine nat. Zahl ein: '); readln(n);
writeln(' Die Zahl ',n,' hat ', teilerzahl(n),' Teiler.');
if teilerzahl(n) = 2 then writeln(' Die Zahl ',n,' ist eine Primzahl.');
readln;
end.
Aufgaben: Schreibe jeweils ein kleines Hauptprogramm, um die Funktionen zu testen.
Aufg. 1: a) Die Funktion Kreisflaeche( ) ermittelt aus dem Kreisradius als Eingangsvariable
den Flächeninhalt des Kreises.
b) Schreibe analog dazu eine Funktion Kreisumfang( ).
Aufg. 2: Die Funktion max( ) ermittelt aus zwei reellen Zahlen a und b die größere der beiden
Zahlen.
Aufg. 3: Die Funktion Gesamtpreis( ) ermittelt aus der Stückzahl und dem Artikelpreis den
Gesamtpreis. Zusätzlich gilt: Wenn die Stückzahl mindestens 10 ist, wird ein Rabatt von 10
Prozent gewährt.
Aufg. 4: Eine Funktion f( ) ermittelt aus einer reellen Zahl den Funktionswert einer reellen
Funktion f, z.B. f(x) = x*x*x-3*x.
a) Teste das Programm mit einer einzugebenden reellen Zahl x.
b) Erweitere das Programm, so dass eine Wertetabelle für das Intervall von a bis b mit einer
einzugebenden Schrittweite sw am Monitor angezeigt wird.
Auf. 5: Die Funktion ggt(a,b) ermittelt von zwei natürlichen Zahlen als Funktionswert den
größten gemeinsamen Teiler. Verwende in der Funktion den Euklid’schen Algorithmus.
Funktionen in Pascal – Seite 3