esercitazione con turbo pascal
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 compute
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.