home *** CD-ROM | disk | FTP | other *** search
- PROGRAM Kondensator ;
-
- { Dieses Programm loest numerisch die Differenzialgleichung der Aufladung }
- { eines Kondensators mit vogeschaltetem Widerstand. (siehe Begleittext.) }
- { Die berechneten Daten werden in die Dateien U.DAT (Spannung) und I.DAT }
- { (Strom) eingeschrieben und können dann mit Hilfe des Programm's GRAPH0EN }
- { ausgewertet werden, d.h. als Graph auf dem Bildschirm dargestellt werden. }
-
- { --------------------------------------------------------------------------- }
- { - Sprache : TURBO PASCAL 4.0 / 3.0 - }
- { - Autor & Rechte : Heinz Hagemeyer & TOOLBOX - }
- { }
- { --------------------------------------------------------------------------- }
-
- USES CRT; (* nur bei TURBO PASCAL 4.0 *)
-
- CONST dt = 0.1 ; { = 1/10 Sekunde }
- te = 10 ; { Anzahl der Sekunden }
- tab = 20 ; { Tabulator }
-
- VAR idaten, { Dateien als Texte }
- udaten : Text ;
- uc, { Kondensatorspannung (Volt) }
- U0, { angelegte Spannung (Volt) }
- R , { Widerstand (Ohm ) }
- C , { Kapazitaet (Farad) }
- t , { Zeit (Sek.) }
- ic : Real ; { Strom (mA ) }
-
- ts,tn : Integer; { Laufvariable zur Bestimmung }
- { der Zeit }
-
- { --------------------------------------------------------------------------- }
-
- PROCEDURE Schreibe_in_Datei (VAR t : Text; x,y : Real);
-
- CONST Klingel = #07;
-
- BEGIN
- {$I-} { Fehlerueberwachung aus }
- WriteLn (t,x,y );
- {$I+} { und wieder ein }
-
- IF IOResult <> 0 THEN
- BEGIN
- GotoXY (1,1);
- Write (Klingel,'Diskette voll, Programm wird abgebrochen !');
- HALT;
- END;
- END;
-
- { --------------------------------------------------------------------------- }
-
- PROCEDURE AnfangsWerte (VAR Wid, Spannung, Kapazitaet, Uc, Strom, Zeit : Real);
- BEGIN
-
- ClrScr;
- WriteLn ('Geben Sie die Anfangswerte ein : ');
- WriteLn ('z.B. 10 - 1.2E-3 - 1000');
- WriteLn;
- Write ('Angelgte Spannung in Volt .... : '); ReadLn (Spannung);
- Write ('Kapazitaet in Farad .......... : '); ReadLn (Kapazitaet);
- Write ('Widerstand in Ohm ............ : '); ReadLn (Wid);
-
- Uc := 0;
- Zeit := 0;
- Strom := Spannung / Wid ;
- END;
-
- { --------------------------------------------------------------------------- }
-
- PROCEDURE Tabellenkopf;
- VAR i : Integer;
- BEGIN
- WriteLn ('Ausgabe der berechneten Daten :');
- WriteLn;
- WriteLn ('t in Sekunden':tab,'Uc in Volt':tab,'i in mA':tab);
- For i := 1 to 3*tab DO Write ('=');
- WriteLn;
- END;
-
- { --------------------------------------------------------------------------- }
-
- PROCEDURE Schreibe;
- BEGIN
- Schreibe_in_Datei (idaten,t,1000*ic) ;
- Schreibe_in_Datei (udaten,t,uc) ;
- WriteLn (t:tab:3,uc:tab:3,1000*ic:tab:3) ;
- END;
-
- { --------------------------------------------------------------------------- }
-
- BEGIN { Main }
-
- Assign (idaten,'i.dat'); { Dateien vorbereiten }
- Assign (udaten,'u.dat');
-
- ReWrite (idaten); { und zum Schreiben }
- ReWrite (udaten); { oeffnen. }
-
- AnfangsWerte (R, U0, C, Uc, ic, t );
- Tabellenkopf;
- Schreibe;
-
- FOR ts := 0 TO te DO { Fuer jede volle Sekunde }
- FOR tn := 1 TO Round (1/dt) DO { ein paar mal }
- BEGIN
- t := ts + dt * tn ; { Neue Werte berechnen und }
- Uc := Uc + Ic/C * dt ;
- ic := (U0 - Uc) / R ; { in Datei einschreiben }
- Schreibe ;
- END;
-
- Close (udaten); { Dateien schliessen }
- Close (idaten);
- END.