(*$B- Algorithmus 2.14 *) PROGRAM emege; CONST n=30; m=2; (* m ist die Packungsdichte = Anz. Dezimalstellen pro Wort *) (* Es werden m*n Stellen von e berechnet *) TYPE megezahl = ARRAY[0..n] OF integer; VAR a,s : megezahl; i,imin,c,k : integer; PROCEDURE add(n,imin: integer; VAR a,b,res: megezahl); VAR i: integer; BEGIN FOR i:=imin TO n DO res[i]:=a[i]+b[i] END; PROCEDURE uebertrag(n,c: integer; VAR a: megezahl); VAR i: integer; BEGIN FOR i:=n DOWNTO 1 DO WHILE a[i]>=c DO BEGIN a[i]:=a[i]-c; a[i-1]:=a[i-1]+1 END END; PROCEDURE teil(n,c:integer; VAR imin:integer; k: integer; VAR a: megezahl); VAR rest,i :integer; null : boolean; BEGIN null := true; rest:=a[imin]; FOR i:=imin TO n-1 DO BEGIN a[i]:=rest DIV k; rest:=(rest MOD k)*c+a[i+1]; IF null THEN IF a[i]=0 THEN imin:=i ELSE null :=false; END; a[n]:= rest DIV k END; BEGIN c:=1; FOR i:=1 TO m DO c:=c*10; FOR i:=0 TO n DO BEGIN a[i]:=0; s[i]:=0 END; (* INITIALISIERUNG *) s[1]:=2; a[1]:=1; k:=1; imin :=0; REPEAT k:=k+1; teil(n,c,imin,k,a); (* neuer Summand *) add(n,imin,s,a,s); (* neue Partialsumme *) uebertrag(n,c,s); UNTIL imin=n-1; FOR i:= 0 TO n DO write(s[i]:m) END.