home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / spezial / 15 / graphen / fall.pas next >
Encoding:
Pascal/Delphi Source File  |  1989-05-19  |  3.8 KB  |  115 lines

  1. PROGRAM Freier_Fall;
  2.  
  3. { Dieses Programm loest numerisch die Differenzialgleichung des Freien Fall's }
  4. { mit Beruecksichtigung des Luftwiderstandes. Dabei wird angenommen, dass der }
  5. { Luftwiderstand des fallenden Koerpers proportional zu v^2 ist. Zum Zeitpunkt}
  6. { t = 0 ist sowohl s = 0 als auch v = 0.                                      }
  7.  
  8. { Die berechneten Daten werden in die Dateien FALL-S.DAT und FALL-V.DAT einge-}
  9. { schrieben und koennen dann mit Hilfe des Programm's GRPAHEN ausgewertet werden}
  10.  
  11. { --------------------------------------------------------------------------- }
  12. {               - Sprache     :  TURBO PASCAL 4.0 / 3.0 -                     }
  13. {               - Copyright  (c) 1989  Heinz Hagemeyer  -                     }
  14. {                      - & TOOLBOX International -                            }
  15. {                                                                             }
  16. { --------------------------------------------------------------------------- }
  17.  
  18. USES CRT;   (* bei TURBO - PASCAL 4.0 *)
  19.  
  20. CONST    dt = 0.1  ;     { kleinste Zeiteinheit }
  21.          g  = 9.81 ;     { Erdbeschleunigung    }
  22.          tab= 20   ;     { Tabulator            }
  23.  
  24. VAR vd,sd   : Text ;
  25.     s,                   { Weg                  }
  26.     v,                   { Geschwindigkeit      }
  27.     t,                   { Zeit                 }
  28.     a,                   { Beschleunigung       }
  29.    cw       : Real   ;   { Luftwiderstand       }
  30.     ts,tn   : Integer;
  31.  
  32. { --------------------------------------------------------------------------- }
  33.  
  34. PROCEDURE Anfangswerte (VAR Lw,s,v,t : Real);
  35. BEGIN
  36.      ClrScr;
  37.      Write  ('Geben Sie den gewuenschten Luftwiderstand ein : ');
  38.      ReadLn (Lw);
  39.  
  40.      s := 0;
  41.      v := 0;
  42.      t := 0;
  43. END;
  44.  
  45. { --------------------------------------------------------------------------- }
  46.  
  47. PROCEDURE Tabellenkopf;
  48. VAR i : Integer;
  49. BEGIN
  50.      WriteLn  ('Ausgabe der berechneten Daten :');
  51.      WriteLn;
  52.      WriteLn  ('Zeit':tab,'Weg':tab,'Geschwindigkeit':tab);
  53.      For i := 1 to 3*tab DO Write ('=');
  54.      WriteLn;
  55. END;
  56.  
  57. { --------------------------------------------------------------------------- }
  58.  
  59. PROCEDURE Schreibe_in_Datei (VAR t : Text; x,y : Real);
  60.  
  61. CONST Klingel = #07;
  62.  
  63. BEGIN
  64.      {$I-}                     { Fehlerueberwachung aus }
  65.           WriteLn (t,x,y );
  66.      {$I+}                     { und wieder ein         }
  67.  
  68.      IF IOResult <> 0 THEN
  69.      BEGIN
  70.           GotoXY (1,1);
  71.           Write  (Klingel,'Diskette voll, Programm wird abgebrochen !');
  72.           HALT;
  73.      END;
  74. END;
  75.  
  76. { --------------------------------------------------------------------------- }
  77.  
  78. PROCEDURE Schreibe;
  79. BEGIN
  80.      Schreibe_in_Datei (vd,t,v) ;
  81.      Schreibe_in_Datei (sd,t,s) ;
  82.      WriteLn (t:tab:2,s:tab:2,v:tab:2);
  83. END;
  84.  
  85. { --------------------------------------------------------------------------- }
  86.  
  87. BEGIN    { Main }
  88.  
  89.      Assign  (vd,'fall-v.dat');     { Vorbereitung der Dateien         }
  90.      Assign  (sd,'fall-s.dat');
  91.      Rewrite (vd);                  { Oeffne Datei zum Schreiben       }
  92.      ReWrite (sd);
  93.  
  94.      Anfangswerte (cw,s,v,t);
  95.      Tabellenkopf;
  96.      Schreibe;                      { Anfangswerte in Datei ausgeben   }
  97.  
  98.      FOR ts := 0 TO 5 DO            {  Fuer jede Sekunde               }
  99.      BEGIN
  100.           FOR tn := 1 TO Round (1 / dt)  DO
  101.           BEGIN
  102.                t := ts + dt * tn          ;    { Werte berechnen       }
  103.                a := g  - cw * sqr(v)      ;
  104.                v := v  + a  * dt          ;
  105.                s := s  + v  * dt          ;
  106.  
  107.                Schreibe                   ;    { und in Datei ausgeben }
  108.  
  109.           END;
  110.      END;
  111.  
  112.      Close (sd);                    { Dateien schliessen               }
  113.      Close (vd);
  114. END.
  115.