Ask Question

Name:
Title:
Your Question:

Answer Question

Name:
Your Answer:
User Submitted Source Code!


Description:
  fgv
Language: PASCAL
Code:
program lanci;
uses crt, graph;
{i tipi word e double sono estensioni dei tipi di dati rispettivamente integer e
real}
{funzionano in modo analogo ma hanno un range di dati diverso}
var t,v0,x0, y0:double; a:real;
s,m:integer;
c:word;
r:char;
const g = 9.8;
{questa procedura serve a cambiare sempre i colori}
procedure move_color (pos:integer);
begin
c:=c+pos;
setcolor(c mod getmaxcolor);
end;
procedure lancio (v0, x0, y0 :double; a:real; delay_time:integer);
{longint è un'estensione degli integer ma con più range}
var y,x, vx, vy, t:double;
xi, yi:longint;
begin
a:=pi() * a / 180;
vx := v0 * cos(a);
vy := v0 * sin(a);
{è necessario troncare i valori perchè la grafica funziona solo con valori
interi}
moveto(trunc(x0), getmaxy-1-trunc(y0));
move_color(1);
repeat
begin
y:=vy * t-( g/2 * t* t)+y0;
x:=vx * t+x0;
{0,0 corrisponde all'angolo in alto a sinistra, noi vogliamo quello in
basso a sinistra}
{per questo invertiamo il valore della y secondo getmaxy}
yi:=trunc(getmaxy-y);
xi:=trunc(x);
move_color(1);
lineto(xi,yi);
move_color(-1);
circle(xi,yi,20);
t:=t+0.25;
delay(delay_time);
end;
until (yi > getmaxy); {fino a quando la "pallina" non esce dallo schermo}
writeln('Lancio terminato. Premere un tasto per continuare');
readkey;
end; {lancio}
begin
s:=detect;
initgraph(s,m,'H:FPC'); {ovviamente bisogna cambiare la directory}
directvideo:= true;
repeat
clrscr;
begin
writeln(' SIMULAZIONE DI LANCI INCLINATI');
{stampa un piccolo menu}
writeln; writeln;
writeln(' L. Nuovo lancio');
writeln(' C. Cancella schermo grafico');
writeln(' E. Esci dal programma');
writeln;writeln;
write(' Selezionare un''opzione -> '); readln(r);
{le diverse opzioni...}
case r of
'L', 'l':
begin
clrscr;
writeln('Introdurre i valori della velocita'' iniziale v0 (espressa in
m/s)');
writeln('della misura in gradi dell''angolo di inclinazione del lancio
dal suolo');
writeln('e della posizione (x, y) iniziale del lancio');
write(' v0 = '); readln(v0);
write(' ang (ø) = '); readln(a);
write(' x0 = '); readln(x0);
write(' y0 = '); readln(y0);
{legge le opzioni e chiama la procedura lancio}
lancio(v0, x0,y0, a, 30);
end;
'c', 'C':
begin
{per cancellare lo schermo chiudiamo e riapriamo la sessione grafica}
closegraph;
s:=detect;
initgraph(s,m,'H:FPC');
directvideo:= true;
end;
end; {case of}
end; {until}
until (r = 'e') or (r = 'E');
closegraph;
end.
          
          
Comments: