A large commit.
[pdp8.git] / sw / src / pascal / INTEGR.V2
diff --git a/sw/src/pascal/INTEGR.V2 b/sw/src/pascal/INTEGR.V2
new file mode 100644 (file)
index 0000000..5c8f161
--- /dev/null
@@ -0,0 +1,51 @@
+PROGRAM INTEGRATION(INPUT,OUTPUT);
+
+    VAR ANFANG,ENDE,FLAECHE: REAL;
+
+
+(*************** HIER INTEGRAND DEFINIEREN ******************)
+    FUNCTION F(X: REAL): REAL;
+        BEGIN
+            F := SIN(X)
+        END;
+(************************************************************)
+
+
+
+    FUNCTION INTEGRAL(A,B: REAL): REAL;
+
+        CONST   EPSILON = 1E-8;
+        VAR     K,N,I,J: INTEGER;
+                DELTA,SUMME,LETZTWERT: REAL;
+                ROMBERG: ARRAY[0..12] OF REAL;
+
+    BEGIN
+        K := 0;  N := 1;  DELTA := B-A;
+        ROMBERG[0] := ( F(A) + F(B) )*DELTA/2;
+
+        REPEAT
+            LETZTWERT := ROMBERG[0];
+            K := K+1;  N := 2*N;  DELTA := DELTA/2;
+            SUMME := 0;
+            FOR J := 1 TO N DIV 2 DO
+                SUMME := SUMME + F(A + (2*J-1)*DELTA);
+            ROMBERG[K] := ROMBERG[K-1]/2 + SUMME*DELTA;
+            I := 1;
+            FOR J := K-1 DOWNTO 0 DO
+                BEGIN   I := 4*I;
+                    ROMBERG[J] := (I*ROMBERG[J+1] - ROMBERG[J])/(I-1)
+                END
+        UNTIL ABS(ROMBERG[0]-LETZTWERT)<ABS(ROMBERG[0]*EPSILON);
+
+        INTEGRAL := ROMBERG[0]
+    END (* INTEGRAL *);
+
+
+BEGIN
+    WRITELN("B E S T I M M T E S   I N T E G R A L");
+    WRITELN;
+    WRITE("INTERVALLGRENZEN: ");  READ(ANFANG,ENDE);
+    FLAECHE := INTEGRAL(ANFANG,ENDE);
+    WRITELN;
+    WRITELN("WERT DES INTEGRALS: ", FLAECHE :20:10)
+END.