home *** CD-ROM | disk | FTP | other *** search
- (* ----------------------------------------------------- *)
- (* BINOMIAL.PAS *)
- (* (c) 1989 Alfred Kraft & TOOLBOX *)
- (* ***************************************************** *)
- PROGRAM binomialverteilung;
-
- {$N+}
-
- USES Crt;
-
- VAR
- n, k, i : INTEGER;
- p : REAL;
- h : EXTENDED;
- wahl : CHAR;
-
- FUNCTION pot(p : REAL; n : INTEGER) : EXTENDED;
- VAR
- prod : EXTENDED;
- BEGIN
- i := 1;
- prod := 1;
- IF n <> 0 THEN
- REPEAT
- prod := prod * p;
- Inc(i);
- UNTIL i > n;
- pot := prod;
- END;
-
- FUNCTION binkoeff(n, k : INTEGER) : EXTENDED;
- VAR
- max, Min, j : INTEGER;
- binko : EXTENDED;
- BEGIN
- IF ((n < 0) OR (k <0) OR (n < k)) THEN BEGIN
- WriteLn('unzulässiger Parameter');
- binkoeff := 0;
- Exit;
- END ELSE BEGIN
- IF k < n - k THEN BEGIN
- max := n - k;
- Min := k;
- END ELSE BEGIN
- max := k;
- Min := n - k;
- END;
- binko := 1;
- j := 1;
- WHILE j <= (n - max) DO BEGIN
- binko := binko * ( max + j) / j;
- Inc(j);
- END;
- binkoeff := binko;
- END;
- END;
-
- FUNCTION binomial(n, k : INTEGER; p : REAL) : EXTENDED;
- VAR
- q, a, b : EXTENDED;
- BEGIN
- IF ((n<1) OR (k<0) OR (n<k)
- OR (p<0) OR (p>1)) THEN BEGIN
- WriteLn('unzulässiger Parameter! ');
- binomial := 0;
- END ELSE BEGIN
- IF ((p <> 0) AND (p <> 1)) THEN BEGIN
- q := 1 - p;
- IF n = k THEN BEGIN
- a := pot(p, n);
- b := 1;
- END ELSE BEGIN
- IF k = 0 THEN BEGIN
- a := 1;
- b := pot(q, n);
- END ELSE BEGIN
- a := pot(p, k);
- b := pot(q, n - k);
- END;
- END;
- binomial := a * b * binkoeff(n, k);
- END ELSE BEGIN
- IF p = 0 THEN BEGIN
- IF k= 0 THEN binomial := 1
- ELSE binomial := 0;
- END ELSE BEGIN
- IF k = n THEN binomial := 1
- ELSE binomial := 0;
- END;
- END;
- END;
- END;
-
- PROCEDURE intein(VAR n : INTEGER);
- VAR
- Mem, posx, posy : INTEGER;
- li : LONGINT;
- Zg : BOOLEAN;
- BEGIN
- posx := WhereX;
- posy := WhereY;
- REPEAT
- ClrEol;
- {$I-}
- ReadLn(li);
- {$I+}
- Mem := IOResult;
- Zg := ((li < -MaxInt) OR (li > MaxInt));
- IF ((Mem <> 0) OR Zg) THEN GotoXY(posx, posy);
- UNTIL ((Mem = 0) AND (NOT Zg));
- n := li;
- END;
-
- PROCEDURE fuss;
- BEGIN
- Window(1, 1,80,25);
- Window(1,23,80,25);
- GotoXY(1, 1);
- FOR i := 1 TO 80 DO Write(Chr(196));
- Write('Fortsetzung : beliebige Taste... ');
- WriteLn(' Ende : Esc');
- Window(1,1,80,22);
- END;
-
- PROCEDURE bin_aus;
- BEGIN
- REPEAT
- WriteLn('bitte n, k und p eingeben : ');
- Write('n : '); intein(n);
- Write('k : '); intein(k);
- Write('p : '); ReadLn(p);
- h := binomial(n, k, p);
- IF h >= 0.0001 THEN WriteLn('b(n,k,p) = ',h:10:8)
- ELSE WriteLn('b(n,k,p) = ',h);
- WriteLn;
- wahl := ReadKey;
- UNTIL ((Ord(wahl) = 27) OR (UpCase(wahl) = 'o'));
- END;
-
- BEGIN
- wahl := 'b';
- ClrScr;
- fuss;
- bin_aus;
- END.
- (* ------------------------------------------------------ *)
- (* Ende von BINOMIAL.PAS *)