Da in PASCAL die komplexe Arithmetik nicht unterstützt wird, muß die e-Funktion mit der Eulerschen Formel in Real- und Imaginärteil zerlegt werden:
program DiskreteFourierTransformation; {Berechnung einer diskreten Fouriertransformation am Beispiel y(x) = cos(3t) + sin(10t)} uses stdfile; const MaxArray = 1024; {<= 32767} var k, m, n: integer; omega, angle: double; funkt: array [0..MaxArray] of double; {Vorgegebene Funktion} realt: array [0..MaxArray] of double; {Realteil} imagt: array [0..MaxArray] of double; {Imaginaerteil} procedure init; var fName: string; f: text; begin {init} writeln('Darstellung der Berechnung einer diskreten Fouriertransformation'); writeln; write('In welcher Datei liegt die Funktion?'); writeln('In dft.dat liegt als Beispiel: y(x) = cos(3t) + sin(10t) in 32 Intervallen von delta t = 2Pi/32'); readln(fName); if StdOpen(f, fName) then begin n := -1; repeat n := n + 1; if n > MaxArray then begin writeln('Die Datei "', fName, '" hat zu viele Punkte (mehr als ', MaxArray, ').'); halt end; {if} until not StdRead(f, funkt[n]); n := n - 1 end else begin {if} writeln('Die Datei "', fName, '" kann nicht geoeffnet werden.'); halt end; {if} close(f); writeln('Insgesamt wurden ', n, ' Werte eingelesen.'); end; {init} procedure result; var i: Integer; begin {result} for i:=0 to n-1 do begin writeln(i:2,' ', realt[i]:7:3,' +i* ', imagt[i]:6:3) end {for} end; {result} begin {DFT} init; omega := 2.0*Pi/n; for k:=0 to n-1 do begin realt[k] := 0.0; imagt[k] := 0.0; for m:=0 to n-1 do begin angle := k*omega*m; realt[k] := realt[k] + funkt[m]*cos(angle); imagt[k] := imagt[k] - funkt[m]*sin(angle); end {for} end; {for} result end. {DFT}