USES ALGEBRA;

type cp=record x,y:real; end;

procedure xfrac(x:real;var r:cp);

const approx=1e-6;

var x1:real;
    s,v:cp;
    fin:boolean;

 begin
  r.x:=1; r.y:=0; s.x:=0; s.y:=1;
  x1:=x;
   repeat
    v.x:=trunc(x1)*r.x+s.x;
    v.y:=trunc(x1)*r.y+s.y;
    s:=r;
    r:=v;
    if abs(x1-trunc(x1))=0 then fin:=true else
     begin
      x1:=1/(x1-trunc(x1));
      fin:=abs(x-r.x/r.y)<=approx
     end;
   until fin;
 end;

procedure aff(x:real);
 var c:cp;
 begin
  xfrac(x,c);
  writeln(round(c.x),'/',round(c.y));
 end;

VAR A,B,C,Q,R:VECTEUR;
          I:WORD;

          CONST MAX=22;

BEGIN
 FILLCHAR(A,SIZEOF(A),0);
 FILLCHAR(B,SIZEOF(B),0);
 A[0]:=1;
 FOR I:=0 TO MAX DO
   B[I]:=1/FACTORIELLE(I+1);
 DIVC_POLY(A,B,Q,R,MAX);
 FOR I:=0 TO MAX DO Q[I]:=Q[I]*FACTORIELLE(I);
 WRITELN;
 WRITELN('Tableau des premiers nombres de Bernouilli ');
 FOR I:=2 TO MAX DO IF NOT ODD(I)
  THEN
   begin
    WRITE('B',I DIV 2,' = ');
    aff(ABS(Q[I]));
   end;

 FILLCHAR(A,SIZEOF(A),0);
 FILLCHAR(B,SIZEOF(B),0);
 A[0]:=1;
 FOR I:=0 TO MAX DO IF NOT ODD(I) THEN IF ODD(I DIV 2) THEN
   B[I]:=-1/FACTORIELLE(I) ELSE B[I]:=1/FACTORIELLE(I);
 DIVC_POLY(A,B,Q,R,MAX);
 FOR I:=0 TO MAX DO Q[I]:=Q[I]*FACTORIELLE(I);
 WRITELN;
 WRITELN('Tableau des premiers nombres d''Euler ');
 FOR I:=2 TO MAX DO IF NOT ODD(I) THEN WRITELN('E',I DIV 2,' = ',NORMAL(Q[I]));
END.