calcolo lancio proiettile

esci algebraturbo.htm

program para4;
(* moto parabolico proiettile con tabella valori varianti *)
(* attivazione grafica *)

(* da usare insieme a para3 con stessi valori inseriti*)
(* si vede tabella valori e grafica su due computer..*)

uses crt,graph;
const g=9.81;
var spazio,velocita,vx,vy,altezza,ts,td,tsd:real;
angolo,radiante:real;
a,tempox,k:integer;
sx,vyt,vyd,hs,st,passo,dt:real;
sc,tp:integer;
stringa:string;
y3,h,x,y,x1,x2,y1,y2,vp,pausa:integer;

procedure esegue;
var scelta:integer;
begin
clrscr;
stringa:='c:\tp\bgi';
sc:=0;
tp:=0;
passo:=1;
writeln('nelle varie prove,cambia valori per velocita e angolo');
writeln('cercando di prevedere come variera la distanza raggiunta');
writeln('prendi nota su una tabella del valori calcolati');
writeln('esempio di tabella con nove colonne');
writeln('velocita,angolo,vx,vy,ts,td,tsd,altezza,distanza');
writeln;
writeln('per confrontare i vari risultati delle prove');
writeln('non usare valori di velocita >120 e angoli>90 ');
writeln('-------------------------------------------------');
write('indica velocita di lancio=prova 120 ');
repeat
readln(velocita);
until velocita<=120;
write('indica angolo di lancio =prova 30 ');readln(angolo);
write('indica valore per pausa:prova 10..100..200 ');readln(pausa);
writeln('------------calcoli globali -------------------');
radiante:=angolo*3.14/180;
vx:=velocita*cos(radiante);
vy:=velocita*sin(radiante);
writeln('componente orizzontale =',vx:6:2);
writeln('componente verticale =',vy:6:2);
ts:=vy/g;
writeln('tempo impiegato per annullare vy salendo=',ts:6:2);
altezza:=vy*ts-g*ts*ts/2;
writeln('altezza massima raggiunta salendo =',altezza:6:2);
td:=sqrt(2*altezza/g);
writeln('tempo impiegato a scendere fino al suolo=',td:6:2);
tsd:=ts+td;
writeln('tempo totale impiegato nella traiettoria=',tsd:6:2);
spazio:=vx*tsd;
writeln('distanza raggiunta a fine traiettoria =',spazio:6:2);
writeln;
writeln('premi enter');
readln;
dt:=0;
vyd:=0;
x:=100;
y:=400;
k:=10;
tempox:=(round(ts)+1);
initgraph(sc,tp,stringa);
line(1,y+5,600,y+5);
line(10,1,10,y);
for a:=1 to tempox do
begin
vyt:=vy-g*dt;
hs:=vy*dt-g*dt*dt/2;
st:=vx*dt;
vyd:=g*dt;
sx:=st+vx*dt;
dt:=dt+passo;
h:=round(hs);
vp:=round(vx);
x1:=x+k;
y1:=y-h;
if angolo=90 then x1:=x;
y2:=y1-round(vyt);
line(x1,y1,x1,y2);
line(x1,y1,x1+vp,y1);
k:=k+20;

y3:=y2;
delay(pausa);
end;
outtextxy(10,10,'salita finita:premi enter');
readln;
y:=y3;
dt:=0;
for a:=1 to tempox do
begin
hs:=g*dt*dt/2;
h:=round(hs);
vyd:=g*dt;
dt:=dt+passo;
vp:=round(vx);
x1:=x+k;
if angolo=90 then x1:=x;
y1:=y+h;
y2:=y1+round(vyd);
line(x1,y1,x1,y2);
line(x1,y1,x1+vp,y1);
k:=k+20;
delay(pausa);
end;
outtextxy(200,30,'discesa finita:premi enter');
readln;
textmode(2);
writeln('per altra prova premi 1...per finire premi 2 ');
readln(scelta);
if scelta=1 then esegue
end;

begin
clrscr;
writeln('esempio calcoli per traiettoria proiettile');
writeln('viene richiesta velocita di lancio e angolo di lancio');
writeln('viene visualizzata tabella con valori assunti nel tempo');
writeln('componente verticale della velocita vys in salita');
writeln('altezza raggiunta in salita hs');
writeln('distanza percorsa in orizzontale st durante la salita');
writeln('componente verticale velocita in discesa vyd ');
writeln('successione tempo in secondi dt');
writeln('distanza percorsa in orizzontale durante la discesa sx');
writeln('valori globali ');
writeln('premi enter per proseguire');
readln;
clrscr;
esegue;
clrscr;
end.