(*
Fachhochschule Wiesbaden 14.01.1996
Fachbereich Physikalische Technik










Programm zur Berechnung der Bahnkurve eines Teilchens
beim Durchgang durch einen Quadrupol.




Fach: Einführung in die theoretische Physik




Erstellt von: Jochen Lenck
Mat. - Nr. 918418

am: 21.06.1996




Das folgende Programm, geschrieben in Turbo Pascal 5.5 berechnet die Bahn- kurven eines Teilchens, das durch einen Quadrupol geschossen wird. Die Berechnung der Bahnkurve erfolgt mit dem Verfahren nach Runge - Kutta. Dabei sind die unten aufgeführten Parameter veränderbar. Das Hauptmenue gestattet die Wahl, die Werte zu ändern, sich die Kurve mit den aktuellen Werten anzeigen zu lassen, die Standardwerte zu laden oder das Programm zu verlassen. Die Werte werden im SI - Einheiten - System angegeben und sind folglich auch in dieser Einheit anzugeben bei Werteänderungen. Lässt man sich die Kurve direkt Anzeigen ohne Änderung der Werte, wird eine Kurve mit den eingestellten Standardwerten gezeigt. Diese Werte wurden so gewählt das man den Effekt des Quadrupols erkennt. Folgende Werte wurden daf¨r gewählt:

Energie = 43 eV
Ladung(+\-) = 1
Molgew. = 18 g/mol
Alpha = 30 ø
Beta = 25 ø
B(x) - Feld = 0;
B(y) - Feld = 0;
B(z) - Feld = 0;
x = 0;
y = 0;
z = -0.05 m
Radius = 0.06 m
Länge = 0.09 m
Gleichspanung = 41.362
Verhältnis = 0.1671
Frequenz = 2.3 Mhz
Schrittweite = 1E-10
Zoomfaktor = 1






Symbolliste

a : Variable
Alpha : Winkel des Teilchens gegen die x - Achse
Beta : Winkel des Teilchens gegen die z - Achse
BFeldx,BFeldy,BFeldz: Magnetfeld in den einzelnen Achsrichtungen
EFeldx,EFeldy,EFeldz: Elektrisches Feld in den einzelnen Achsrichtungen
code : Variable zur Fehlerabfrage bei Falscheingabe von Werten
dphi : Winkeländerung
Energie : Energie des Teilchens in J
Energiev : Energie des Teilchens in eV
faktor : Zusammenfassung von Vorfaktoren bei der Berechnung des Magnetfeldes
Feld_konst : Magnetische Feldkonstante
geradex,geradey,geradez: St¨tzstellen von geraden Werten der Ortskoordinaten
graf_Pfad : Pfadangabe für den Grafiktreiber
grDriver : Variable für den Grafiktreiber
grMode : Variable für den Grafikmodus
h : Schrittweite im Runge - Kutta - Verfahren
hilfsx,hilfsy,hilfsz: Speichern der vorherigen Ortskoordinaten
hilfsvx,hilfsvy,hilfsvz: Speichern der vorherigen Geschwindigkeitskoordinaten
k1x..k4z : Ortskoordinaten des Teilchens an den Stützstellen im Runge - Kutta - Verfahren
Ladung : Ladung des Teilchens (mit Vorzeichen angeben)
lese : Variable die durch das erste gelesene Zeichen im Menue Werte
durch zeichen festgelegt wird
Masse : Masse des Teilchens in kg
Molgew : Teilchengewicht in Gramm pro Mol
m1x..m4z : Geschwindigkeitswerte des Teilchens an den Stützstellen im Runge - Kutta - Verfahren
phi : Winkel des Magnetfeldes
Radius : Geringster Abstand der Platten zur Achsmitte
rAlpha,rBeta : Winkel in Bogenmaá
Schritt : Anzahl der Stützstellen bei der Integration nach Simpson
Gleichspannung : Gleichspannung der Platten
szahl : Variable, die den eingelesenen String als Variable enthält
ungeradex,ungeradey,ungeradz: Stützstellen von ungeraden Werten der Ortrskoordinaten
Verhältnis : Quotient: U/V
vx,vy,vz : Geschwindigkeiten des Teilchens in den einzelnen Achsrichtungen
v0 : Gesamtgeschwindigkeit des Teilchens
w : Frequenz der Wechselspannung
x,y,z : Ortskoordinaten des Teilchens
xx,yy,zz : Angepaáte Ortskoordinaten des Teilchens an den Bildschirm
y : Speichert den y - Wert des Cursors im Menue Abfrage
Wahl1 : Variable welche die Wahl des Menue`s angibt
zahl : Variable die den eingegeben Wert als Integertyp enthält
zoomfak : Variable zur Anpassung der Bahnkurve des Teilchens an den Bildschirm
zeichen : Erster Eingabewert im Menue Werte. Bestimmt ob der Wert geändert wird,
gelassen wird oder das Menue beendet wird
zzeichen : Variable die den Wert der Variablen "Zeichen" als Zahlenwert enthält


Der Buchstabe s vor der Variablen besagt, dass diese Variable als Stringtyp
vorliegt. *)



program Quadrupol;
{$N+}
uses Crt,Graph,Dos;

Var
x,y,z,rx,ry,rz,h,v0 : Extended;
Ladung,Masse,Energie,Energiev: Extended;
BFeldz,BFeldy,BFeldx : Extended;
EFeldx,EFeldy,EFeldz : Extended;
vx,vy,vz,zahl : Extended;
grDriver,grMode : Integer;
n,lese,tast : Integer;
Alpha,Beta : Real;
U,V,Radius,Zoomfak : Real;
Wahl1,taste : Char;
Verhaeltnis,w,f,t : Real;
Laenge,Frequenz : Real;
Molgew : Real;

procedure Eroeff;
begin
Clrscr;
Clearviewport;
setbkcolor(8);
setcolor(11);
Repeat
begin
settextstyle(2,HorizDir,6);
Outtextxy( 10, 10,'Fachhochschule Wiesbaden');
Outtextxy( 10, 25,'Fachbereich Physikalische Technik');
Outtextxy(120, 80,'Programm zur Berechnung der Bahnkurve eines');
Outtextxy(120,100,'Teilchens beim Durchgang durch einen Quadrupol');
Outtextxy(120,140,'Fach: Einführung theoretische Physik');
Outtextxy(120,160,'Erstellt von: Jochen Lenck');
Outtextxy(120,180,'Mat. - Nr. 918418');
Outtextxy(120,200,'Letzte Änderung am 21.06.1996');
Outtextxy(120,350,'Weiter mit Leertaste.');
taste:=Readkey;
tast :=Ord(taste);
settextstyle(0,0,0);
end;
Until (tast=32);
end;

procedure Menue;
begin {Hauptmenue mit Wahl: Werteändern,}
ClrScr; {Kurve darstellen, Standardwerte laden}
Clearviewport;
directvideo:=false;
setbkcolor(8);
textcolor(11);
Gotoxy(20, 5); Writeln('Flugbahn von Teilchen durch einen Quadrupol');
Gotoxy(20, 8); Writeln('Werte ändern [1]');
Gotoxy(20,10); Writeln('Kurve darstellen [2]');
Gotoxy(20,12); Writeln('Standardwerte [3]');
Gotoxy(20,14); Writeln('Ende [4]');
Gotoxy(20,17); Writeln('Eingabe der Wahl: ');
Gotoxy(40,17); Readln(Wahl1);
end;

procedure Abfrage; {Abfrage, ob Taste gedr¨ckt}
Var
zzeichen,y,code : Integer;
szahl : String;
zeichen : Char;
begin {wurde, um den Wert zu bestätigen oder nicht}
Repeat
begin
y:=Wherey; {Festhalten der y - Position des Cursors}
Gotoxy(50,y); Write('>'); {Anzeige des änderbaren Wertes}
zeichen :=Readkey;
zzeichen:=Ord(zeichen);
lese:=0;
If zzeichen = 13 then
begin {Wenn eingegebenes Zeichen dann Wert ändern}
Repeat
lese:=1;
Gotoxy(55,y); Writeln(' ');
Gotoxy(55,y); Readln(szahl);
Val(szahl,zahl,code);
Until(code = 0);
end;
If zzeichen = 27 then
begin
lese:=2;
Gotoxy(50,y); Writeln(' ');
end;
end;
Until((zzeichen = 13) or (zzeichen = 27) or (zzeichen = 32));
end;

procedure Werte; {Eingabe der Werte: Ladung, Masse, Energie}
Var {Koordinaten des Einschuápunktes, Strom der}
Wert: Integer; {das Magnetfeld erzeugt, Radius der Spule}
begin
ClrScr;
Clearviewport;
directvideo := false;
textcolor(11);
setbkcolor(8);
Gotoxy(15, 2); Writeln('Flugbahn von Teilchen durch einen Quadrupol');
Gotoxy(13, 4); Writeln(' für neuen Wert sonst Leertaste');
Gotoxy(13, 5); Writeln('Beenden mit ');
Repeat {Ausgabe der Werte und einlesen der neuen Werte}
begin
Gotoxy( 5, 7); Writeln('Teilchenenergie [eV]: '); Gotoxy(55, 7); Writeln(Energiev:20);
Gotoxy(50, 7); Abfrage; if lese = 1 then Energiev:=zahl; if lese = 2 then exit; Gotoxy(55, 7); Writeln(energiev:20);
Gotoxy( 5, 8); Writeln('Teilchenladung [eV]: '); Gotoxy(55, 8); Writeln(Ladung :20);
Gotoxy(50, 8); Abfrage; if lese = 1 then Ladung:= zahl; if lese = 2 then exit; Gotoxy(55, 8); Writeln(Ladung :20);
Gotoxy( 5, 9); Writeln('Teilchengewicht [g/mol]: '); Gotoxy(55, 9); Writeln(Molgew :20);
Gotoxy(50, 9); Abfrage; if lese = 1 then Molgew:= zahl; if lese = 2 then exit; Gotoxy(55, 9); Writeln(Molgew :20);
Gotoxy( 5,10); Writeln('x - y -Einschuáwinkel [ø]: '); Gotoxy(55,10); Writeln(Alpha :20);
Gotoxy(50,10); Abfrage; if lese = 1 then Alpha := zahl; if lese = 2 then exit; Gotoxy(55,10); Writeln(Alpha :20);
Gotoxy( 5,11); Writeln('z - y -Einschuáwinkel [ø]: '); Gotoxy(55,11); Writeln(Beta :20);
Gotoxy(50,11); Abfrage; if lese = 1 then Beta := zahl; if lese = 2 then exit; Gotoxy(55,11); Writeln(Beta :20);
Gotoxy( 5,12); Writeln('B - Feld in X - Richtung [T]: '); Gotoxy(55,12); Writeln(BFeldx :20);
Gotoxy(50,12); Abfrage; if lese = 1 then BFeldx:= zahl; if lese = 2 then exit; Gotoxy(55,12); Writeln(BFeldx :20);
Gotoxy( 5,13); Writeln('B - Feld in Y - Richtung [T]: '); Gotoxy(55,13); Writeln(BFeldy :20);
Gotoxy(50,13); Abfrage; if lese = 1 then BFeldy:= zahl; if lese = 2 then exit; Gotoxy(55,13); Writeln(BFeldy :20);
Gotoxy( 5,14); Writeln('B - Feld in Z - Richtung [T]: '); Gotoxy(55,14); Writeln(BFeldz :20);
Gotoxy(50,14); Abfrage; if lese = 1 then BFeldz:= zahl; if lese = 2 then exit; Gotoxy(55,14); Writeln(BFeldz :20);
Gotoxy( 5,15); Writeln('Einschuákoordinate auf der X - Achse [m]: '); Gotoxy(55,15); Writeln(rx :20);
Gotoxy(50,15); Abfrage; if lese = 1 then rx:= zahl; if lese = 2 then exit; Gotoxy(55,15); Writeln(rx :20);
Gotoxy( 5,16); Writeln('Einschuákoordinate auf der y - Achse [m]: '); Gotoxy(55,16); Writeln(ry :20);
Gotoxy(50,16); Abfrage; if lese = 1 then ry:= zahl; if lese = 2 then exit; Gotoxy(55,16); Writeln(ry :20);
Gotoxy( 5,17); Writeln('Einschuákoordinate auf der z - Achse [m]: '); Gotoxy(55,17); Writeln(rz :20);
Gotoxy(50,17); Abfrage; if lese = 1 then rz:= zahl; if lese = 2 then exit; Gotoxy(55,17); Writeln(rz :20);
Gotoxy( 5,18); Writeln('Radius [m]: '); Gotoxy(55,18); Writeln(Radius :20);
Gotoxy(50,18); Abfrage; if lese = 1 then Radius:= zahl; if lese = 2 then exit; Gotoxy(55,18); Writeln(Radius :20);
Gotoxy( 5,19); Writeln('Gleichspannung [V]: '); Gotoxy(55,19); Writeln(U:20);
Gotoxy(50,19); Writeln; if lese = 1 then U:= zahl; if lese=2 then exit;Gotoxy(55,19);Writeln(U:20);
Gotoxy( 5,20); Writeln('Schrittweite '); Gotoxy(55,20); Writeln(h :20);
Gotoxy(50,20); Abfrage; if lese = 1 then h:= zahl; if lese = 2 then exit; Gotoxy(55,20); Writeln(h :20);
Gotoxy( 5,21); Writeln('Zoomfaktor (Maástab) '); Gotoxy(55,21); Writeln(Zoomfak:20);
Gotoxy(50,21); Abfrage; if lese = 1 then Zoomfak:=zahl; if lese = 2 then exit; Gotoxy(55,21); Writeln(zoomfak:20);
Gotoxy( 5,23); Writeln('Frequenz [Hz]'); Gotoxy(55,23); Writeln(Frequenz:20);
Gotoxy(50,23); Writeln; if lese = 1 then Frequenz:=zahl; if lese = 2 then exit; Gotoxy(55,23); Writeln(w:20);
Gotoxy( 5,24); Writeln('Verh„ltnis(U/V) '); Gotoxy(55,24); Writeln(Verhaeltnis:20);
Gotoxy(50,24); Writeln; if lese = 1 then Verhaeltnis:=zahl; if lese = 2 then exit; Gotoxy(55,24); Writeln(Verhaeltnis:20);
x:=rx; y:=ry; z:=rz;
end;
Until (n = 13);
end;

procedure Werte_Ausg;
Var
sMolgew,sLadung,sBFeldx,sBFeldy,sBFeldz,sx,sy,sz,sAlpha: string;
sBeta,sRadius,sU,sZoomfak,sEnergiev,sw: string;
sVerhaeltnis: string; begin
setcolor(8); {Umwandlung der Extended - Werte in Strings,}
Str(molgew ,sMolgew); {um sie in der Grafik darzustellen}
Str(ladung ,sLadung);
Str(Energiev ,sEnergiev);
Str(BFeldx ,sBFeldx);
Str(BFeldy ,sBFeldy);
Str(BFeldz ,sBFeldz);
Str(alpha ,sAlpha);
Str(Beta ,sBeta);
Str(Radius ,sRadius);
Str(Zoomfak ,sZoomfak);
Str(w ,sw);
Str(Verhaeltnis,sVerhaeltnis);
Str(U ,sU);
Str(rx,sx); Str(ry,sy); Str(rz,sz); {Ausgabe der Umgewandelten Startwerte}
(* Outtextxy(10,300,'Die Startwerte waren:' ); *)
Outtextxy(10,300,'Molgew: '+sMolgew+'' ); Outtextxy(300,300,'g/mol');
Outtextxy(10,310,'Ladung: '+sLadung+'' ); Outtextxy(300,310,' ' );
Outtextxy(10,320,'Energiev: '+sEnergiev+''); Outtextxy(300,320,'eV');
Outtextxy(10,330,'B(x)-Feld: '+sBFeldx+'' ); Outtextxy(300,330,'V/m');
Outtextxy(10,340,'B(y)-Feld: '+sBFeldy+'' ); Outtextxy(300,340,'V/m');
Outtextxy(10,350,'B(z)-Feld: '+sBFeldz+'' ); Outtextxy(300,350,'V/m');
Outtextxy(10,360,'x: '+sx+'' ); Outtextxy(300,360,'m');
Outtextxy(10,370,'y: '+sy+'' ); Outtextxy(300,370,'m');
Outtextxy(10,380,'z: '+sz+'' ); Outtextxy(300,380,'m');
Outtextxy(10,390,'Alpha: '+sAlpha+'' ); Outtextxy(300,390,'ø');
Outtextxy(10,400,'Beta: '+sBeta+'' ); Outtextxy(300,400,'ø');
Outtextxy(10,410,'Radius: '+sRadius+'' ); Outtextxy(300,410,'m');
Outtextxy(10,420,'Gleichspg '+sU+'' ); Outtextxy(300,420,'V');
Outtextxy(10,430,'Zoomfaktor:'+sZoomfak+'' ); Outtextxy(300,430,' ');

Outtextxy(10,450,'Frequenz: '+sw+'' ); Outtextxy(300,450,'Hz');
Outtextxy(10,460,'Verhältnis '+sVerhaeltnis+''); Outtextxy(300,460,'');
setcolor(11);
Outtextxy(325,472,'Beenden mit Abbruch mit ');
end;


procedure Koord;
Var
xskal,yskal : Integer;
xxskal,yyskal: Integer;
begin
Clrscr;
Clearviewport;
setbkcolor(3);
setcolor(6);
Line( 0,150,600,150); {z - Achse}
Line(294,146,300,150); {Pfeil1 z - Achse}
Line(294,154,300,150);
Outtextxy(280,155,'z'); {Beschriftung1 z - Achse}
Line(594,146,600,150); {Pfeil2 z - Achse}
Line(594,154,600,150);
Outtextxy(580,155,'z'); {Beschriftung2 z - Achse}
Line(5 ,6, 0, 0); {Pfeil1 x - Achse}
Outtextxy( 10,5,'x'); {Beschriftung x - Achse}
Line(296, 6,300, 0); {Pfeil y - Achse}
Line(304, 6,300, 0);
Outtextxy(310,5,'y'); {Beschriftung y - Achse}
Line(370,390,530,390); {x - Achse}
Line(528,386,532,390); {Pfeil x - Achse}
Line(528,394,532,390);
Outtextxy(435,315,'y'); {Beschriftung x - Achse}
Line(450,310,450,470); {y - Achse}
Line(446,314,450,310); {Pfeil y - Achse}
Line(454,314,450,310);
Outtextxy(535,395,'x'); {Beschriftung y - Achse}
(* xskal:=0;
For xskal := 1 to 20 do
begin
Line(xskal*30,148,xskal*30,152); {Skalierung der Z - Achse}
end;
yskal:=0;
For yskal := 1 to 20 do
begin
Line(298,yskal*15,302,yskal*15);
end;
xxskal:=0;
For xxskal := 1 to 20 do
begin
Line(xxskal*8+370,388,xxskal*8+370,392);
end;
yyskal:=0;
For yyskal := 1 to 20 do
begin
Line(448,yyskal*8+310,452,yyskal*8+310);
end;*)
Rectangle( 0, 0,300,300);
Rectangle(300, 0,600,300);
Rectangle(370,310,530,470);
Werte_Ausg;
end;


procedure Runge;
Var {Lösung der Differentialgleichung mit Hilfe }
k1x,k1y,k1z,k2x,k2y,k2z,k3x,k3y,k3z,k4x,k4y,k4z: Extended; {des Runge - Kutta - Verfahren}
m1x,m1y,m1z,m2x,m2y,m2z,m3x,m3y,m3z,m4x,m4y,m4z: Extended;
a,hilfsx,hilfsy,hilfsz : Extended;
hilfsvx,hilfsvy,hilfsvz: Extended;
m : Integer;
Sinus,Sinusx : Extended;
Cosins,Cosinx : Extended;
argu,arguy : Extended;
sinh,sinhy : Extended;
Cosinh,Cosinhy: Extended;
begin
Masse:=Molgew/6.0221367E23;
a:= Ladung/Masse;
V:=U/Verhaeltnis;
EFeldz:=0; m:=0; argu:=0; arguy:=0;
Repeat
begin
argu := (2*m+1)*pi/2;
arguy := (2*m+1)/Radius*pi/2*y;
Sinh := (exp(argu)-exp(-argu))/2;
Sinhy := (exp(arguy)-exp(-arguy))/2;
Cosinh := (exp(argu)+exp(-argu))/2;
Cosinhy := (exp(arguy)+exp(-arguy))/2;
EFeldx := ( 4*U/Radius*sin(argu)/Cosinh*sin(argu*x/Radius)*Cosinhy)+EFeldx;
EFeldy := (-4*U/Radius*sin(argu)/Cosinh*Cos(argu*x/Radius)*Sinhy )+EFeldy;
m:=m+1;
end;
Until (m >= 10);

hilfsx := x;
hilfsy := y;
hilfsz := z;

k1x := h * vx; {1. Schritt im Runge Kutta}
k1y := h * vy;
k1z := h * vz;
m1x := h * (a*((U+V*cos(w*h))*EFeldx + vy * BFeldz - vz * BFeldy));
m1y := h * (a*((U+V*cos(w*h))*EFeldy + vz * BFeldx - vx * BFeldz));
m1z := h * (a*((U+V*cos(w*h))*EFeldz + vx * BFeldy - vy * BFeldx));
x := hilfsx + k1x/2;
y := hilfsy + k1y/2;
z := hilfsz + k1z/2;

k2x := h * (vx + m1x/2); {2. Schritt im Runge Kutta}
k2y := h * (vy + m1y/2);
k2z := h * (vz + m1z/2);
m2x := h * (a*((U+V*cos(w*h))*EFeldx + (vy + m1y / 2) * BFeldz - (vz + m1z / 2) * BFeldy));
m2y := h * (a*((U+V*cos(w*h))*EFeldy + (vz + m1z / 2) * BFeldx - (vx + m1x / 2) * BFeldz));
m2z := h * (a*((U+V*cos(w*h))*EFeldz + (vx + m1x / 2) * BFeldy - (vy + m1y / 2) * BFeldx));
x := hilfsx + k2x/2;
y := hilfsy + k2y/2;
z := hilfsz + k2z/2;

k3x := h * (vx + m2x/2); {3.Schritt im Runge Kutta}
k3y := h * (vy + m2y/2);
k3z := h * (vz + m2z/2);
m3x := h * (a*((U+V*cos(w*h))*EFeldx + (vy + m2y / 2) * BFeldz - (vz + m2z / 2) * BFeldy));
m3y := h * (a*((U+V*cos(w*h))*EFeldy + (vz + m2z / 2) * BFeldx - (vx + m2x / 2) * BFeldz));
m3z := h * (a*((U+V*cos(w*h))*EFeldz + (vx + m2x / 2) * BFeldy - (vy + m2y / 2) * BFeldx));
x := hilfsx + k3x;
y := hilfsy + k3y;
z := hilfsz + k3z;

k4x := h * (vx + m3x); {4.Schritt im Runge Kutta}
k4y := h * (vy + m3y);
k4z := h * (vz + m3z);
m4x := h * (a*((U+V*cos(w*h))*EFeldx + (vy + m3y) * BFeldz - (vz + m3z) * BFeldy));
m4y := h * (a*((U+V*cos(w*h))*EFeldy + (vz + m3z) * BFeldx - (vx + m3x) * BFeldz));
m4z := h * (a*((U+V*cos(w*h))*EFeldz + (vx + m3x) * BFeldy - (vy + m3y) * BFeldx));
x := hilfsx + 1 / 6 * (k1x + 2 * k2x + 2 * k3x + k4x);
y := hilfsy + 1 / 6 * (k1y + 2 * k2y + 2 * k3y + k4y);
z := hilfsz + 1 / 6 * (k1z + 2 * k2z + 2 * k3z + k4z);
vx:= vx + 1 / 6 * (m1x + 2 * m2x + 2 * m3x + m4x);
vy:= vy + 1 / 6 * (m1y + 2 * m2y + 2 * m3y + m4y);
vz:= vz + 1 / 6 * (m1z + 2 * m2z + 2 * m3z + m4z);
end;


procedure zeichnen;
Var
xx,yy,zz : Integer;
rAlpha,rBeta : Real;
begin
rBeta := Beta * pi / 180;
rAlpha:= Alpha * pi / 180;
Energie:=Energiev * 1.6021773E-19;
Masse:=Molgew/6.0221367E23;
v0 := sqrt(2 * Energie / Masse); {Umrechnung der Energie in Geschwindigkeit}
vx := sin(rBeta) * cos(rAlpha) * v0; {Aufspaltung der Geschwindigkeit in }
vy := sin(rBeta) * sin(rAlpha) * v0; {die einzelnen Komponenten}
vz := cos(rBeta) * v0;
Repeat
begin
xx:= Round(x * 30 * Zoomfak);
yy:= Round(y * 30 * Zoomfak);
zz:= Round(z * 30);
putpixel(zz , 150 - xx,9); {Ausgabe der x - z - Kurve}
putpixel(zz + 300, 150 - yy,9); {Ausgabe der y - z - Kurve}
putpixel(xx + 450, 390 - yy,9); {Ausgabe der x - y - Kurve}
If (xx >= 150) or (yy >= 150) or (zz >= 150) then {Abbruch falls Kurve die Koordinaten-}
begin {felder verlässt}
readln;
exit;
end;
Runge;
end;
Until Keypressed;
end;


begin {Hauptprogramm mit Initialisierung der Grafik}
ClrScr;
grDriver := Detect;
initgraph(grDriver,grMode,'C:\TP');
setbkcolor(7);
Wahl1 := '3';
Eroeff;
Repeat
begin
if Wahl1 = '3' then
begin
Masse := Molgew/6.0221367E23; Alpha := 0; Beta := 0; Radius:= 0.06; {Definition der Standard - Werte}
Ladung:= 1; Energiev:= 8; Zoomfak:= 1; Molgew:= 18; w:= 2.3E6;
h:= 1e-10; U:= 10; BFeldx:=0; BFeldy:=0; BFeldz:=0; Verhaeltnis:=0.1367;
rx:= 0; ry:= 0; rz:= 0; t:=0; EFeldx:= 0; EFeldy:=0;
end;
Menue; {Menuewahl}
case Wahl1 of
'1': Werte;
'2': begin Koord;
x:=rx; y:=ry; z:=rz;
Zeichnen;
Werte_Ausg;
end;
'3':;
'4':;
end;
end;
Until (Wahl1 = '4');
Closegraph;
end.