home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / spezial / 15 / graphen / schwing.pas < prev   
Encoding:
Pascal/Delphi Source File  |  1989-05-19  |  4.4 KB  |  119 lines

  1. PROGRAM Schwingungung ;
  2.  
  3. { Dieses Programm loest numerisch die Differenzialgleichung einer gedämpften  }
  4. { Schwingung. (siehe Begleittext.)                                            }
  5.  
  6. { Die berechneten Daten werden in die Dateien S.DAT (Weg) und V.DAT (Geschwin-}
  7. { digkeit) eingeschrieben und koennen dann mit Hilfe des Programm's GRAPHEN   }
  8. { ausgewertet werden, d.h. als Graph auf dem Bildschirm dargestellt werden.   }
  9.  
  10. { --------------------------------------------------------------------------- }
  11. {                                                                             }
  12. {               - Sprache        : TURBO PASCAL 4.0 / 3.0 -                   }
  13. {               - Autor & Rechte : 1989 Heinz Hagemeyer & TOOLBOX  -          }
  14. {                                                                             }
  15. { --------------------------------------------------------------------------- }
  16.  
  17. USES     CRT; (* Bei TURBO PASCAL 4.0 *)
  18.  
  19. CONST    dt  = 0.1  ;   { = 1/10 Sekunde      }
  20.          te  = 15   ;   { Anzahl der Sekunden }
  21.          tab = 20   ;   { Tabulator           }
  22.  
  23. VAR vdaten,             { Dateien als Texte   }
  24.     sdaten : Text   ;
  25.  
  26.     s,                  { Weg                 }
  27.     v,                  { Geschwindigkeit     }
  28.     t,                  { Zeit                }
  29.     m,                  { Masse               }
  30.     Fk,                 { Federkonstante      }
  31.     D,                  { Daempfungsfaktor    }
  32.     a      : Real   ;   { Beschleunigung      }
  33.  
  34.     ts,tn  : Integer;
  35.  
  36. { --------------------------------------------------------------------------- }
  37.  
  38. PROCEDURE Schreibe_in_Datei (VAR t : Text; x,y : Real);
  39.  
  40. CONST Klingel = #07;
  41.  
  42. BEGIN
  43.      {$I-}                     { Fehlerueberwachung aus }
  44.           WriteLn (t,x,'  ',y );
  45.      {$I+}                     { und wieder ein         }
  46.  
  47.      IF IOResult <> 0 THEN
  48.      BEGIN
  49.           GotoXY (1,1);
  50.           Write  (Klingel,'Diskette voll, Programm wird abgebrochen !');
  51.           HALT;
  52.      END;
  53. END;
  54.  
  55. { --------------------------------------------------------------------------- }
  56.  
  57. PROCEDURE AnfangsWerte (VAR weg, Geschw, Feder, Daempfung, Masse, t : Real);
  58. BEGIN
  59.      ClrScr;
  60.      WriteLn ('Geben Sie die Anfangswerte ein : ');
  61.      WriteLn ('z.B. 5 - 0 - 10 - 2 - 2 fuer eine gedaempfte Schwingung');
  62.      WriteLn;
  63.      Write   ('Auslenkung in cm  ............ : '); ReadLn (Weg);
  64.      Write   ('Anfangsgeschwindigkeit in cm/s : '); ReadLn (Geschw);
  65.      Write   ('Fedenkonstante in N/cm ....... : '); ReadLn (Feder);
  66.      Write   ('Daempfung in 1/s ............. : '); ReadLn (Daempfung);
  67.      Write   ('Masse des Koerpers in g ...... : '); ReadLn (Masse);
  68.      t := 0;
  69. END;
  70.  
  71. { --------------------------------------------------------------------------- }
  72.  
  73. PROCEDURE Tabellenkopf;
  74. VAR i : Integer;
  75. BEGIN
  76.      WriteLn  ('Ausgabe der berechneten Daten :');
  77.      WriteLn;
  78.      WriteLn  ('Zeit':tab,'Weg':tab,'Geschwindigkeit':tab);
  79.      For i := 1 to 3*tab DO Write ('=');
  80.      WriteLn;
  81. END;
  82.  
  83. { -------------------------------------------------------------------------- }
  84.  
  85. PROCEDURE Schreibe;
  86. BEGIN
  87.     Schreibe_in_Datei (vdaten,t,v)   ;      { Geschwindigkeit und      }
  88.     Schreibe_in_Datei (sdaten,t,s)   ;      { Weg in die Datei !       }
  89.     WriteLn (t:tab:3,s:tab:3,v:tab:3);      { Bildschrimkontrolle      }
  90. END;
  91.  
  92. { -------------------------------------------------------------------------- }
  93.  
  94. BEGIN  { Main }
  95.  
  96.      Assign  (vdaten,'v.dat');                  { Dateien vorbereiten      }
  97.      Assign  (sdaten,'s.dat');
  98.  
  99.      ReWrite (vdaten);                            { und zum Schreiben        }
  100.      ReWrite (sdaten);                            { oeffnen.                 }
  101.  
  102.      AnfangsWerte (s,v,Fk,d,m,t);
  103.      Tabellenkopf;
  104.      Schreibe;
  105.  
  106.      FOR ts := 0 TO te DO                         { Fuer jede volle Sekunde  }
  107.           FOR tn := 1 TO Round (1/dt)  DO         { ein paar mal             }
  108.           BEGIN
  109.                t := ts + dt * tn          ;       { Werte berechnen          }
  110.                a := -(s * Fk + V * d) / m ;
  111.                v := v + a * dt            ;
  112.                s := s  + v  * dt          ;
  113.                Schreibe                   ;       { und in Dateien schreiben }
  114.           END;
  115.  
  116.      Close (sdaten);                              { Dateien schliessen       }
  117.      Close (vdaten);
  118. END.
  119.