// FunktionsIntegrator.java MM 2010 import Tools.IO.*; // Eingaben /** * Programm zur Integrieren von Funktionen. */ public class FunktionsIntegrator { /* ------------------------------------------------- */ // Dialog /** * Funktionsberechner: * Funktionseingabe, Wertberechnung. */ public void dialog() { // Ueberschrift System.out.println(); System.out.println( "Funktionsintegrator"); // Dialog char weiter = 'j'; do { // Neue Funktion Funktion fkt = funktionsAuswahl(); if( fkt == null) break; fkt.konsolenEingabe(); // Funktionsausgabe System.out.println(); System.out.println( "Integral von " + fkt); do { // Integralberechnug System.out.println(); berechneIntegral( fkt); System.out.println(); // Weiter weiter = IOTools.readChar( "Neues Integral (j/n)? "); } while( weiter == 'j'); weiter = IOTools.readChar( "Neue Funktion (j/n)? "); } while( weiter == 'j'); // Abschluss System.out.println(); System.out.println( "Programm beendet"); } /* ------------------------------------------------- */ // Funktion /** * Funktionsauswahl. * @return Funktion */ private Funktion funktionsAuswahl() { // Menue aller Funktionen System.out.println( "Funktionsauswahl"); System.out.println ( " Gerade ... 1"); System.out.println ( " Polynom ... 2"); System.out.println ( " Wurzel-Funktion ... 3"); System.out.println ( " e^x - Funktion ... 4"); System.out.println ( " a^x-Funktion ... 5"); System.out.println ( " sin-Funktion ... 6"); System.out.println ( " cos-Funktion ... 7"); System.out.println ( " tan-Funktion ... 8"); System.out.println ( " cot-Funktion ... 9"); System.out.println ( " arctan-Funktion ... 10"); System.out.println ( " ln-Funktion ... 11"); System.out.print ( " log-Funktion ... 12"); int eingabe = IOTools.readInteger(": "); // Festlegen der Funktion Funktion fkt = null; switch( eingabe) { case 1: fkt = new Gerade(); break; case 2: fkt = new Polynom( ); break; case 3: fkt = new Wurzel(); break; case 4: fkt = new Exp(); break; case 5: fkt = new Power(); break; case 6: fkt = new Sinus(); break; case 7: fkt = new Cosinus( ); break; case 8: fkt = new Tangens(); break; case 9: fkt = new Cotangens(); break; case 10: fkt = new Arctan(); break; case 11: fkt = new Ln(); break; case 12: fkt = new LogA(); break; default: System.out.println(); System.out.println( "Fehlerhafte Eingabe!"); } return fkt; } /* ------------------------------------------------- */ // Integrieren /** * Integralberechnung. * @param fkt Funktion */ private void berechneIntegral( Funktion fkt) { // Eingabe der Integralparameter double a, b; do { System.out.println(); a = IOTools.readDouble( " Untere Grenze a = "); System.out.println( a); b = IOTools.readDouble( " Obere Grenze b = "); System.out.println( b); } while( a >= b); // Eingaben der Stuetzstellen int s; do { System.out.print ( " Anzahl der Stuetzstellen s > 1, "); s = IOTools.readInteger( "s = "); System.out.println( s); } while( s < 2); // Trapez TrapezIntegral trapez = new TrapezIntegral(); trapez.setIntegral( fkt, a, b, s); // Integralberechnung double ergTrapez = trapez.integrieren(); System.out.println( " Trapez: F = " + ergTrapez); // Simpson if( s % 2 != 0) { SimpsonIntegral simpson = new SimpsonIntegral(); simpson.setIntegral( fkt, a, b, s); // Integralberechnung double ergSimpson = simpson.integrieren(); System.out.println( " Simpson: F = " + ergSimpson); } } /* ------------------------------------------------- */ // Programm /** * Hauptprogramm, startet Integration von Funktionen. */ public static void main( String[] args) { // Integrator erzeugen FunktionsIntegrator integrator = new FunktionsIntegrator(); // Integrator starten integrator.dialog(); } } /* ------------------------------------------------- */ // Testwerte // Integral von 0 bis 1 ueber ( 1.0 + 1.0 x^1 ) // Stuetzstellen: 5 // Trapez : 1.5 // Simpson: 1.5 // Integral von 0 bis 1 ueber ( 1.0 ) / ( 1.0 + 1.0 x^1 ) // Stuetzstellen: 3 // Trapez : 0.7083333333333333 // Simpson: 0.6944444444444443 // Stuetzstellen: 7 // Trapez : 0.6948773448773449 // Simpson: 0.6931697931697932