Изобразите полет камня, брошенного из окна дома - Turbo Pascal
Формулировка задачи:
Изобразите полет камня, брошенного из окна дома. Камень бросили горизонтально с высоты 100-метровой(пиксельной) башни со скоростью v=20м/с. Расстояние от него до башни по горизонтали – S, выражается формулой:
S=v*t,
где t – Время полета камня в секунду.
Высота над землей h выражается формулой
H =100-9.81* t * t/2
Нарисуйте дом(слева), землю, камень (маленькая полностью закрашеная окружность.) Затем камень летит, оставляя за собой след в виде точек.
Решение задачи: «Изобразите полет камня, брошенного из окна дома»
textual
Листинг программы
uses Graph,CRT; Label Again; var Device,Mode,x3,x4,y3,y4,Mx,My,x5,x6,x7,y5,y6,k:Integer; var x1,y1,x2,y2,alpha,Dx,Dy,Dz,v,t:Real; var a,b,c,a1,b1,c1:Real; var P_abc,P_ab1a1,P_bb1c1,P_ca1c1,SSS,S_abc,S_ab1a1,S_bb1c1,S_ca1c1:Real; var n:String; Begin k:=0; again: Randomize; Device:=0; InitGraph(Device, Mode, 'c:\tp7\BGI'); DirectVideo:=false; x1:=80; y1:=450; t:=0; Dz:=0.1; x5:=150; {koopduHaTbI ropbI} x6:=250; {koopduHaTbI ropbI} x7:=350; {koopduHaTbI ropbI} y5:=450; {koopduHaTbI ropbI} y6:=300; {koopduHaTbI ropbI} Mx:=(370+Random(200)); {MuweHb} My:=430; {MuweHb} x3:=Mx-20; {MuweHb} x4:=Mx+20; {MuweHb} y3:=My-20; {MuweHb} y4:=My+20; {MuweHb} Rectangle(x3,y3,x4,y4); {MuweHb} Line(0,450,650,450); {HujH99 luHu9} Line(0,20,650,20); {BepxH99 luHu9} Circle(20,435,15); {ropa ETO npen9TcTBue} Line(x5,y5,x6,y6); {ropa} Line(x6,y6,x7,y5); {ropa} Line(x7,y5,x5,y5); {ropa} a:=sqrt(Abs((x6-x5)*(x6-x5))+Abs((y6-y5)*(y6-y5))); {CtopoHbI} b:=sqrt(Abs((x7-x6)*(x7-x6))+Abs((y6-y5)*(y6-y5))); {CtopoHbI} c:=sqrt(Abs((x7-x5)*(x7-x5))+Abs((y5-y5)*(y5-y5))); {CtopoHbI} P_abc:=(a+b+c)/2; {nepumetp ropbI} S_abc:=sqrt(P_abc*(P_abc-a)*(P_abc-b)*(P_abc-c)); {nlowaDb ropbI} {yrloBa9 LuHu9} Line(20,450,Round(x1),Round(y1)); WriteLn('BBegute yrol oT 0 go 90'); {BBodum yrol} ReadLn(alpha); Dx:=cos(alpha*(pi/180)); Dy:=sin(alpha*(pi/180)); x2:=(20+(x1-20)*Dx)+(450-y1)*Dy; y2:=(450-(x1-20)*Dy)+(y1-450)*Dx; Line(20,450,Round(x2),Round(y2)); {Pucyetc9 LuHu9} Writeln('BBedute ckopoctb noleTa 9dPa'); Readln(v); repeat SetColor(Red); Circle(Round(x2),Round(y2),10); Delay(40000); SetColor(Black); Circle(Round(x2),Round(y2),10); t:=t+Dz; v:=Abs(v-v/20); x2:=x2+(v*t*Dx); y2:=y2-(v*t*Dy-9.81*t*t/2); {MaleHbkue CtopoHbI} a1:=sqrt(Abs((x2-x5)*(x2-x5))+Abs((y2-y5)*(y2-y5))); b1:=sqrt(Abs((x2-x6)*(x2-x6))+Abs((y2-y6)*(y2-y6))); c1:=sqrt(Abs((x2-x7)*(x2-x7))+Abs((y2-y5)*(y2-y5))); {MaleHbkue nepuMeTpbI} P_ab1a1:=(a1+b1+a)/2; P_bb1c1:=(b+b1+c1)/2; P_ca1c1:=(c+a1+c1)/2; {MaleHbkue nlowadu} S_ab1a1:=sqrt(P_ab1a1*(P_ab1a1-a)*(P_ab1a1-b)*(P_ab1a1-c)); S_bb1c1:=sqrt(P_bb1c1*(P_bb1c1-a)*(P_bb1c1-b)*(P_bb1c1-c)); S_ca1c1:=sqrt(P_ca1c1*(P_ca1c1-a)*(P_ca1c1-b)*(P_ca1c1-c)); SSS:=S_ab1a1+S_bb1c1+S_ca1c1; if (SSS<=S_abc) or (y2>=440) then begin k:=k+1; Writeln('BbICTpel Homep', k); WriteLn('ewe pa3?(Y/N)'); Readln(n); if n='y' then goto again else break; end; if (x2>=x3) and (x2<=x4) and (y2>=y3) and (y2<=y4) or (y2<=25) then begin k:=k+1; Writeln('BbI nonalu BbICTpelom Homep', k); WriteLn('ewe pa3?(Y/N)'); Readln(n); if n='y' then goto again else break; end; until y2>=440; readLn; CloseGraph end.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д