home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / elan / demo / euler.eln < prev    next >
Text File  |  1987-08-18  |  1KB  |  61 lines

  1.  
  2. REAL PROC wind force (REAL CONST x, y):
  3.   300.0 * y / (300.0 * x - 100.0 * sqrt (x * x + y * y))
  4. ENDPROC wind force;
  5.  
  6. program:
  7.   LET x scale = 34.0;
  8.   LET y scale = 10.0;
  9.   LET l = 20.0;
  10.   choose starting point;
  11.   ask stepsize;
  12.   REP
  13.     compute next ordinate;
  14.     increment abscissa;
  15.     show next point
  16.   UNTIL in haven
  17.   ENDREP.
  18.  
  19.   choose starting point:
  20.     # Based on an idea of L.Klingen #
  21.     put ("This program simulates a flight with sidewind.");
  22.     line;
  23.     REAL VAR x :: 2.0, y :: 2.0.
  24.   
  25.   ask stepsize:
  26.     REAL VAR step;
  27.     REP
  28.       line;
  29.       put ("Stepsize (small,negative)?");
  30.       get (step)
  31.     UNTIL - 0.5 < step AND step < 0.0
  32.     ENDREP.
  33.   
  34.   compute next ordinate:
  35.     perform predictorstep;
  36.     perform correctorstep.
  37.   
  38.     perform predictorstep:
  39.       REAL VAR y pred :: y + wind force (x, y) * step.
  40.     
  41.     perform correctorstep:
  42.       UPTO 3
  43.       REP y pred := y + 0.5 * (wind force (x, y) + wind force (x + step, y pred)) * step
  44.       ENDREP;
  45.       y := y pred.
  46.     
  47.   increment abscissa:
  48.     x INCR step.
  49.   
  50.   show next point:
  51.     IF 0.0 <= x AND x < 2.0 AND 0.0 <= y AND y < 2.0
  52.     THEN
  53.       INT CONST i :: 1 + round (x scale * x), j :: 1 + round (l - y scale * y);
  54.       cursor (i, j);
  55.       put ("*")
  56.     FI.
  57.   
  58.   in haven:
  59.     x <= 0.0.
  60.   
  61.