class Integral { // Funktion f(x) zu der die Fläche berechnet werden soll, x ist Argument aus obersumme bzw. untersumme static double f(double x) { double y; y = 1/((x * x) + 2); return y; } public static void main (String args[]) { // Ober- und Untergrenze Abfragen Out.print("Integralrechnung\nBitte geben Sie die Untergrenze an: "); double a = In.readDouble(); Out.print("Bitte geben Sie die Obergrenze an: "); double b = In.readDouble(); // Äußere Schleife, n mit 4 intialisieren und immer um Faktor 2 erhöhen, // äußere Schleife wegen Sichtbarkeit von "differenz" erforderlich for (double n=4;;n*=2) { // Summenvariablen bei jedem Durchlauf leeren double obersumme=0; double untersumme=0; // Innere Schleife, Fläche der Streifen berechnen für jedes n (bzw. x) und der jeweiligen Summe übergeben. for (int i=0,j=1;i<n && j<=n;i++,j++) { untersumme += f( a + i*(b-a)/n ) * (b-a) / n; obersumme += f( a + j*(b-a)/n ) * (b-a) / n; } // Betrag der Differenz bilden double differenz = Math.abs(obersumme-untersumme); // Teilergebnisse/-flächen ausgeben Out.println("n: " + n + " Untersumme: " + untersumme + " Obersumme: " + obersumme + " Differenz: " + differenz); // Abbruch der Schleife und Aufgabenteil b) if (differenz < 0.0001) { // !!! AUFGABE B !!! double ergebnis_gerundet = ((double) ((int) (((obersumme+untersumme)/2)*1000)))/1000; Out.println("\nErgebnis: " + ergebnis_gerundet + "\n"); // !!! ENDE AUFGABE B !!! break; } } }}