Java :: Aufgabe #177
2 Lösungen
Wurzel ziehen mit Intervallschachtelung
Anfänger - Java
von Felix
- 11.07.2017 um 21:30 Uhr
Schreibe eine Methode die aus einer Zahl die Wurzel zieht, benutze dafür die Intervallschachtelung.
Lösungen:
public static String wurzelBerechnung(double zahl) {
double oben = 0.0;
double unten = 1.0;
double i = 1.0;
if (zahl < 0) {
return "Wurzel aus einer negativen Zahl?";
} else {
if (zahl < 1) {
oben = 1.0;
unten = 0.0;
} else {
oben = 1.0;
while ((oben * oben) < zahl)
oben++;
if ((oben * oben) == zahl)
unten = oben;
else
unten = oben - 1;
}
while ((oben - unten) > 1.0E-14) {
i = i / 10;
while (Math.pow(unten + i, 2) < zahl)
unten = unten + i;
oben = unten + i;
}
String rueckgabe = ("Die Wurzel liegt zwischen " + unten + " und " + oben + ".");
return rueckgabe;
}
}
Main-Klasse:
Java-Code
Methoden aus meiner Methodensammlung:
Java-Code
import Methodensammlung.Methoden;
import java.math.BigDecimal;
import java.io.FileWriter;
import java.io.BufferedWriter;
import java.io.File;
import java.io.IOException;
/**
* Schreibe eine Methode die aus einer Zahl die Wurzel zieht, benutze dafür die Intervallschachtelung.
* Prinzip der Intervallverschachtelung: http://www.schule-studium.de/Mathe/Intervallschachtelung.html
*
* @author (nOrdan)
* @version (21.07.2019)
*/
public class Verschachtelung
{
Methoden m = new Methoden();
public static void main(String [] args) throws IOException
{
Verschachtelung v = new Verschachtelung();
v.inputs();
}
private void inputs() throws IOException
{
boolean valid1 = false;
int n = 0;
int stellen = 0;
while (valid1 == false)
{
String input1 = m.userInput("Geben Sie die Zahl ein aus welcher die Wurzel gezogen werden soll: ");
m.errorIntInput(input1);
try
{
n = m.parseInt(input1);
valid1 = true;
}
catch(Exception e)
{
m.errorMessage("Keine Zahl","Ungültige Eingabe");
}
}
valid1 = false;
while (valid1 == false)
{
String input1 = m.userInput("Wieviele Nachkommastellen sollen berechnet werden? Bedenken Sie, umso mehr Nachkommastellen sie verlangen, umso länger dauert die Berechnung!");
m.errorIntInput(input1);
try
{
stellen = m.parseInt(input1);
valid1 = true;
}
catch(Exception e)
{
m.errorMessage("Keine Zahl","Ungültige Eingabe");
}
}
berechnung(n,stellen);
}
public void berechnung(int n,int stellen) throws IOException
{
BigDecimal entfernung = new BigDecimal("1");
BigDecimal kommazahl = new BigDecimal("1");
for (int i = 0; i < stellen+1; i++)
{
while (((kommazahl.pow(2)).compareTo(BigDecimal.valueOf(n))) == -1)
{
kommazahl = kommazahl.add(entfernung);
}
kommazahl = kommazahl.subtract(entfernung);
entfernung = entfernung.divide(BigDecimal.valueOf(10));
}
BufferedWriter out = new BufferedWriter(new FileWriter(new File("GezogeneWurzel.txt")));
out.write(kommazahl.toString());
out.close();
m.informationMessage("Ihre Kommazahl ist in der Datei GezogeneWurzel.txt im Ordner dieses Programmes gespeichert" , "Ergebnis");
}
}
Methoden aus meiner Methodensammlung:
public void errorMessage(String message,String errorName)
{
JOptionPane.showMessageDialog(null,message,errorName,JOptionPane.ERROR_MESSAGE);
}
public void informationMessage(String message,String informationName)
{
JOptionPane.showMessageDialog(null,message,informationName,JOptionPane.INFORMATION_MESSAGE);
}
public void errorIntInput(String input)
{
if (input == null)
{
System.exit(0); //Drückt der User auf abbrechen wird null zurück gegeben und das Programm wird beendet
}
else if (input.isEmpty() == true)
{
}
}
public int parseInt(String input)
{
return Integer.parseInt(input);
}
public String userInput(String message)
{
return JOptionPane.showInputDialog(message);
}
