Программа построения множества силовых линий
program sil_linii; uses graph,crt; label 1,2,3,4,5; type mas=array[1..10] of string; mas1=array[1..3] of integer; var q1,q2,k,w,r,y1,y2,y,i,l,qq:integer; x,x1,x2,x3,x4,fx,fy,r1,r2,r3,r4,r5,r6,u,o,a,a1,n:real; p:mas; aass:text; t1:mas1; t:mas1; st:string; ch,key,chh:char; functionkey:boolean; procedure grinit; var gd,gm:integer; begin gd:=detect; initgraph(gd,gm,''); if graphresult<>grok then halt(1); end; procedure wait; begin repeat until keypressed end; procedure mes1(tt,tt1:mas1;pp:mas); begin setcolor(250); outtextxy(t[i],t1[i],p[k]); end; procedure lin(qq1,qq2,ll:integer;aa:real); begin y:=y2; repeat x3:=x-l/2; x4:=x+l/2; r1:=sqrt(sqr(x3)+sqr(y)); r2:=sqrt(sqr(x4)+sqr(y)); r5:=r1*r1*r1; r6:=r2*r2*r2; fx:=q1*x3/r5+q2*x4/r6; fy:=(q1/r5+q2/r6)*y; if fy=0 then exit; x1:=y2*fx/fy; x:=x+x1; u:=y+130; o:=x+320; if (u<320) and (u>0) and (o<638) and (u*o>0) then begin writeln(aass,o,u); putpixel(round(o),round(u),250); end; y:=y+y2; until (y<220/y2); end; procedure lin1(qq1,qq2,ll:integer;aa:real); begin y:=y2; repeat x3:=x-l/2; x4:=x+l/2; r1:=sqrt(sqr(x3)+sqr(y)); r2:=sqrt(sqr(x4)+sqr(y)); r5:=r1*r1*r1; r6:=r2*r2*r2; fx:=q1*x3/r5+q2*x4/r6; fy:=(q1/r5+q2/r6)*y; if fy=0 then exit; x1:=y2*fx/fy; x:=x+x1; u:=y+130; o:=x+320; if (u<320) and (u>0) and (o<638) and (u*o>0) then begin writeln(aass,o,u); putpixel(round(o),round(u),250); end; y:=y+y2; until (y>220/y2); end; procedure ugol(yy,aa:real;yy1,yy2,qq1,qq2:integer); begin repeat if (q2>0) and (q1>0) then a:=a+a1*q1/q2 else if q1=0 then a:=a+a1*0.5 else if q2=0 then a:=a+a1 else a:=a+a1*abs(q1/q2); repeat if(a>0) and (a<pi) then begin y2:=y1; x:=l/2+y2/(sin(a)/cos(a)); end; if (a>pi) and (a<2*pi) then begin y2:=-y1; x:=l/2+y2/(sin(a)/cos(a)); end; if (a>2*pi) and (a<3*pi) then begin y2:=y1; x:=-l/2+y2/(sin(a)/cos(a)); end; if (a>3*pi) and (a<4*pi) then begin y2:=-y1; x:=-l/2+y2/(sin(a)/cos(a)); end; lin(q1,q2,l,a); lin1(q1,q2,l,a); setfillstyle(10,2); fillellipse(round(320+l/2),130,abs(q1),abs(q1)); fillellipse(round(320-l/2),130,abs(q2),abs(q2)); if a<2*pi then a:=a+a1; until a>2*pi until a>4*pi; setcolor(250); if q2<>0 then outtextxy(205,260,'q2='+' '+chr(abs(q2)+48)); if q1<>0 then outtextxy(430,260,'q1='+' '+chr(abs(q1)+48)); if q1>0 then outtextxy(455,260,'+') else if q1<0 then outtextxy(455,260,'-'); if q2>0 then outtextxy(230,260,'+') else if q2<0 then outtextxy(230,260,'-'); end; {=====================} BEGIN assign(aass,'c:\aaasss.dat'); rewrite(aass); grinit; settextstyle(0,0,0); setbkcolor(9); t[1]:=10; t[2]:=10; t[3]:=200; t1[1]:=360; t1[2]:=380; t1[3]:=310; q1:=10; q2:=10; l:=300; a1:=0.5; y1:=2; a:=0; ugol(y,a,y1,y2,q1,q2); i:=1; k:=9; i:=2; k:=10; wait; closegraph; close(aass); end. Движение заряженной частицы в магнитном поле program Zar_mg_pole; const N=2000; var H,A,V,ALFA:REAL; i:integer; x,y,vx,vy:array[0..N] of real; RR:TEXT; begin assign (RR,'C:\electron.DAT'); rewrite(RR); A:=80; V:=1.4; ALFA:=3.14*A/180; h:=0.05; x[0]:=1.0; y[0]:=0.0; VX[0]:=V*COS(ALFA); VY[0]:=V*SIN(ALFA); for i:=0 to N-1 do begin vx[i+1]:=VX[i]+h*vy[i]/x[i]; vy[i+1]:=vy[i]-h*vx[i]/x[i]; x[i+1]:=x[i]+vx[i]*h; y[i+1]:=y[i]+vy[i]*h; end; for i:=0 to n do begin writeln(RR,x[i],' ',y[i]) end; close(RR); end. Возмущение орбиты электрона в однородном Магнитном поле движущимся протоном Program elipr; Const b=0.000544662; Const n=1200; Var i:integer; xe,ye,vxe,vye,xp,yp,vxp,vyp:array[0..n] of real; ee,pp:text; h:real; begin assign(ee,'C:\elektron.dat');rewrite(ee); assign(pp,'C:\proton.dat');rewrite(pp); h:=0.01; xe[0]:=0;ye[0]:=-1;vxe[0]:=1;vye[0]:=0; xp[0]:=0;yp[0]:=1;vxp[0]:=1;vyp[0]:=0; for i:=0 to n-1 do begin xe[i+1]:=xe[i]+vxe[i]*h; ye[i+1]:=ye[i]+vye[i]*h; vxe[i+1]:=vxe[i]+h*(-vye[i]+(xp[i]-xe[i])/3*exp(abs(xp[i]-xe[i]))); vye[i+1]:=vye[i]+h*(vxe[i]+(yp[i]-ye[i])/3*exp(abs(yp[i]-ye[i]))); xp[i+1]:=xp[i]+vxp[i]*h; yp[i+1]:=yp[i]+vyp[i]*h; vxp[i+1]:=vxp[i]+b*h*(vyp[i]-(xp[i]- xe[i])/3*exp(abs(xp[i]-xe[i]))); vyp[i+1]:=vyp[i]+(-b)*h*(vxp[i]+(yp[i]- ye[i])/3*exp(abs(yp[i]-ye[i]))); end; for i:=0 to n do begin writeln(ee,xe[i],' ',ye[i]); writeln(pp,xp[i],' ',yp[i]) end; close(ee); close(pp); end. Пространственный осциллятор program os; const w=2;n=1000;a=0.05; var i:integer; h,k,w1,w2,w3:real; x,y,z,vx,vy:array [0..n] of real; os1,os2,os3:text; begin assign(os1,'d:\os1.dat');rewrite(os1); assign(os2,'d:\os2.dat');rewrite(os2); assign(os3,'d:\os3.dat');rewrite(os3); begin h:=0.02;w1:=2;w2:=2;w3:=2; x[0]:=10;x[1]:=10;z[0]:=0; y[0]:=10;y[1]:=10;z[1]:=0; for i:=1 to (n-1) do begin x[i+1]:=-w1*w1*x[i]*h*h+w*(y[i]-y[i-1])*h+2*x[i]-x[i-1]-a*(x[i]-x[i-1])*h; y[i+1]:=-w2*w2*y[i]*h*h-w*(x[i]-x[i-1])*h+2*y[i]-y[i-1]-a*(y[i]-y[i-1])*h; z[i+1]:=-w3*w3*z[i]*h*h+2*z[i]-z[i-1]; vx[i]:=(x[i]-x[i-1])/h; vy[i]:=(y[i]-y[i-1])/h; end; for i:=0 to n do begin writeln(os1,x[i]+1000,y[i]+1000); writeln(os2,i*h,' ',x[i]+1000); writeln(os3,vx[i]+1000,vy[i]+1000); end; close(os1); close(os2); close(os3); end; Движение заряженных частиц В кулоновском поле program SG; const N=1200; var H,A,V,ALFA:real; i:integer; X,y,vx,vy:array [0..N] of real; rr:text; begin assign (rr,'c:\m nb4.dat');rewrite(rr); a:=60; v:=1.4; alfa: =3.14*a/180; h:=0.001; x[0]:=1.0;y[0]:=0.0; vx[0]:=v*cos(alfa); vy[0]:=v*sin(alfa); for i:=0 to N-1 do begin vx[i+1]:=vx[i]-h*ABS(x[i])/((x[i]*x[i]+y[i]*y[i])* (sqrt(x[i]*x[i]+y[i]*y[i]))); vy[i+1]:=vy[i]-h*y[i]/((y[i]*y[i]+x[i]*x[i])* (sqrt(x[i]*x[i]+y[i]*y[i]))); x[i+1]:=x[i]+vx[i]*h; y[i+1]:=y[i]+vy[i]*h; end; for i:=0 to n do begin writeln (rr,x[i],' ',y[i]) end; close (rr); end.
|