package analysis;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.lang.*;
import java.lang.Math;
import java.lang.StringBuffer;
/**
* Überschrift: Analysis
* Beschreibung:
* Copyright: Copyright (c) 2002
* Organisation: HAW
* @author Marc Heiligenstein
* @version 1.0
*/
public class Analysis extends Applet implements ActionListener{
Button button1;
TextField topTextField, startTextField,sumTextField;
Label l,l2,steps, error,result;
Color blue = new Color(25,0,240),red = new Color(150,0,50),green = new Color(0,100,100);
TextArea tsteps, errort;
String s1 = "";
String s2 ="";
StringBuffer b1 = new java.lang.StringBuffer();
StringBuffer b2 = new java.lang.StringBuffer();
/**Das Applet initialisieren, hier wird das Layout festgelegt*/
public void init() {
// Der Layout-Manager
GridBagLayout gridbag = new GridBagLayout();
GridBagConstraints c = new GridBagConstraints();
setFont(new Font( "Helvetica" , Font.PLAIN, 12));
setLayout(gridbag);
// Label Ausgangswert
c.weighty = 0.25; // Es wird Platz in vertikaler Richtung geschaffen
c.weightx = 1.0; // in horizontaler Richtung
l = new Label( "Ausgangswert : " );
gridbag.setConstraints(l, c);
add(l);
// Text-Zeile Ausgangswert
c.weighty =0.25;
c.gridwidth = GridBagConstraints.REMAINDER;
topTextField = new TextField( "25" ,10);
topTextField.setFont(new Font( "Monospaced" ,Font.PLAIN,12));
gridbag.setConstraints(topTextField, c);
add(topTextField);
//Label Startwert
c.gridwidth = 1;
l2 = new Label( "Startwert der Addition u. 1. Divisor : " );
gridbag.setConstraints(l2, c);
add(l2);
// Text-Zeile fuer den Startwert der Addition und Divisor
startTextField = new TextField( "7" , 10);
startTextField.setFont(new Font( "Monospaced" ,Font.PLAIN,12));
c.gridwidth = GridBagConstraints.REMAINDER;
gridbag.setConstraints(startTextField, c);
add(startTextField);
// Der Knopf
button1 = new Button( "GO" ); //Initialisieren mit Beschriftung
button1.setBackground(blue); // Hier kommt die Farbe ins Spiel
c.anchor = GridBagConstraints.CENTER; // in die Mitte mit dem Knopf
gridbag.setConstraints(button1, c);
add(button1);
//Wenn der Knopf gedrückt wird
button1.addActionListener(new java.awt.event.ActionListener(){
public void actionPerformed(ActionEvent e) {
button1_actionPerformed(e);
}
});
// Label Ergebnis
c.gridwidth = 1; // auf Default-Wert zurückgesetzt
steps = new Label( "Zwischenwert nach jedem Durchgang : " );
gridbag.setConstraints(steps, c);
add(steps);
// Label Fehler
c.gridwidth = GridBagConstraints.REMAINDER; // die letzte Componente in der Reihe
error = new Label( "Fehler verglichen mit Wurzel-Funktion : " );
gridbag.setConstraints(error, c);
add(error);
// Text-Feld fuer die Ausgabe der Durchgaenge
c.gridwidth = 1;
tsteps = new TextArea(s1,5,35,1);
tsteps.setEditable(false);
tsteps.setForeground(blue); // Farbe für den Text
gridbag.setConstraints(tsteps, c);
add(tsteps);
// Text-Feld fuer die Ausgabe des Fehlers
c.gridwidth = GridBagConstraints.REMAINDER; // die letzte Componente in der Reihe
errort = new TextArea(s2,5,35,1);
errort.setEditable(false);
errort.setForeground(red); // die Textausgabe wird farbig
gridbag.setConstraints(errort, c);
add(errort);
// Label Java-Wurzelfunktion
c.gridwidth = GridBagConstraints.REMAINDER;
result = new Label( "Ergebnis der Wurzelfunktion von Java : " );
gridbag.setConstraints(result, c);
add(result);
// Text-Zeile zur Ausgabe des Ergebnisses der Java-Funktion
sumTextField = new TextField(20);
sumTextField.setEditable(false);
sumTextField.setForeground(green);
gridbag.setConstraints(sumTextField, c);
add(sumTextField);
}
// Wird benötigt, da die actionPerformed()-Methode eine innere Klasse ist
public void actionPerformed(ActionEvent l){}
// Wenn der Knopf gedrückt wird werden die Werte eingelesen und die Mathematik "angeworfen"
void button1_actionPerformed(ActionEvent e) {
double stat = java.lang.Double.parseDouble(topTextField.getText()); // Von diesem Wert wird die Wurzel gesucht *
double temp = java.lang.Double.parseDouble(startTextField.getText()); // Startwert der Addition und Divisor*
double wurzel = Math.sqrt(stat); // Hier wird die Wurzel von Java für Vergleichszwecke ausgerechnet
if(stat >= 0 && temp > 0){ // Alle positiven Zahlen + 0, auch der Startwert der Addition muss positiv sein
double bug = 0; //an diese Variable wird der Fehler gebunden
double result = 999999998; // Ergebnis
double previus = 999999999; //In dieser Variabel wird der Vorgängerwert der aktuellen Berechnung gespeichert
for (int i=1; previus > result && result > 0.0; i++){
previus = result; // das aktuelle Ergebnis wird an die Variable für den Vorgänger gebunden
result = (temp + stat / temp)/ 2; // Berechnung
temp = result; // das aktuelle Ergebnis wird als Anfangswert und Divisor der Funktion gesetzt
if(previus > result){
s1 = new String("\n" + i + ". Durchgang: " + Double.toString(result));
// Berechnung der Differenz des jeweiligen Durchgangs zum Ergebnis der Java-Wurzelfunktion.
if(wurzel > 0.0){
bug = result - wurzel;
s2 = new String("\n\t" + Double.toString(bug));
}
// Bei der 0 ist das Ergebnis = Fehler, deswegen keine Ausgabe, dafür Text.
else{
s2 = new String( "\n\t" + "Ergebnis = Fehler");
}
// Nach jedem Durchgang werden die Strings in die Buffer gelesen.
b1.append(s1);
b2.append(s2);
}
}
// Nachdem die Schleife beendet wurde wird das Ergebnis von den TextAreas angezeigt.
tsteps.setText((b1.toString()));
errort.setText((b2.toString()));
// Ausgabe des Ergebnis der Java-Wurzelfunktion
sumTextField.setText( " " + Double.toString(wurzel));
// Anschließend werden die Buffer geleert, TextArea stellt keine Methode zum Löschen zur Verfügung.
b1.delete(0,b1.length());
b2.delete(0,b2.length());
}
// Dieser Text erscheint wenn einer der gewählten Werte negativ ist, die Funktion wird nicht durchlaufen.
else{
s1 = new String( "\n Ausgangswert muss >= 0 sein" );
tsteps.setText(s1);
s2 = new String( "\n Startwert u. Divisor muss > 0 sein" );
errort.setText(s2);
sumTextField.setText( " So geiht dat nich" );
}
}
}