Quadratwurzelrechnung mittels Heron-Verfahren

L

lady_x

Neues Mitglied
Hallo,
meine Aufgabe ist, Java so zu programmieren so dass bei Eingabe in die Konsole nach 100 Näherungsverfahren das Ergebnis herauskommt.
Genauer gesagt:
Programmieren Sie eine Klasse SquareRoot, die die Quadratwurzel eines von der Konsole eingelesenen double Wertes 𝑎 wie folgt berechnet. Sie beginnen mit der 0. Annäherung als Startwert 𝑥=1. 0𝑑. Die erste Annäherung erhalten Sie mit der Zuweisung𝑥𝑥=1/2 * (𝑥+𝑎/𝑥). Alle weiteren Annäherungen berechnen sich mit derselben Formel. Geben Sie die 100. Annäherung von √𝑎 auf der Konsole aus.

Meine Idee sieht folgendes aus:

Java:
import java.util.Scanner;
    //Zahl in der Konsole lesen
    //Startwert x = 1.0d (0. Annäherung)
    //weitere Annäherung - siehe Formel
    //Ziel: 100. Annäherung -> Ergebnis
    public class SquareRoot {
        public static void main(String[] args) {
            Scanner in = new Scanner(System.in);
            double n = in.nextDouble();
            double b = n;
            double c = 1;
            double summe = 1;

            while (c <= 100) {
                 c = (b + 1)/2;
                 summe = 1/2 * (c + b/c);
                 c = c + summe;
                 c++;
            if ( c <= 101){
            break;
            }
                 System.out.println(c);
            }
            System.out.println(summe);
        }
    }

Ich bitte euch um Hilfe, da ich die Fehler nicht finde. Bitte beachte, nicht mit return sondern nur über Schleife rechnen lassen.
LG
 
BestGoalkeeper

BestGoalkeeper

Top Contributor
Das wird dir bestimmt helfen:
Java:
import java.util.Scanner;

// Zahl in der Konsole lesen
// Startwert x = 1.0d (0. Annäherung)
// weitere Annäherung - siehe Formel
// Ziel: 100. Annäherung -> Ergebnis
public class SquareRoot {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println("Bitte gebe die Zahl ein, deren Quadratwurzel mit 100 Schleifen-Durchläufen berechnet werden soll:");
        double a = new Scanner(System.in).nextDouble();
        /*
         * Die Näherung
         */
        double x = 1.0d;
        for (int i = 0; i < 10; i++) {
            x = 0.5 * (x + a / x);
            System.out.println("Die " + (i + 2) + ". Näherung lautet: " + x);
        }
        System.out.println("Die Wurzel aus 2 lautet: " + Math.sqrt(2));
    }

}
lg
 
L

LimDul

Top Contributor
Hallo,
meine Aufgabe ist, Java so zu programmieren so dass bei Eingabe in die Konsole nach 100 Näherungsverfahren das Ergebnis herauskommt.
Genauer gesagt:
Programmieren Sie eine Klasse SquareRoot, die die Quadratwurzel eines von der Konsole eingelesenen double Wertes 𝑎 wie folgt berechnet. Sie beginnen mit der 0. Annäherung als Startwert 𝑥=1. 0𝑑. Die erste Annäherung erhalten Sie mit der Zuweisung𝑥𝑥=1/2 * (𝑥+𝑎/𝑥). Alle weiteren Annäherungen berechnen sich mit derselben Formel. Geben Sie die 100. Annäherung von √𝑎 auf der Konsole aus.

Meine Idee sieht folgendes aus:

Java:
import java.util.Scanner;
    //Zahl in der Konsole lesen
    //Startwert x = 1.0d (0. Annäherung)
    //weitere Annäherung - siehe Formel
    //Ziel: 100. Annäherung -> Ergebnis
    public class SquareRoot {
        public static void main(String[] args) {
            Scanner in = new Scanner(System.in);
            double n = in.nextDouble();
            double b = n;
            double c = 1;
            double summe = 1;

            while (c <= 100) {
                 c = (b + 1)/2;
                 summe = 1/2 * (c + b/c);
                 c = c + summe;
                 c++;
            if ( c <= 101){
            break;
            }
                 System.out.println(c);
            }
            System.out.println(summe);
        }
    }

Ich bitte euch um Hilfe, da ich die Fehler nicht finde. Bitte beachte, nicht mit return sondern nur über Schleife rechnen lassen.
LG
Punkt eins: Benne die Variablen vernünftig. So ist es extrem schwer zu lesen. Es gibt n,b und c - was macht was?

Die break Anweisung sieht falsch aus - wenn c <= 100 ist, springst du aus der while schleife raus. Der ganze if-block kann weg
 
BestGoalkeeper

BestGoalkeeper

