{*************************************************************

               Le CyberZo‹de Qui Fr‚tille

  http://www.multimania.com/cyberzoide/info/turbo/turbo.htm
               cyberzoide@multimania.com

***************************************************************

  FiliŠre 3 (physique), Module M02, Session 1 de Janvier 1999
  Examen … L'Unviversit‚ Claude Bernard Lyon 1
  Sujet : "Le Synchrotron … ‚lectron" }

program examen2;

uses crt;

const f_b=3333.3333;
      f_e=8.85e-5;
      b_max=1000;


procedure saisie(var r,e_tour:real);
begin
clrscr;

repeat   {saisie du rayon R}
 write('Entrez le rayon R compris dans [100,5000] (en mŠtres) : ');
 readln(r);
until (r>=100) and (r<=5000);

repeat   {saisie de l'‚nergie E_tour}
 write('Entrez l''‚nergie E_tour comprise dans [0.01,0.5] (en GeV) : ');
 readln(e_tour);
until (e_tour>=0.01) and (e_tour<=0.5);

end;


procedure un_tour(var b,e,e_perdue:real;r,e_tour:real);
begin
e:=e+e_tour;  {‚nergie totale E}
b:=f_b*e/r;   {champ magn‚tique B}
e_perdue:=f_e*sqr(sqr(e))/r; {‚nergie dissip‚e E_perdue}
e:=e-e_perdue;  {‚nergie totale dont on soustrait l'‚nergie dissip‚e}
end;


procedure affiche(n_tours:integer;b,e,e_perdue:real);
begin
writeln('Nombre de tours = ',n_tours,' B = ',b:0:5,' E_perdue = ',e_perdue:0:7,
        ' E_totale = ',e:0:7);
{le formatage des donn‚es est n‚cessaire pour qu'elles tiennent sur une
seule ligne d'‚cran}
if (n_tours mod 21)=0 then {pause}
   begin
   readln;
   clrscr;
   end;
end;


var r,e_tour,b,e,e_perdue:real;
    n_tours:integer;

BEGIN
e:=1;
n_tours:=0;
saisie(r,e_tour);
repeat
inc(n_tours);
un_tour(b,e,e_perdue,r,e_tour);
if (n_tours mod 10)=0 then affiche(n_tours,b,e,e_perdue);
until (e_perdue >=(99/100*e_tour)) or (b>b_max);
affiche(n_tours,b,e,e_perdue); {le r‚affichage en fin est n‚cessaire car la
fin n'intervient g‚n‚ralement pas pour un multiple de 10 du nombre de tours}
END.