{************************************************
                 Hugo Eti‚vant
     http://www.multimania.com/cyberzoide/
      e-mail : cyberzoide@multimania.com
      (pour une aide en Turbo Pascal 7.0)
*************************************************

EXAMEN de JUIN 1998, FILIERE 3, M02


-------------------------------
ATTENTION : une autre version avec une repr‚sentation graphique
            est disponible sur demande...}



program examen;  {nom du programme}
uses crt;       {d‚claration de l'unit‚ utilis‚e}
var i,j :integer;
    pasx,x,y,v0,a,h,d:real;
    choix:char;
{d‚claration des variables
i et j : temporaires (pour boucles) o— i simule un nombre de lignes … l'‚cran
pasx : pas de variation de X
x et y : coordonn‚es du projectile
v0 : vitesse initialle
a : angle de lancement
h : hauteur maximale atteinte
d : port‚e du projectile
choix : temporaire}

const g=9.81; {d‚claration de la constante de la pesanteur terrestre}

procedure saisie;     {procedure de saisie des donn‚es de d‚part}
begin
a:=0; v0:=0; pasx:=0;  {initialisation des variables, car boucle}
clrscr;   {efface l'‚cran}
writeln('Entrez l''angle a (en degr‚), la vitesse (en mŠtres par secondes)');
writeln('et le pas de variation (en mŠtres): ');
readln(a,v0,pasx); {lit les donn‚es entr‚es par l'utilisateur}
a:=a*pi/180;  {convertit les degr‚s en radians}
end;

function tan(angle:real):real; {fonction tangente cr‚ee de toute piŠce...}
begin
tan:=sin(angle)/cos(angle); {...car inexistante sur Turbo Pascal 7.0}
end;

procedure calculs_affichage;{proc‚dure de calculs et affichage des coordonn‚es}
begin
y:=0; x:=0; i:=0; h:=0; d:=0; {initialisation des variables, car boucle}
while y>=0 do           {boucle conditionnelle : si ordonn‚e positive}
begin
 y:=((-g*sqr(x))/(2*sqr(v0)*sqr(cos(a)))+(x*tan(a))); {‚quation}
 if y>h then h:=y; {hauteur "h" maximale du projectile}
 x:=x+pasx; {variation de X grƒce au pas PASX de variation}
 inc(i);  {"i" est incr‚ment‚ de 1}
 writeln('X vaut :',x:0:5,' et Y vaut :',y:0:5); {affichage des coordonn‚es}
 if i=20 then   {bloc conditionnel pour pause dans l'affichage}
 begin
  readln;
  i:=0;
 end;   {fin du bloc conditionnel IF}
end;    {fin du boc boucle WHILE}
d:=x;   {valeur maximale de X}
end;

procedure resultats; {proc‚dure d'affichage des donn‚es et r‚sultats}
begin
writeln('La vitesse initiale "V0" ‚tait de :',v0,'m/s.');
writeln('L''angle "a" valait :',a,'rad.');
writeln('La hauteur maximale "h" est de :',h,'m.');
writeln('Et la port‚e "d" du projectile vaut :',d,'m.');
end;

BEGIN     {programme principal}
repeat    {boucle donnant la possibilit‚ de recommencer les calculs}
saisie;
calculs_affichage;
writeln;  {saut de ligne}
resultats;
writeln;
write('Voulez-vous effectuer un nouveau calcul ? [O/N] ');
readln(choix);
choix:=upcase(choix); {met en majuscule si ce n'est pas d‚ja le cas}
until choix<>'O';
END.
