program fizik; uses graph,crt; const a=9.8; var v,v0,ttek,tobsh,t0,hnach,h0,hmax,htek,vtek,k_upr,rastyag,rastyagx:real; napravl:shortint; i,grDriver, grMode : integer; s:string; f:text; procedure vvod; begin writeln('telo dvigetsya... 1-vverh,-1-vniz'); readln(napravl); writeln('nachalnaya skorost, m/s'); readln(v0); v:=v0; writeln('uprugost'); readln(k_upr); while (k_upr>1) or (k_upr<0) do begin writeln('koeff dolgen byt ot 0 do 1!'); readln(k_upr); end; writeln('nachalnaya vysota,m'); readln(h0); hnach:=h0; hmax:=h0; writeln('vas interesuet sostoyanie cherez ... sekund'); readln(t0); end; procedure raschet (vyvod:boolean); begin tobsh:=0; if napravl=1 then begin ttek:=v/a; if (tobsh+ttek>=t0) and (t0>tobsh) then begin htek:=hnach+v*(t0-tobsh)-(a*sqr(t0-tobsh))/2; vtek:=v-a*(t0-tobsh); end; hnach:=hnach+v*ttek-(a*sqr(ttek))/2; if hmax=t0) and (t0>tobsh) then begin htek:=hnach-v*(t0-tobsh)-(a*sqr(t0-tobsh))/2; vtek:=v+a*(t0-tobsh); end; tobsh:=tobsh+ttek; v:=v+a*ttek; hnach:=0; {udar} v:=sqrt(k_upr)*v; {polet vverh} ttek:=v/a; if (tobsh+ttek>=t0) and (t0>tobsh) then begin htek:=hnach+v*(t0-tobsh)-(a*sqr(t0-tobsh))/2; vtek:=v-a*(t0-tobsh); end; tobsh:=tobsh+ttek; hnach:=v*ttek-a*sqr(ttek)/2; if hmax0.999999)and(tobsh>t0))) do begin {telo letit vniz} ttek:=sqrt(2*hnach/a); if (tobsh+ttek>=t0) and (t0>tobsh) then begin htek:=hnach-v*(t0-tobsh)-(a*sqr(t0-tobsh))/2; vtek:=v+a*(t0-tobsh); end; tobsh:=tobsh+ttek; v:=v+a*ttek; hnach:=0; {udar} v:=sqrt(k_upr)*v; napravl:=1; {telo letit vverh} ttek:=v/a; if (tobsh+ttek>=t0) and (t0>tobsh) then begin htek:=hnach+v*(t0-tobsh)-(a*sqr(t0-tobsh))/2; vtek:=v-a*(t0-tobsh); end; tobsh:=tobsh+ttek; hnach:=hnach+v*ttek-(a*sqr(ttek))/2; v:=0; end; if vyvod then begin assign(f,'result.txt'); rewrite(f); if k_upr<0.999999 then begin str(tobsh:2:2,s); s:='obshee vremya: '+s+'s'; writeln(s); writeln(f,s); end else begin s:='prygaet do beskonechnosti'; writeln(f,s); writeln(s); end; str(hmax:2:2,s); s:='max vysota: '+s+'m'; writeln(s); writeln(f,s); if t0>tobsh then begin str(t0:2:2,s); s:='cherez '+s+'s uge prosto legit'; writeln(s); writeln(f,s); end else begin str(t0:2:2,s); s:='cherez '+s+'s'; writeln(s); writeln(f,s); str(htek:2:2,s); s:=' vysota '+s+' m'; writeln(s); writeln(f,s); str(vtek:2:2,s); s:=' skorost '+s+'m/s'; writeln(s); writeln(f,s); end; close(f); end; end; begin vvod; raschet(true); readln; grDriver:=Detect; InitGraph(grDriver, grMode, ''); setcolor(4); rastyag:=GetMaxY/(2*hmax); rastyagx:=(GetMaxX-20)/tobsh; moveto(20,300-trunc(rastyag*h0)); for i:=1 to 500 do begin t0:=i/rastyagx; v:=v0; hnach:=h0; tobsh:=0; raschet(false); lineto(i+20, 300-trunc(rastyag*htek)); { writeln(i,' ',trunc(100*htek));} end; readkey; end.