home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1987 / 03 / fkplot2.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1987-02-03  |  6.4 KB  |  168 lines

  1. {---------------------------------------------------------------------------}
  2. {                           fkplot2.pas                                     }
  3.  
  4. { Funktion, die die erste Stufe der Uebersetzung des eingegebenen Strings,
  5.   der die Funktion definiert, vornimmt                                      }
  6.  
  7. FUNCTION translat1 (q1: str100): Str;
  8.  
  9. TYPE mg  = SET OF CHAR;
  10.      Str = STRING[255];
  11.  
  12. VAR q2         :Str;
  13.     i,j        : INTEGER;
  14.     oper, zahl : mg;
  15.  
  16. BEGIN                                                     { Initialisierung }
  17.   FOR i := Length(q1)+1 TO 100 DO q1[i] := ' ';
  18.   oper := ['+','-','*','/','^'];
  19.   zahl := ['0','1','2','3','4','5','6','7','8','9','.',','];
  20.   i := 1;
  21.   FOR j := 1 TO 255 DO q2[j] := ' ';
  22.   q2 := '[';
  23.   FOR j := 1 TO Length(q1) DO q1[j] := UpCase(q1[j]);
  24.  
  25.   REPEAT                                   { Uebersetzen der Teilfunktionen }
  26.     CASE q1[i] OF
  27.       'X'           : q2 := q2+'[@]';                              { X -> @ }
  28.       '(', '[', '{' : q2 := q2+'[';
  29.       ')', ']', '}' : q2 := q2+']';
  30.       'E'           : q2 := q2+'[2.7182818285]';                { E -> 2.72 }
  31.  
  32.       'P': IF q1[i+1] = 'I' THEN
  33.            BEGIN                                               { PI -> 3.14 }
  34.              q2 := q2+'[3.14159265359]';
  35.              i := i+1;
  36.            END;
  37.       'L': CASE q1[i+1] OF
  38.              'N' : BEGIN                                          { LN -> S }
  39.                      q2 := q2+'S';
  40.                      i := i+1;
  41.                    END;
  42.              'O' : BEGIN
  43.                      IF q1[i+2] = 'G' THEN
  44.                      BEGIN                                       { LOG -> R }
  45.                        q2 := q2+'R';
  46.                        i := i+2;
  47.                      END;
  48.                    END;
  49.            END;
  50.       'M': IF Copy(q1,i+1,2) = 'OD' THEN
  51.            BEGIN                                                 { MOD -> U }
  52.              q2 := q2+'U';
  53.              i := i+2;
  54.            END;
  55.       'D': IF Copy(q1,i+1,2) = 'IV' THEN
  56.            BEGIN                                                 { DIV -> T }
  57.              q2 := q2+'T';
  58.              i := i+2;
  59.            END;
  60.       'G': IF Copy(q1,i+1,4) = 'AUSS' THEN
  61.            BEGIN                                               { GAUSS -> C }
  62.              q2 := q2+'C';
  63.              i := i+4;
  64.            END;
  65.       'S': CASE q1[i+1] OF
  66.              'Q': IF Copy(q1,i+2,2) = 'RT' THEN
  67.                   BEGIN                                         { SQRT -> Q }
  68.                     q2 := q2+'Q';
  69.                     i := i+3;
  70.                   END;
  71.              'G': IF q1[i+2] = 'N' THEN
  72.                   BEGIN                                          { SGN -> A }
  73.                     q2 := q2+'A';
  74.                     i := i+2;
  75.                   END;
  76.              'I': IF q1[i+2] = 'N' THEN
  77.                     IF q1[i+3] = 'H' THEN
  78.                       BEGIN                                     { SINH -> H }
  79.                         q2 := q2+'H';
  80.                         i := i+3;
  81.                       END
  82.                     ELSE
  83.                       BEGIN
  84.                         q2 := q2+'P';                            { SIN -> P }
  85.                         i := i+2;
  86.                       END;
  87.            END;
  88.       'C': IF q1[i+1] = 'O' THEN
  89.              CASE q1[i+2] OF
  90.                'S': IF q1[i+3] = 'H' THEN
  91.                       BEGIN                                     { COSH -> G }
  92.                         q2 := q2+'G';
  93.                         i := i+3;
  94.                       END
  95.                     ELSE
  96.                       BEGIN
  97.                         q2 := q2+'O';                            { COS -> O }
  98.                         i := i+2;
  99.                       END;
  100.                'T': IF q1[i+3] = 'H' THEN
  101.                       BEGIN                                     { COTH -> D }
  102.                         q2 := q2+'D';
  103.                         i := i+3;
  104.                       END
  105.                     ELSE
  106.                       BEGIN
  107.                         q2 := q2+'M';                            { COT -> M }
  108.                         i := i+2;
  109.                       END;
  110.              END;
  111.       'T': IF Copy(q1,i+1,2) = 'AN' THEN
  112.              IF q1[i+3] = 'H' THEN
  113.                BEGIN                                            { TANH -> F }
  114.                  q2 := q2+'F';
  115.                  i := i+3;
  116.                END
  117.              ELSE
  118.                BEGIN                                             { TAN -> N }
  119.                  q2 := q2+'N';
  120.                  i := i+2;
  121.                END;
  122.       'A': CASE q1[i+1] OF
  123.              'B': IF q1[i+2] = 'S' THEN
  124.                   BEGIN                                          { ABS -> B }
  125.                     q2 := q2+'B';
  126.                     i := i+2;
  127.                   END;
  128.              'R': IF q1[i+2] = 'C' THEN
  129.                     CASE q1[i+3] OF
  130.                       'S': IF Copy(q1,i+4,2) = 'IN' THEN
  131.                            BEGIN                              { ARCSIN -> L }
  132.                              q2 := q2+'L';
  133.                              i := i+5;
  134.                            END;
  135.                       'C': IF q1[i+4]='O' THEN
  136.                              CASE q1[i+5] OF
  137.                                'S': BEGIN                     { ARCCOS -> K }
  138.                                       q2 := q2+'K';
  139.                                       i := i+5;
  140.                                     END;
  141.                                'T': BEGIN                     { ARCCOT -> I }
  142.                                       q2 := q2+'I';
  143.                                       i := i+5;
  144.                                     END;
  145.                              END;
  146.                       'T': IF Copy(q1,i+4,2) = 'AN' THEN
  147.                            BEGIN                              { ARCTAN -> J }
  148.                              q2 := q2+'J';
  149.                              i := i+5;
  150.                            END;
  151.                     END; { of case }
  152.            END;  {of case}
  153.       ELSE {of case}
  154.         IF q1[i] IN oper THEN
  155.           q2 := q2+q1[i]
  156.         ELSE IF q1[i] IN zahl THEN
  157.           BEGIN
  158.             IF NOT(q1[i-1] IN zahl) THEN q2 := q2+'[';
  159.             IF q1[i] = ',' THEN q2 := q2+'.' ELSE q2 := q2+q1[i];
  160.             IF NOT(q1[i+1] IN zahl) THEN q2 := q2+']';
  161.           END;
  162.     END; {of case}
  163.     i := i+1;
  164.   UNTIL i > 100;
  165.   q2 := q2+']';
  166.   translat1 := q2;
  167. END;
  168.