Top Contributor
LimDul hat es schön erklärt, die vielen, nicht alle benötigte Variablen wirken etwas holprig!
 
mihe7

mihe7

Top Contributor
Hier versteckt sich ein Fehler:
Java:
summe = 1/2 * (c + b/c);

1/2 ist eine Division zweier Ganzzahlen und wird daher ein ganzzahliges Ergebnis liefern, nämlich 0.
 
BestGoalkeeper

BestGoalkeeper

Top Contributor
Ja ich hoffe, die TE weiß, dass 1 geteilt durch 2 0,5 ergibt. ;) Java rechnet bei 1 / 2 allerdings mit Ganzzahlen ohne Rest!

Also
  1. zu viele Variablen
  2. eine überflüssige Schleifen Abbruch Bedingung
  3. Scanner wiederverwendet!
  4. schlechte Variablenbezeichner
  5. Kommentare an falscher Stelle
  6. keine Eingabemeldung an den Benutzer
 
BestGoalkeeper

BestGoalkeeper

Top Contributor
+ das Verfahren konvergiert eigentlich so schnell, dass es nach 10 Durchläufen meist keine Änderung mehr gibt....
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Klassenübergreifende Ausgabe mittels "getter" nicht möglich Java Basics - Anfänger-Themen 21
M Objekte mittels equals vergleichen Java Basics - Anfänger-Themen 14
I csv auslesen, mittels List Java Basics - Anfänger-Themen 18
V Erste Schritte Potenzen b^n mittels Schleife ermitteln Java Basics - Anfänger-Themen 7
S XML mittels HTTP Get Anfrage Java Basics - Anfänger-Themen 4
W Teilstring durch Teilstring mittels StringBuilder ersetzen Java Basics - Anfänger-Themen 7
P Liste mit Lücken mittels Filter aggregieren Java Basics - Anfänger-Themen 7
M Methoden Mittelwert rationaler Zahlen mittels Methode Java Basics - Anfänger-Themen 4
P Klassen In einer Autoklasse das Objekt Auto mittels Collection Speichern Java Basics - Anfänger-Themen 4
M Fibonacci rekursiv mittels Cache Java Basics - Anfänger-Themen 17
K Methoden Zahlensysteme umwandeln mittels Rekursion Java Basics - Anfänger-Themen 5
S int-Array mittels Arrays.sort() in einer Schleife sortieren. Java Basics - Anfänger-Themen 2
A JavaScript Object Notation einbinden mittels Maven Java Basics - Anfänger-Themen 7
L Liste mittels Stack implementieren Java Basics - Anfänger-Themen 0
J OOP GUI-Einstellungen mittels Preferences Java Basics - Anfänger-Themen 0
J ComboBox mittels neuer Methode befüllen Java Basics - Anfänger-Themen 3
A Android-Lib: Sourcecode Generator mittels Annotation Processing Java Basics - Anfänger-Themen 0
W Erste Schritte Exceltabelle in Datenbank übertragen mittels XDEV Java Basics - Anfänger-Themen 7
L Histogram mittels Schleifen und Arrays Java Basics - Anfänger-Themen 9
S Klassen Tiefe Kopie mittels Kopierkonstruktor Java Basics - Anfänger-Themen 6
S Columnindex mittels Columnname herrausfinden Java Basics - Anfänger-Themen 6
M Explorer oeffnen mittels java.awt.Desktop Java Basics - Anfänger-Themen 18
Dogge URL-Ausgabe/Verarbeitungsproblem mittels einer Applikation Java Basics - Anfänger-Themen 2
H Methoden Array aus Punkten erzeugen, mittels Punkt-Klasse Java Basics - Anfänger-Themen 5
S Dateien mittels Path(s) kopieren und umbenennen. Java Basics - Anfänger-Themen 4
C Dynamische (AJAX) Inhalte einer Webseite mittels Java auslesen Java Basics - Anfänger-Themen 2
N Mittels For Schleife Klasse erzeugen Java Basics - Anfänger-Themen 32
B Abfrage mittels Variable vereinfachen Java Basics - Anfänger-Themen 6
D Klassen Zeichnen von Figuren mittels vorgegebener Klasse Java Basics - Anfänger-Themen 3
P Collatz-Folge mittels indirekter Rekursion Java Basics - Anfänger-Themen 5
J Wurzelberechnung (mittels Newton) Java Basics - Anfänger-Themen 14
B Lotto mittels TreeSet Java Basics - Anfänger-Themen 3
C Vererbung "extends" umgehen mittels Objekterzeugung?! Java Basics - Anfänger-Themen 29
A String mittels RegEx filtern Java Basics - Anfänger-Themen 13
U E-Mails mittels Java senden. Java Basics - Anfänger-Themen 2
J Aufruf von Funktionen in *.jar mittels Eclipse Java Basics - Anfänger-Themen 4
E PHP Datei mittels Java aufrufen? Java Basics - Anfänger-Themen 3
P Collections Queue mittels ArrayList Java Basics - Anfänger-Themen 2
F Substring mittels RegEx ermitteln/ersetzen? Java Basics - Anfänger-Themen 2
R 3 Datumsangaben sortieren mittels Switch Java Basics - Anfänger-Themen 9
J Arraylänge mittels "Array.getLength" bestimmen!? Java Basics - Anfänger-Themen 3
I Ascii Bild mittels Scanner einlesen Java Basics - Anfänger-Themen 9
K OOP Datenkapselung mittels private - length Attribut bei Array Java Basics - Anfänger-Themen 3
M Delphi-DLL mittels JNI aufrufen Java Basics - Anfänger-Themen 11
H .jar Consolenprogramm mittels Doppelklick starten Java Basics - Anfänger-Themen 2
S SQL Anweisung mittels PreparedStatement Java Basics - Anfänger-Themen 15
M Additions mittels Rekursion Java Basics - Anfänger-Themen 15
E Array mittels Methode umgekehrt ausgeben Java Basics - Anfänger-Themen 6
Binary.Coder Skalarprodukt mittels long und binärzahlen Java Basics - Anfänger-Themen 5
M Auf Java (Desktop) Applikation mittels Webseite zugreifen Java Basics - Anfänger-Themen 6
W Suche nach strings zwischen eckigen Klammern mittels regulärer Ausdrücke Java Basics - Anfänger-Themen 3
Gonzalez Eingabe des Benutzers mittels readLine()-Methode. Klappt in meinem Beispiel nicht! Java Basics - Anfänger-Themen 7
R JTextField mittels JButton in Konsole ausgeben Java Basics - Anfänger-Themen 2
Z Terminkalender mittels Klassen und Feldern Java Basics - Anfänger-Themen 2
M Benutzer löschen mittels Netbeans Java Basics - Anfänger-Themen 4
I (fremde) IP mittels Applet auslesen Java Basics - Anfänger-Themen 6
G Mittels Runtime prüfen ob ein Programm läuft? Java Basics - Anfänger-Themen 18
M MenuShortcut nur mittels Shift+Taste Java Basics - Anfänger-Themen 3
N einbinden von anderen klassen mittels import Java Basics - Anfänger-Themen 2
M Datei speichern mittels InputStream Java Basics - Anfänger-Themen 13
G Navigations mittels Applet Java Basics - Anfänger-Themen 3
M ArrayList sortieren mittels Comparator Java Basics - Anfänger-Themen 10
C Lösung einer Aufgabe mittels Iteration und Rekursion Java Basics - Anfänger-Themen 12
T Zugriff auf umgebendes Objekt mittels Objekt innerer Klasse Java Basics - Anfänger-Themen 2
K Java-Programm mittels Shell-Skript aufrufen Java Basics - Anfänger-Themen 3
L Vorhandene SVG mittels Batik anzeigen Java Basics - Anfänger-Themen 8
K Datum mittels Thread aktualisieren Java Basics - Anfänger-Themen 6
G mittels Parameter Variable identifizieren Java Basics - Anfänger-Themen 6
T Zeitmesser mittels Threads implementieren Java Basics - Anfänger-Themen 16
V Mittels Java Pfeile erstellen Java Basics - Anfänger-Themen 3
J mehrere JCheckBoxen mittels Schleife abfragen Java Basics - Anfänger-Themen 13
T Erstellen eines Steuerprogramms mittels if-anweisungen Java Basics - Anfänger-Themen 10
R Vector nach Teilzeichenkette durchsuchen (mittels regex) Java Basics - Anfänger-Themen 5
G Mittels RegExp "Variablen" extrahieren Java Basics - Anfänger-Themen 4
T Fernsteuerung mittels Sockets (Architektur okay?) Java Basics - Anfänger-Themen 4
H Subtraktion mittels Negierung auf Addition zurückführen Java Basics - Anfänger-Themen 4
G Objekte mittels Schleife anlegen und ansprechen Java Basics - Anfänger-Themen 8
A Programm mittels Konsole öffnen Java Basics - Anfänger-Themen 12
B Querverweise auf eine Hilfedatei mittels ?Button? Java Basics - Anfänger-Themen 4
E Methodenaufruf mittels variable? kA Java Basics - Anfänger-Themen 5
P Collection Vector speichern mittels Serialisierung? Java Basics - Anfänger-Themen 2
M Heron Verfahren Java Basics - Anfänger-Themen 3
B Quadratwurzel nach Heron in rekursiver Darstellung Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Anzeige

Neue Themen


Oben