//JS pseudo TurboPascal simulator script //program wleit; {Lutz Tautenhahn, Dez.92} var h1=15; var h2=30; var hh1=15; var graphdriver,graphmode; var mx,my,i,xp,yp,x0,y0,j,find,d,imax,nr,mxhi,myhi; var r,dx,dy,xl,yl,invdifx; var xmin,xmax,x,y,ymin,ymax,difx,dify,invdify,deltax,deltay; var strxmin,strxmax,strymin,strymax,strzahl,strwert; var sxmin,sxmax,symin,symax,xr,yr,q; var e,f,b36; var t1,t2,t0,t11,t21,t01; var k,t,dt,t10,t20,t00,q0,c1,c2,c0,r12,r10,r20; var xmintxt,xmaxtxt,ymintxt,ymaxtxt,maxpix,nks,ischrift; //{***********************************************************************} //{Geben Sie hier q1 und q2 als Funktionen von der Zeit ein! // Die Konstanten sind so zu waehlen, dass bei Zeitangabe in sec // q die Dimension J/s erhaelt! Bsp.: q1:=5+0.2*t } //{Gauss-Peak mit A=b*h: q1:=h*exp(-pi*(t-t0)*(t-t0)/(b*b) } //{***********************************************************************} function q1(t) { var q=0; if (t>30) q=-0.9*Math.sin(0.02*t-0.6); return(q+0.95); } function q2(t) { var q=0; if (t>30) q=0.9*Math.sin(0.02*t-0.6); return(0.95+q); } //{***********************************************************************} function bild() { moveto(40,150);lineto(280,150); moveto(360,150);lineto(600,150); moveto(40,200);lineto(280,200); moveto(360,200);lineto(600,200); moveto(280,170);lineto(360,170); moveto(280,180);lineto(360,180); moveto(40,250);lineto(600,250); moveto(40,300);lineto(600,300); moveto(320,300);lineto(320,350); moveto(40,150);lineto(40,200); moveto(40,250);lineto(40,300); moveto(600,150);lineto(600,200); moveto(600,250);lineto(600,300); moveto(160,100);lineto(160,150); moveto(480,100);lineto(480,150); moveto(280,150);lineto(280,200); moveto(360,150);lineto(360,200); moveto(150,200);lineto(150,250); moveto(170,200);lineto(170,250); moveto(470,200);lineto(470,250); moveto(490,200);lineto(490,250); settextstyle(1,'horizdir',2); settextjustify('center','top'); outtextxy(160,80,'Q1(t)'); outtextxy(480,80,'Q2(t)'); outtextxy(144+3,60+4,'.'); outtextxy(464+3,60+4,'.'); outtextxy(160,175,'C 1 , T 1 ( t )'); outtextxy(480,175,'C 2 , T 2 ( t )'); outtextxy(320,155,'R12'); outtextxy(200,225,'R10'); outtextxy(440,225,'R20'); outtextxy(320,275,'C 0 , T 0 ( t )'); outtextxy(320,365,'Q0'); outtextxy(314+1,345+4,'.'); settextstyle(1,'vertdir',2); settextjustify('right','middle'); outtextxy(155+7,140,'<'); outtextxy(475+7,140,'<'); outtextxy(315+7,340,'<'); settextstyle(1,'horizdir',2); settextjustify('center','middle'); } function komma(xxx) { var il=0; while (xxx<1) { xxx*=10; il++; } return(il); } function lenght(xxx) { var il=0; while (Math.abs(xxx-Math.round(xxx))>0.00001) { xxx*=10; il++; } return(il); } function funcpaint()// {Beginn der Prozedur} { mx=640-50; mxhi=80; if (nr==1) { my=480-50; myhi=Math.round(480/2)+50; } if (nr==10) { my=Math.round(480/2)+30; myhi=80; } difx=(xmax-xmin)/(mx-mxhi); invdifx=1/difx; if (nr==1) { ymin=q1(xmin); ymax=q1(xmin); for (i=mxhi; i<=mx; i++) { x=xmin+(i-mxhi)*difx; y=q1(x); //{Ermittlung von} if (yymax) ymax=y; y=q2(x); if (yymax) ymax=y; } y=ymax-ymin; ymax=ymax+0.1*y; ymin=ymin-0.1*y; } for (i=mxhi; i<=mx; i++){ putpixel(i,myhi,1); putpixel(i,my,1); } for (i=myhi; i<=my; i++){ putpixel(mxhi,i,1); putpixel(mx,i,1); } dx=(xmax-xmin); dy=(ymax-ymin); if (dx>0) { r=1; if (dx>=100) { while (dx>=100) { dx=dx/10; r=r*10; } } //{Ermittlung des} //{X-Rasters} while (dx<10) { dx=dx*10; r=r/10; } if (dx>50) deltax=10*r; else if (dx>20) deltax=5*r; else deltax=2*r; nks=komma(deltax); settextstyle(1,'horizdir',2); settextjustify('center','top'); invdifx=(mx-mxhi)/(xmax-xmin); x=Math.floor(xmin/deltax)*deltax; ischrift=0; for (j=12; j>=-1; j--) { xr=x+j*deltax; xl=mxhi+(-xmin+x+j*deltax)*invdifx; x0=Math.round(xl); if ((x0>=mxhi)&&(x0<=mx)) { ischrift++; if (ischrift!=2) { //str(xr:0:nks,strzahl); strzahl=xr; if (nr<5) outtextxy(x0,my+hh1,strzahl); } else { if (nr<5) outtextxy(x0,my+hh1,'t[s]'); } if (b36=='j') maxpix=myhi; else maxpix=my-6; for (i=maxpix; i<=my+6; i++) putpixel(x0,i,8); } x0=Math.round(mxhi-xmin*invdifx); if ((x0>=mxhi)&&(x0<=mx)) { for (i=myhi; i<=my; i++) putpixel(x0,i,4); } } } if (dy>0) { r=1; if (dy>=100) { while (dy>=100) { dy=dy/10; r=r*10; } } //{Ermittlung des} //{Y-Rasters} while (dy<10){ dy=dy*10; r=r/10; } if (dy>50) deltay=10*r; else if (dy>20) deltay=5*r; else deltay=2*r; nks=komma(deltay); settextstyle(1,'horizdir',2); settextjustify('right','middle'); y=Math.floor(ymax/deltay)*deltay; invdify=(my-myhi)/(ymax-ymin); ischrift=0; for (j=-1; j<=12; j++) { yr=y-j*deltay; yl=myhi+(ymax-y+j*deltay)*invdify; y0=Math.round(yl); if ((y0>=myhi)&&(y0<=my)) { ischrift++; if (ischrift!=2) { //str(yr:0:nks,strzahl); strzahl=yr; outtextxy(mxhi-hh1,y0,strzahl); } else { if (nr==1) outtextxy(mxhi-hh1,y0,'Q[J/s]'); if (nr==1) outtextxy(mxhi-hh1,y0-10,'. '); if (nr==10) outtextxy(mxhi-hh1,y0,'T[K]'); } if (b36='j') maxpix=mx; else maxpix=mxhi+6; for (i=mxhi-6; i<=maxpix; i++) putpixel(i,y0,8); } y0=Math.round(myhi+ymax*invdify); if ((y0>=myhi)&&(y0<=my)) { for (i=mxhi; i<=mx; i++) putpixel(i,y0,4); } } } difx=(xmax-xmin)/(mx-mxhi); dify=(ymax-ymin)/(my-myhi); invdifx=1/difx; invdify=1/dify; for (find=1; find<=2; find++) { if ((nr==1)||(nr==2)) { for (i=mxhi; i<=mx; i++) { x=xmin+(i-mxhi)*difx; if (nr==1) y=q1(x); //{Zeichnen der} if (nr==2) y=q2(x); y=myhi+(ymax-y)*invdify; //{q-Funktionen} yp=Math.round(y); x=mxhi+(x-xmin)*invdifx; xp=Math.round(x); if (i!=mxhi) lineto(xp,yp); putpixel(xp,yp,15); if (i!=mx) moveto(xp,yp); } } nr=nr+1; } nr=nr-2; if (nr==10) { t10=t1; t20=t2; t00=t0; for (i=0; i<=imax-1; i++) { t11=t10+(q1(i*dt)-(t10-t20)/r12-(t10-t00)/r10)*dt/c1; t21=t20+(q2(i*dt)+(t10-t20)/r12-(t20-t00)/r20)*dt/c2; t01=t00+(-q0+(t10-t00)/r10+(t20-t00)/r20)*dt/c0; x=dt*i; x=mxhi+(x-xmin)*invdifx; xp=Math.round(x); y=t10; y=myhi+(ymax-y)*invdify; yp=Math.round(y); moveto(xp,yp); //{Zeichnen von} x=dt*(i+1); x=mxhi+(x-xmin)*invdifx; xp=Math.round(x); y=t11; //{T1(t) und T2(t)} y=myhi+(ymax-y)*invdify; yp=Math.round(y); lineto(xp,yp); x=dt*i; x=mxhi+(x-xmin)*invdifx; xp=Math.round(x); y=t20; y=myhi+(ymax-y)*invdify; yp=Math.round(y); moveto(xp,yp); x=dt*(i+1); x=mxhi+(x-xmin)*invdifx; xp=Math.round(x); y=t21; y=myhi+(ymax-y)*invdify; yp=Math.round(y); lineto(xp,yp); t10=t11; t20=t21; t00=t01; } } settextstyle(1,'horizdir',2); settextjustify('left','middle'); if (nr==1) { outtextxy(mx+h1,myhi+h2-16,' . '); outtextxy(mx+h1,my-h2-16,' . '); if (q1(xmax)>=q2(xmax)) { outtextxy(mx+h1,myhi+h2,'Q1'); outtextxy(mx+h1,my-h2,'Q2'); } if (q1(xmax)=t21) { outtextxy(mx+h1,myhi+h2,'T1'); outtextxy(mx+h1,my-h2,'T2'); } if (t11ymax) ymax=t10; if (t20>ymax) ymax=t20; t11=t10+(q1(i*dt)-(t10-t20)/r12-(t10-t00)/r10)*dt/c1; t21=t20+(q2(i*dt)+(t10-t20)/r12-(t20-t00)/r20)*dt/c2; t01=t00+(-q0+(t10-t00)/r10+(t20-t00)/r20)*dt/c0; t10=t11; t20=t21; t00=t01; } initgraph(); nr=10; funcpaint(); nr=1; funcpaint(); settextstyle(1,'horizdir',2); settextjustify('center','middle'); outtextxy(40,20,'Q0[J/s]'); outtextxy(40,4,'. '); outtextxy(40,40,q0); outtextxy(120,20,'C1[J/K]'); outtextxy(120,40,c1); outtextxy(200,20,'C2[J/K]'); outtextxy(200,40,c2); outtextxy(280,20,'C0[J/K]'); outtextxy(280,40,c0); outtextxy(370,20,'R12[K*s/J]'); outtextxy(370,40,r12); outtextxy(470,20,'R10[K*s/J]'); outtextxy(470,40,r10); outtextxy(570,20,'R20[K*s/J]'); outtextxy(570,40,r20); readln(''); return; } if (nreadln<17) { closegraph(); writeln(''); writeln('Programmende.'); readln(''); return; } exit(); }