grafischer Infix Calculator

Authoren: Nenad Celikovic (MatrNr.: e0509838) und Thomas Strasser (MatrNr.: e0625237)

IDEE:
Programm liest mathematische Formel in Infix Notation ein und stellt diese Funktion grafisch dar
z.B: (x+(y^2)) calc

Hierbei kann man sich die Klammerung zu nutze machen (weil ja alles was in einer Klammer steht ein String ist und die Klammern balanziert sein mueszen)

Das Programm soll eine ausfuehrbare Liste von Anweisungen erstellen

x und y bzw. i sind vordefinierte (Zähler-)Variablen
Das Programm kann beliebige einstellige Postscript-Funktionen in der Formel benutzen

BugFix (geh jetzt):
(1+c(2*(3+4))) calc % letztes add wird nicht ermittelt
(s(4)+c(5)) calc % ebenfalls kein add
(s(4)++c(5)) calc % ebenfalls kein add
HIER: (s(4)+5) calc % = add

Beispiele:
%% 2.5 1 scale 100 100 startpos -10 0.1 10 range (x*x*x) dcalc showpage

% x^3 grosz: -v
7 4 scale 40 40 startpos -10 0.1 10 range (x*x*x) dcalc showpage

% sin(x): -v
1.0 1 scale 0 400 startpos 0 1 1000 range (sin(x)*100) dcalc showpage

% cos(x): -v
1.0 1 scale 0 400 startpos 0 1 1000 range (cos(x)*100) dcalc showpage

% Muster1: -v
1 1 scale 200 400 startpos 0 1 2000 range (sin(i*(3/5))*100) (cos(i*(4/5))*100) dcalc2 showpage
%% 1 1 scale 200 400 startpos 0 1 9000 range (sin(i*(3/8))*100) (cos(i*(4/5))*100) dcalc2 showpage
% Muster2: -v
2 2 scale 140 240 startpos 0 1 5000 range (sin(i*(3/7))*100) (cos(i*(3/5))*100) dcalc2 showpage

% normal -v
7.0 4 scale 40 40 startpos -10 0.1 10 range (x*x) dcalc showpage

% normal mit Linie
/draw { lineto } def
7 4 scale 40 40 startpos -10 10 10 range (x*x) dcalc showpage

% mit 2 Halbkreisen
/draw { 20 20 180 arc } def
7 4 scale 40 40 startpos -10 10 10 range (x*x) dcalc showpage

% mit 2 Bezier Kurven
/draw { 2 copy 2 div exch 2 div exch 2 copy 4 mul exch 4 mul exch curveto } def
7 4 scale 40 40 startpos -10 10 10 range (x*x) dcalc showpage

% leider verdreht -v
%% 1.0 1.0 scale 40 40 startpos 0 1 1000 range ((sqrt(x))*100) dcalc showpage

/draw { lineto } def

%% Tests:
%% (1+(2*x)) dcalc
%% (200*s(x)+(c(x*2)/40)) dcalc
%% (12.3*4.5+x) dcalc

Downloads
Nützliche Links: