home *** CD-ROM | disk | FTP | other *** search
- { MaxonPascal3-Anpassung / Test: Falk Zühlsdorff (PackMAN) 1994 }
-
- PROGRAM Bernoulli(input,output);
-
- CONST max = 50;
-
- TYPE Bruch = Record z,n:integer END;
-
- VAR B:Array[0..max] Of Bruch;
- anz,m,i,j,k:integer;
-
- FUNCTION Binoko(n,k:integer):integer;
- VAR nf,kf,nkf,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:integer):integer;
- BEGIN
- While a<>b Do
- If a>b Then a:=a-b
- Else b:=b-a;
- ggt:=a
- END;
-
- PROCEDURE Add(VAR b:Bruch; x,y:integer);
- VAR g:integer;
- 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.
-
-