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

  1. PROGRAM Kondensator ;
  2.  
  3. { Dieses Programm loest numerisch die Differenzialgleichung der Aufladung     }
  4. { eines Kondensators mit vogeschaltetem Widerstand. (siehe Begleittext.)      }
  5. { Die berechneten Daten werden in die Dateien U.DAT (Spannung) und I.DAT      }
  6. { (Strom) eingeschrieben und können dann mit Hilfe des Programm's GRAPH0EN    }
  7. { ausgewertet werden, d.h. als Graph auf dem Bildschirm dargestellt werden.   }
  8.  
  9. { --------------------------------------------------------------------------- }
  10. {               - Sprache        : TURBO PASCAL 4.0 / 3.0 -                   }
  11. {               - Autor & Rechte : Heinz Hagemeyer & TOOLBOX  -               }
  12. {                                                                             }
  13. { --------------------------------------------------------------------------- }
  14.  
  15. USES     CRT;  (* nur bei TURBO PASCAL 4.0 *)
  16.  
  17. CONST    dt  = 0.1  ;   { = 1/10 Sekunde      }
  18.          te  = 10   ;   { Anzahl der Sekunden }
  19.          tab = 20   ;   { Tabulator           }
  20.  
  21. VAR idaten,             { Dateien als Texte   }
  22.     udaten : Text   ;
  23.     uc,                 { Kondensatorspannung (Volt)  }
  24.     U0,                 { angelegte Spannung  (Volt)  }
  25.     R ,                 { Widerstand          (Ohm )  }
  26.     C ,                 { Kapazitaet          (Farad) }
  27.     t ,                 { Zeit                (Sek.)  }
  28.     ic     : Real   ;   { Strom               (mA  )  }
  29.  
  30.     ts,tn  : Integer;   { Laufvariable zur Bestimmung }
  31.                         { der Zeit                    }
  32.  
  33. { --------------------------------------------------------------------------- }
  34.  
  35. PROCEDURE Schreibe_in_Datei (VAR t : Text; x,y : Real);
  36.  
  37. CONST Klingel = #07;
  38.  
  39. BEGIN
  40.      {$I-}                     { Fehlerueberwachung aus }
  41.           WriteLn (t,x,y );
  42.      {$I+}                     { und wieder ein         }
  43.  
  44.      IF IOResult <> 0 THEN
  45.      BEGIN
  46.           GotoXY (1,1);
  47.           Write  (Klingel,'Diskette voll, Programm wird abgebrochen !');
  48.           HALT;
  49.      END;
  50. END;
  51.  
  52. { --------------------------------------------------------------------------- }
  53.  
  54. PROCEDURE AnfangsWerte (VAR Wid, Spannung, Kapazitaet, Uc, Strom, Zeit : Real);
  55. BEGIN
  56.  
  57.      ClrScr;
  58.      WriteLn ('Geben Sie die Anfangswerte ein : ');
  59.      WriteLn ('z.B. 10 - 1.2E-3 - 1000');
  60.      WriteLn;
  61.      Write   ('Angelgte Spannung in Volt .... : '); ReadLn (Spannung);
  62.      Write   ('Kapazitaet in Farad .......... : '); ReadLn (Kapazitaet);
  63.      Write   ('Widerstand in Ohm ............ : '); ReadLn (Wid);
  64.  
  65.      Uc    := 0;
  66.      Zeit  := 0;
  67.      Strom := Spannung / Wid ;
  68. END;
  69.  
  70. { --------------------------------------------------------------------------- }
  71.  
  72. PROCEDURE Tabellenkopf;
  73. VAR i : Integer;
  74. BEGIN
  75.      WriteLn  ('Ausgabe der berechneten Daten :');
  76.      WriteLn;
  77.      WriteLn  ('t in Sekunden':tab,'Uc in Volt':tab,'i in mA':tab);
  78.      For i := 1 to 3*tab DO Write ('=');
  79.      WriteLn;
  80. END;
  81.  
  82. { --------------------------------------------------------------------------- }
  83.  
  84. PROCEDURE Schreibe;
  85. BEGIN
  86.     Schreibe_in_Datei (idaten,t,1000*ic) ;
  87.     Schreibe_in_Datei (udaten,t,uc)      ;
  88.     WriteLn (t:tab:3,uc:tab:3,1000*ic:tab:3)  ;
  89. END;
  90.  
  91. { --------------------------------------------------------------------------- }
  92.  
  93. BEGIN  { Main }
  94.  
  95.      Assign  (idaten,'i.dat');                    { Dateien vorbereiten      }
  96.      Assign  (udaten,'u.dat');
  97.  
  98.      ReWrite (idaten);                            { und zum Schreiben        }
  99.      ReWrite (udaten);                            { oeffnen.                 }
  100.  
  101.      AnfangsWerte (R, U0, C, Uc, ic, t );
  102.      Tabellenkopf;
  103.      Schreibe;
  104.  
  105.      FOR ts := 0 TO te DO                         { Fuer jede volle Sekunde  }
  106.           FOR tn := 1 TO Round (1/dt) DO          { ein paar mal             }
  107.           BEGIN
  108.                t := ts + dt * tn    ;             { Neue Werte berechnen und }
  109.                Uc := Uc + Ic/C * dt ;
  110.                ic := (U0 - Uc) / R  ;             { in Datei einschreiben    }
  111.                Schreibe             ;
  112.           END;
  113.  
  114.      Close (udaten);                              { Dateien schliessen       }
  115.      Close (idaten);
  116. END.
  117.