home *** CD-ROM | disk | FTP | other *** search
- { MaxonPASCAL3-Anpassung / Test: Falk Zühlsdorff (PackMAN) 1994 }
-
- Program Bernoulli(input,output);
-
- { Long-Integer-Version }
-
- Const max = 50;
-
- Type Bruch = Record z,n:longint End;
-
- Var B:Array[0..max] Of Bruch;
- anz,m,i:integer;
- j,k:longint;
-
-
- Function Binoko(n,k:integer):longint;
- Var nf,kf,nkf:longint;
- i:integer;
- Begin
- nf:=1; kf:=1; nkf:=1;
- For i:=1 To n Do
- Begin
- nf:=nf*i;
- If i=k Then kf:=nf;
- If i=n-k Then nkf:=nf
- End;
- Binoko:=nf Div (kf*nkf)
- End;
-
- Function ggt(a,b:longint):longint;
- Var c:longint;
- Begin
- While b<>0 Do
- Begin
- c:=a mod b;
- a:=b;
- b:=c
- End;
- ggt:=a
- End;
-
- Procedure Add(Var b:Bruch; x,y:longint);
- Var g:longint;
- Begin
- If x<>0 Then
- If b.z=0 Then
- Begin b.z:=x; b.n:=y End
- Else
- Begin
- g:=ggt(b.n,y);
- b.z:=(y div g)*b.z + (b.n div g)*x;
- b.n:=(b.n div g)*y;
- If b.n<0 Then Begin b.z:=-b.z;b.n:=-b.n End;
- If b.z=0 Then b.n:=1
- Else
- Begin
- g:=ggt(abs(b.z),b.n);
- b.n := b.n div g;
- b.z := b.z div g
- End
- End
- End;
-
- Begin
- write('Anzahl:');readln(anz);
- writeln;
- B[0].z:=1;
- B[0].n:=1;
- For m:=1 to anz do
- Begin
- B[m].z:=0;
- B[m].n:=1;
- For i:=0 to m-1 Do
- Begin
- j:= binoko(m+1,i)*B[i].z;
- If j<>0 Then
- Begin
- k:= ggt(abs(j),abs(B[i].n));
- add(b[m], j div k, B[i].n div k)
- End
- End;
- If B[m].z=0 Then k:=m+11 Else k:=ggt(abs(B[m].z), m+1);
- B[m].z := (-B[m].z) Div k;
- B[m].n := B[m].n * ((m+1) Div k);
- write('B(', m:2 , ') = ' , B[m].z:10);
- If B[m].z=0 Then writeln Else writeln('/',B[m].n:1)
- End;
- writeln
- End.
-
-