home *** CD-ROM | disk | FTP | other *** search
- {---------------------------------------------------------------------------}
- { fkplot2.pas }
-
- { Funktion, die die erste Stufe der Uebersetzung des eingegebenen Strings,
- der die Funktion definiert, vornimmt }
-
- FUNCTION translat1 (q1: str100): Str;
-
- TYPE mg = SET OF CHAR;
- Str = STRING[255];
-
- VAR q2 :Str;
- i,j : INTEGER;
- oper, zahl : mg;
-
- BEGIN { Initialisierung }
- FOR i := Length(q1)+1 TO 100 DO q1[i] := ' ';
- oper := ['+','-','*','/','^'];
- zahl := ['0','1','2','3','4','5','6','7','8','9','.',','];
- i := 1;
- FOR j := 1 TO 255 DO q2[j] := ' ';
- q2 := '[';
- FOR j := 1 TO Length(q1) DO q1[j] := UpCase(q1[j]);
-
- REPEAT { Uebersetzen der Teilfunktionen }
- CASE q1[i] OF
- 'X' : q2 := q2+'[@]'; { X -> @ }
- '(', '[', '{' : q2 := q2+'[';
- ')', ']', '}' : q2 := q2+']';
- 'E' : q2 := q2+'[2.7182818285]'; { E -> 2.72 }
-
- 'P': IF q1[i+1] = 'I' THEN
- BEGIN { PI -> 3.14 }
- q2 := q2+'[3.14159265359]';
- i := i+1;
- END;
- 'L': CASE q1[i+1] OF
- 'N' : BEGIN { LN -> S }
- q2 := q2+'S';
- i := i+1;
- END;
- 'O' : BEGIN
- IF q1[i+2] = 'G' THEN
- BEGIN { LOG -> R }
- q2 := q2+'R';
- i := i+2;
- END;
- END;
- END;
- 'M': IF Copy(q1,i+1,2) = 'OD' THEN
- BEGIN { MOD -> U }
- q2 := q2+'U';
- i := i+2;
- END;
- 'D': IF Copy(q1,i+1,2) = 'IV' THEN
- BEGIN { DIV -> T }
- q2 := q2+'T';
- i := i+2;
- END;
- 'G': IF Copy(q1,i+1,4) = 'AUSS' THEN
- BEGIN { GAUSS -> C }
- q2 := q2+'C';
- i := i+4;
- END;
- 'S': CASE q1[i+1] OF
- 'Q': IF Copy(q1,i+2,2) = 'RT' THEN
- BEGIN { SQRT -> Q }
- q2 := q2+'Q';
- i := i+3;
- END;
- 'G': IF q1[i+2] = 'N' THEN
- BEGIN { SGN -> A }
- q2 := q2+'A';
- i := i+2;
- END;
- 'I': IF q1[i+2] = 'N' THEN
- IF q1[i+3] = 'H' THEN
- BEGIN { SINH -> H }
- q2 := q2+'H';
- i := i+3;
- END
- ELSE
- BEGIN
- q2 := q2+'P'; { SIN -> P }
- i := i+2;
- END;
- END;
- 'C': IF q1[i+1] = 'O' THEN
- CASE q1[i+2] OF
- 'S': IF q1[i+3] = 'H' THEN
- BEGIN { COSH -> G }
- q2 := q2+'G';
- i := i+3;
- END
- ELSE
- BEGIN
- q2 := q2+'O'; { COS -> O }
- i := i+2;
- END;
- 'T': IF q1[i+3] = 'H' THEN
- BEGIN { COTH -> D }
- q2 := q2+'D';
- i := i+3;
- END
- ELSE
- BEGIN
- q2 := q2+'M'; { COT -> M }
- i := i+2;
- END;
- END;
- 'T': IF Copy(q1,i+1,2) = 'AN' THEN
- IF q1[i+3] = 'H' THEN
- BEGIN { TANH -> F }
- q2 := q2+'F';
- i := i+3;
- END
- ELSE
- BEGIN { TAN -> N }
- q2 := q2+'N';
- i := i+2;
- END;
- 'A': CASE q1[i+1] OF
- 'B': IF q1[i+2] = 'S' THEN
- BEGIN { ABS -> B }
- q2 := q2+'B';
- i := i+2;
- END;
- 'R': IF q1[i+2] = 'C' THEN
- CASE q1[i+3] OF
- 'S': IF Copy(q1,i+4,2) = 'IN' THEN
- BEGIN { ARCSIN -> L }
- q2 := q2+'L';
- i := i+5;
- END;
- 'C': IF q1[i+4]='O' THEN
- CASE q1[i+5] OF
- 'S': BEGIN { ARCCOS -> K }
- q2 := q2+'K';
- i := i+5;
- END;
- 'T': BEGIN { ARCCOT -> I }
- q2 := q2+'I';
- i := i+5;
- END;
- END;
- 'T': IF Copy(q1,i+4,2) = 'AN' THEN
- BEGIN { ARCTAN -> J }
- q2 := q2+'J';
- i := i+5;
- END;
- END; { of case }
- END; {of case}
- ELSE {of case}
- IF q1[i] IN oper THEN
- q2 := q2+q1[i]
- ELSE IF q1[i] IN zahl THEN
- BEGIN
- IF NOT(q1[i-1] IN zahl) THEN q2 := q2+'[';
- IF q1[i] = ',' THEN q2 := q2+'.' ELSE q2 := q2+q1[i];
- IF NOT(q1[i+1] IN zahl) THEN q2 := q2+']';
- END;
- END; {of case}
- i := i+1;
- UNTIL i > 100;
- q2 := q2+']';
- translat1 := q2;
- END;