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); }