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

  1. {---------------------------------------------------------------------------}
  2. {                           fkplot1.pas                                     }
  3.  
  4. { Prozedur zur Eingabe der Funktion sowie Festlegung der Grenzen, Achsen,
  5.   Skalierung und Anzahl zu berechnenter Stuetzstellen                       }
  6.  
  7. PROCEDURE Eingabe;
  8.  
  9. VAR q1     : str100;
  10.     br, df : REAL;
  11.     i, j   : INTEGER;
  12.     ch     : CHAR;
  13.  
  14. BEGIN
  15.   FOR i := 1 TO 100 DO q1[i]:=' ';                { Festlegung der Funktion }
  16.   FOR i := 1 TO 255 DO q2[i]:=' ';
  17.   WriteLn('Bitte geben Sie die Funktionsvorschrift ein:');
  18.   Write('f(x)=');
  19.   ReadLn(q1);
  20.   q2 := translat1(q1);
  21.   q2 := translat2(q2);
  22.  
  23.   WriteLn;                                        { Festlegung der Grenzen }
  24.   WriteLn('Bitte geben Sie nun die Grenzen fuer x und y ein:');
  25.   Write('x-min=');
  26.   Read(xmin);
  27.   Write('           x-max=');
  28.   ReadLn(xmax);
  29.   Write('y-min=');
  30.   Read(ymin);
  31.   Write('           y-max=');
  32.   ReadLn(ymax);
  33.  
  34.   REPEAT                                            { Festlegung der Achsen }
  35.     WriteLn;
  36.     Write('Waehlen Sie E)igene Wahl der Achsen');
  37.     Write(' oder C)omputer waehlt Achsen): ');
  38.     Read(Kbd, ch);                   { Zeichen von Tastatur ohne Echo lesen }
  39.     ch := UpCase(ch);
  40.   UNTIL ch IN ['E','C'];
  41.   WriteLn(ch);
  42.   IF ch = 'E' THEN
  43.     BEGIN
  44.       WriteLn;
  45.       REPEAT
  46.         Write('y-Achse an der Stelle x=');
  47.         ReadLn(yax);
  48.         Write('x-Achse an der Stelle y=');
  49.         ReadLn(xax);
  50.       UNTIL (xmin<=xax) AND (xax<=xmax) AND (ymin<=yax) AND (yax<=ymax);
  51.     END
  52.   ELSE
  53.     BEGIN
  54.       df := abs(xmin);
  55.       IF df < abs(xmax) THEN df := abs(xmax);
  56.       i := 2+Trunc(Ln(df)/Ln(10));
  57.       REPEAT
  58.         i := i-1;
  59.         br := Exp(i*Ln(10));
  60.       UNTIL Round(xmax/br+0.499999) > Round(xmin/br+0.499999);
  61.       yax := Round(xmin/br+0.499999)*br;
  62.       df := abs(ymin);
  63.       IF df < abs(ymax) THEN df := abs(ymax);
  64.       i := 2+Trunc(Ln(df)/Ln(10));
  65.       REPEAT
  66.         i := i-1;
  67.         br := Exp(i*Ln(10));
  68.       UNTIL Round(ymax/br+0.499999) > Round(ymin/br+0.499999);
  69.       xax := Round(ymin/br+0.499999)*br;
  70.       WriteLn;
  71.       WriteLn('y-Achse an der Stelle x=',yax);
  72.       WriteLn('x-Achse an der Stelle y=',xax);
  73.     END;
  74.  
  75.   WriteLn;                                      { Festlegung der Skalierung }
  76.   REPEAT
  77.     WriteLn;
  78.     Write('x-Skalierung im Abstand dx=');
  79.     ReadLn(xsc);
  80.     Write('y-Skalierung im Abstand dy=');
  81.     ReadLn(ysc);
  82.   UNTIL (xmax-xmin<160*xsc) AND (ymax-ymin<100*ysc);
  83.  
  84.   WriteLn;
  85.   Write('Anzahl zu berechnenter Stuetzstellen: ');
  86.   ReadLn(s);
  87.  
  88.   WriteLn;
  89.   Write('Druecken Sie eine beliebige Taste zum Ausdruck der Funktion!');
  90.   Read(Kbd, ch);
  91. END;
  92.