(* Funktion zur Berechnung von n! *)
function fak(n: integer):integer;
var
	k,erg: integer;
begin
	erg := 1;
	for k:=1 to n do
		erg := erg*k;
	end;
	return erg;
end;

(* Funktion zur Berechnung von exp(x) *)
function expo(x: real):real;
var
	erg, summand, posx, posxn: real;
	n : integer;
begin
	# bei x<0: berechne exp(-x) 
	#	   und nimm anschliessend den Kehrwert
	if x<0 then
		posx := -x;	# posx = positives x = |x|
	else
		posx := x;
	end;			

	# Berechne exp(x) durch die Potenzreihenentwicklung:
	# exp(x) = 1 + x + x^2/fak(2) + x^3/fak(3) + ...

	# Initialisierungen
	erg := 1.0;
	n := 1;
	posxn := posx;	# posxn enthaelt |x|**n

	# Berechnung des Summanden zu n=1
	summand := posxn;

	while (summand > 0.00001) do
		writeln("Summand: ",summand);
		erg := erg+summand;
		n := n+1;
		posxn := posxn*posx;
		summand := posxn / fak(n);
	end;

	# bei x<0 muss der Kehrwert genommen werden
	if x<0 then
		erg := 1/erg;
	end;

	return erg;
end.

 