home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------------------------- *)
- (* GULDIN.PAS *)
- (* Berechnung von Volumen und Mantelfläche bei Drehkörpern *)
- (* ------------------------------------------------------------------------- *)
-
- PROGRAM Guldin;
-
- USES
- NumInt;
-
- CONST
- Max = 100; (* Maximalzahl von Intervallhalbierungenen *)
- m = 15; (* Formatparameter für FLOAT-Zahlen *)
- n = 11;
-
- VAR
- a, b, Result, Error, eps : FLOAT;
- Decimals : BYTE;
-
- FUNCTION y(x : FLOAT) : FLOAT;
- (* die den Drehkörper erzeugende Funktion; hier: Rotationsparaboloid *)
- BEGIN
- y := Sqrt(x);
- END;
-
- {$F+}
- FUNCTION Surface(x : FLOAT) : FLOAT;
- (* Guldin'sche Regel zur Oberflächenberechnung *)
- BEGIN
- Surface := 2.0 * Pi * y(x) * Sqrt(1.0+Sqr(0.5/Sqrt(y(x))));
- END;
- {$F-}
-
- {$F+}
- FUNCTION Volume(x : FLOAT) : FLOAT;
- (* Guldin'sche Regel zur Volumenberechnung *)
- BEGIN
- Volume := Pi * Sqr(y(x));
- END;
- {$F-}
-
- BEGIN
- Write(^M^J'Oberflächen- und Volumenberechnung eines Drehkörpers:'^M^J);
- Write(^M^J'Untere Grenze: a = '); Read(a);
- Write( 'Obere Grenze: b = '); Read(b);
- Write(^M^J'Genauigkeit in Dezimalstellen: '); ReadLn(Decimals); WriteLn;
- eps := Exp(-ABS(Decimals)*Ln(10));
- IF Adaptive(@Gauss, @Volume, a, b, eps, 1, Max, Result, Error) THEN BEGIN
- WriteLn('Volumen V = ', Result:m:n);
- WriteLn(' ±', Error:m:n, ^j)
- END ELSE
- WriteLn('Geforderte Genauigkeit nicht erreicht !');
- IF Adaptive(@Gauss, @Surface, a, b, eps, 1, Max, Result, Error) THEN BEGIN
- WriteLn('Mantel M = ', Result:m:n);
- WriteLn(' ±', Error:m:n, ^j)
- END ELSE
- WriteLn('Geforderte Genauigkeit nicht erreicht !');
- WriteLn;
- END.