home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1987 / 08 / calc / calcdemo.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1987-05-22  |  2.4 KB  |  62 lines

  1. (* ----------------------------------------------------------------------- *)
  2. (*                 Demo-Programm zum Einsatz von "CALC"                    *)
  3. (* ----------------------------------------------------------------------- *)
  4.  
  5. (*$A-*)                     (* fuer Turbo Pascal: rekursiven Code erzeugen *)
  6.  
  7. PROGRAM CalcDemo (Input, Output);
  8.  
  9. CONST
  10. (*$I CALCCONS.PAS *)
  11.  
  12. TYPE
  13. (*$I CALCTYPE.PAS *)
  14.  
  15. VAR
  16.     a, b, dx   : REAL;
  17.     dummy      : REAL;
  18.     Formula    : Calc_String;                 (* Ausdruck als Zeichenfolge *)
  19.     FormProg   : Calc_Prog;                    (* der uebersetzte Ausdruck *)
  20.     x          : Calc_VarTab;      (* die dazugehoerende Variablen-Tabelle *)
  21. (*$I CALCVAR.PAS *)
  22.  
  23. (*$I CALCUTIL.PAS *)                              (* Hilfsmittel fuer Calc *)
  24. (*$I MATHFUNC.PAS *)                  (* Erweiterte Funktionen vereinbaren *)
  25. (*$I CALC.PAS *)                                (* CALC verfuegbar machen  *)
  26.  
  27. BEGIN
  28.    WriteLn; WriteLn; WriteLn;
  29.    WriteLn('Demo: CALC - ein Mathe-Compilerchen in Pascal!');
  30.    WriteLn('           (C) 1987 PASCAL INT.');
  31.    x := NewVarTab;              (* Variablentabelle fuer Ausdruck erzeugen *)
  32.    dummy := AddToVarTab(x,'X');                (* Variable "X" vereinbaren *)
  33.    CalcDecMod := TRUE;               (* nur vereinbarte Variablen zulassen *)
  34.    REPEAT
  35.      WriteLn; WriteLn;
  36.      WriteLn('Bitte den auszuwertenden Ausdruck eingeben:'); WriteLn;
  37.      Write('f(x) = '); ReadLn(Formula); WriteLn;
  38.      CompileExpression(Formula, x, FormProg);        (* Formel uebersetzen *)
  39.      IF CalcResult THEN
  40.        BEGIN
  41.          WriteLn('Ausdruck "',Formula,'" korrekt uebersetzt...');
  42.          WriteLn;
  43.          Write('Berechnung von f(x) zwischen a = '); Read (a);
  44.          Write(' und b = '); Read (b);
  45.          Write(' mit Schrittweite dx = '); ReadLn (dx);
  46.          WriteLn;
  47.          WHILE (a <= b) DO                (* Berechnung der Funktionswerte *)
  48.            BEGIN
  49.                  (* Wert in Var.-Tabelle uebernehmen. Direkte Zuweisung an
  50.                     das entsprechende Feld-Element wuerde schneller gehen! *)
  51.              AssignVar(x,'X',a);
  52.              WriteLn('f(',a:1:4,') = ',
  53.                      CalcExpression(FormProg, x):1:4);
  54.              a := a+dx
  55.            END;
  56.          KillExpression(FormProg);      (* keinen Muell entstehen lassen ! *)
  57.        END
  58.    UNTIL Formula = '';
  59.    KillVarTab(x);
  60.    WriteLn('Demo beendet...');
  61. END.
  62.