package C_BSP_Seite12;
import java.lang.Math;
public class Sinus
{
/**
* @author Daniel Schaffer
* Class:1ABIF
* Date:19.10.2013
*/
public static void main(String[] args)
{
// TODO Auto-generated method stub
// Nach Eingabe der Genauigkeit g und x soll der Computer den Wert sin(x) durch die Sinus-Reihe berechnen:
//Eingabe der Werte g und x
double g = Double.parseDouble(javax.swing.JOptionPane.showInputDialog( "Geben Sie die Genauigkeit g ein!" ));//Genauigkeit
int x = Integer.parseInt(javax.swing.JOptionPane.showInputDialog( "Geben Sie die Zahl x ein!" )); // Zahl x
double sin; // sinus
int n=3; // potenz
double y; // ergenis vom potenzieren
double fak=1;// fakultät
int i=1; //Zählvariable
double ab; //abbruch
double fak2=1;//fakultät 2
double erg=0;
sin=x;
do
{
y = Math.pow(x, n); //Potenzieren
//System.out.println("y:"+y);
for(int j=2;j<=n;j++)// Fakultät berechnen
{
fak*=j;
}
n+=2;
//System.out.println("fak:"+fak);
if(i%2!=0)
{
sin-=(y/fak);
//System.out.println("sin-:"+sin);
}
else
{
sin+=(y/fak);
//System.out.println("sin+:"+sin);
}
ab=(2*i)-1;
//System.out.println("ab:"+ab);
x= Math.abs(x);
i++;
double ab1=Math.pow(x,ab);
//System.out.println("ab1:"+ab1);
for(int j=2;j<=ab;j++)// Fakultät berechnen
{
fak2*=j;
}
//System.out.println("fak2:"+fak2);
erg= (ab1/fak2);
System.out.println("erg:"+erg);
fak=1;
fak2=1;
}
while(erg<=g);
System.out.println(sin);
}
}
private static int fak(int k){
//berechne fakultät von k
}
package C_BSP_Seite12;
import java.lang.Math;
import javax.swing.JOptionPane;
public class Sinus
{
/**
* @author Daniel Schaffer
* Class:1ABIF
* Date:19.10.2013
*/
private static double fak (double i)
{
double fak=1;
for(double j=2;j<=i;j++)// Fakultät berechnen
{
fak*=j;
}
return fak;
}
public static void main(String[] args)
{
// TODO Auto-generated method stub
// Nach Eingabe der Genauigkeit g und x soll der Computer den Wert sin(x) durch die Sinus-Reihe berechnen:
//Eingabe der Werte g und x
double g = Double.parseDouble(javax.swing.JOptionPane.showInputDialog( "Geben Sie die Genauigkeit g ein!" ));//Genauigkeit
double x = Double.parseDouble(javax.swing.JOptionPane.showInputDialog( "Geben Sie die Zahl x ein!" )); // Zahl x
double sin; // sinus
int n=1; // Anzahl des Schleifendurchlaufes
double y; // ergenis vom potenzieren
double i=3; //Anfangswert
double erg=0; // Ergebnis der Abbruchbedingung
sin=x;
do
{
y = Math.pow(x,i); //Potenzieren
if(i%2!=0) //prüfen ob gerader oder ungerader Schleifendurchlauf
{
sin-=(y/fak(i));
}
else
{
sin+=(y/fak(i));
}
double xabs= Math.abs(x); // absolut wert anzeigen
int z=(2*n)-1;
double ab1=Math.pow(xabs,z); //potenz berechnen
erg= (ab1/fak(z)); // Ergebnis der Abbruchbedingung ausrechnen.
n++; // Schleifendurchlauf um 1 erhöhen
i+=2; // Anfangswert um 2 erhöhen
}
while(erg<=g);
JOptionPane.showMessageDialog(null, "sinus(x) "+sin, "Sinus",JOptionPane.INFORMATION_MESSAGE);
}
}
i%2 != 0
n % 2 != 0
private static boolean isEnd(int g, int x, int n){
//...
}
do{
//...
}while(! isEnd(g, x, n));
Die Fakultät ist nur für natürliche Zahlen definiert.
private static boolean isEnd (double g,double x,int n)
{
double xabs= Math.abs(x); // absolut wert anzeigen
int z=(2*n)-1;
double ab1=Math.pow(xabs,z); //potenz berechnen
double erg= (ab1/fak(z)); // Ergebnis der Abbruchbedingung ausrechnen.
return true;
}
private static boolean isEnd (double g,double x,int n)
{
double xabs= Math.abs(x); // absolut wert anzeigen
int z=(2*n)-1;
double ab1=Math.pow(xabs,z); //potenz berechnen
double erg= (ab1/fak(z)); // Ergebnis der Abbruchbedingung ausrechnen.
return false;
}
na, wenn du das Ergebnis fertig berechnet hast. Der Wert für g liegt dir ja auch vor (wurde übergeben).aber wo vergleiche ich ob das Ergebnis kleiner als g ist?
private static boolean isEnd (double g,double x,int n)
{
double xabs= Math.abs(x); // absolut wert anzeigen
int z=(2*n)-1;
double ab1=Math.pow(xabs,z); //potenz berechnen
double erg= (ab1/fak(z)); // Ergebnis der Abbruchbedingung ausrechnen.
System.out.println(erg);
if (erg<g)
{
return true;
}
else
{
return false;
}
}
package C_BSP_Seite12;
import java.lang.Math;
import javax.swing.JOptionPane;
public class Sinus
{
private static char[] isEnd;
/**
* @author Daniel Schaffer
* Class:1ABIF
* Date:10.11.2013
*/
private static int fak (double i)
{
int fak=1;
for(int j=2;j<=i;j++)// Fakultät berechnen
{
fak*=j;
}
return fak;
}
private static boolean isEnd (double g,double x,int n)
{
double xabs= Math.abs(x); // absolut wert anzeigen
int z=(2*n)-1;
double ab1=Math.pow(xabs,z); //potenz berechnen
double erg= (ab1/fak(z)); // Ergebnis der Abbruchbedingung ausrechnen.
// System.out.println(erg);
return erg < g;
}
public static void main(String[] args)
{
// TODO Auto-generated method stub
// Nach Eingabe der Genauigkeit g und x soll der Computer den Wert sin(x) durch die Sinus-Reihe berechnen:
//Eingabe der Werte g und x
double g = Double.parseDouble(javax.swing.JOptionPane.showInputDialog( "Geben Sie die Genauigkeit g ein!" ));//Genauigkeit
double x = Double.parseDouble(javax.swing.JOptionPane.showInputDialog( "Geben Sie die Zahl x ein!" )); // Zahl x
double sin; // sinus
int n=1; // Anzahl des Schleifendurchlaufes
double y; // Ergebnis vom potenzieren
double i=3; //Anfangswert
sin=x;
do
{
y = Math.pow(x,i); //Potenzieren
if(n%2!=0) //prüfen ob gerader oder ungerader Schleifendurchlauf
{
sin-=(y/(fak(i)));
}
else
{
sin+=(y/(fak(i)));
}
isEnd(g,x,n);
n++; // Schleifendurchlauf um 1 erhöhen
i+=2; // Anfangswert um 2 erhöhen
}
while(! isEnd(g,x,n));
JOptionPane.showMessageDialog(null, "sinus(x) "+sin, "Sinus",JOptionPane.INFORMATION_MESSAGE);
}
}
long