home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------------------------- *)
- (* SPHERE.PAS *)
- (* Berechnung des Kugel-Volumens durch Mehrfach-Integration *)
- (* ------------------------------------------------------------------------- *)
-
- PROGRAM Sphere;
-
- USES
- NumInt;
-
- CONST
- MaxSteps = 10; (* Maximale Zahl von Stützstellenverdopplungen *)
- v = 15; (* Formatparameter für FLOAT-Zahlen *)
- w = 11;
-
- VAR
- Result,Error,eps,R : FLOAT;
- a,b : VECTOR;
- N : POINTS;
- Decimals : BYTE;
-
- {$F+}
- FUNCTION dV(r : VECTOR) : FLOAT;
- (* das Volumenelement in Polarkoordinaten: dV = r²sinΦ·dr·dΦ·dΘ *)
- BEGIN
- dV := Sqr(r[1])*Sin(r[2]);
- END;
- {$F-}
-
- BEGIN
- Write('Berechnung des Kugelvolumens:'^M^J);
- Write('Radius der Kugel: R = '); Read(R);
- Write('Genauigkeit in Dezimalstellen: '); Read(Decimals); WriteLn;
-
- eps := Exp(-ABS(Decimals)*Ln(10)); (* relative Genauigkeit *)
- N[1] := 1; N[2] := 1; N[3] := 1; (* Anfangsunterteilungen *)
- a[1] := 0; b[1] := R; (* Integrationsgrenzen *)
- a[2] := 0; b[2] := Pi;
- a[3] := 0; b[3] := 2*Pi;
- IF Romberg(@dV, 3, a, b, eps, N, MaxSteps, Result, Error) THEN BEGIN
- WriteLn('Volumen: V = ', Result:v:w);
- WriteLn(' ±', Error:v:w, ^M^J);
- WriteLn('exakt: V = ', 4/3*Pi*R*R*R:v:w)
- END ELSE
- WriteLn('Geforderte Genauigkeit nicht erreicht !');
- WriteLn;
- END.