Laden...

Wurzel der Zahlen von 1 bis 10 mit dem Heron-Verfahren herausfinden

Erstellt von sno0ze vor 4 Jahren Letzter Beitrag vor 4 Jahren 1.452 Views
S
sno0ze Themenstarter:in
5 Beiträge seit 2019
vor 4 Jahren
Wurzel der Zahlen von 1 bis 10 mit dem Heron-Verfahren herausfinden

Hallo werte Community,

ich bin ein absoluter Neuling in C# bzw. allgemein in Programmierung und muss mich für mein Studium etwas reinfuchsen.
Mein Ziel bzw. meine Aufgabe ist es, die Wurzel der Zahlen von 1 bis 10 auszugeben und das Heron-Verfahren durchzuführen.

using System;

    public class Heron
    {
        public static void Main()
        {
            int i;
            double a, x, erg;
            a = 0;
            erg = 1;
            
            for (x = 1; x <= 10; x++)
            {
                a = Math.Sqrt(x); // square root
                Console.WriteLine("Die Wurzel aus " + x + " ist " + a); // output
    
            
                for (i = 1; i <= 5; i++)
                {
                    erg = (erg + (x / erg)) / 2;
                    Console.WriteLine("Der " + i + ". Naeherungswert ist " + erg);
                }
            }
        }
    }

Das Problem ist in der zweiten for-Schleife. Wenn erg = 1 ist und x = 9 kommt als Ergebnis 5 heraus.
Mein Programm allerdings spuckt mir eine 3 mit einigen Nachkommastellen aus.

Wenn ich die Schleife wie folgt einzeln teste, spuckt es mir die 5 als korrektes Ergebnis für den ersten Näherungswert aus, wenn erg = 1 und x = 9 ist.



double x, erg;
int = i;
x = 9;
                for (i = 1; i <= 5; i++)
                {
                    erg = (erg + (x / erg)) / 2;
                    Console.WriteLine("Der " + i + ". Naeherungswert ist " + erg);
                }

3.003 Beiträge seit 2006
vor 4 Jahren

Du deklarierst die innere Zählvariable i außerhalb der äußeren Schleife. Wenn die innere Schleife also zum zweiten Mal durchlaufen werden soll, welchen Wert hat dann die innere Zählvariable? Wird die innere Schleife ein zweites Mal durchlaufen, wenn sie diesen Wert hat?

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

S
sno0ze Themenstarter:in
5 Beiträge seit 2019
vor 4 Jahren

Mhm ich weiß nicht auf was du hinaus möchtest :'(
Wenn ich die Zählvariable direkt in der For-Anweisung deklariere erhalte ich das selbe Ergebnis.

U
69 Beiträge seit 2019
vor 4 Jahren

Müsstest du erg nicht innerhalb der äußeren Schleife zurück auf 1 setzen?

“Knowledge cannot replace friendship. I'd rather be an idiot than lose you.”

  • Patrick to Spongebob
S
sno0ze Themenstarter:in
5 Beiträge seit 2019
vor 4 Jahren

Ich meine nicht, weil mit dem errechneten erg im nächsten Schleifendurchgang weiter gerechnet werden soll.

Edit: Zumal die Schleife im zweiten Beispiel auch so rechnet wie sie soll. Nur in Verbindung mit dem Wurzelziehen aus der ersten for-Schleife habe ich irgendwo einen Fehler gemacht.

U
69 Beiträge seit 2019
vor 4 Jahren

Ich meine nicht, weil mit dem errechneten erg im nächsten Schleifendurchgang weiter gerechnet werden soll.

Das gilt für die innere Schleife.

erg = (erg + (x / erg)) / 2;  

Für x = 2 hat erg hier das Ergebnis des Heron-Verfahrens von x=1.
Für x = 3 hat erg hier das Ergebnis des Heron-Verfahrens von x=2.
usw.

Wenn ich aber auf Wikipedia schaue steht da x0 = (a+1)/2
=> erg ist also beim ersten Durchlauf der inneren Schleife immer 1

using System;

    public class Heron
    {
        public static void Main()
        {
            int i;
            double a, x, erg;
            a = 0;

            for (x = 1; x <= 10; x++)
            {
            erg = 1;
                a = Math.Sqrt(x); // square root
                Console.WriteLine("Die Wurzel aus " + x + " ist " + a); // output


                for (i = 1; i <= 5; i++)
                {
                    erg = (erg + (x / erg)) / 2;
                    Console.WriteLine("Der " + i + ". Naeherungswert ist " + erg);
                }
            }
        }
    }

“Knowledge cannot replace friendship. I'd rather be an idiot than lose you.”

  • Patrick to Spongebob
S
sno0ze Themenstarter:in
5 Beiträge seit 2019
vor 4 Jahren

Äh ja, das war die Lösung all meiner Probleme. Jetzt sind die Ergebnisse korrekt, ich danke Dir vielmals dafür.

So ganz verstanden habe ich es noch nicht in der Eile, aber ich schau mir das Ganze nochmal in Ruhe an

Nochmals danke!!!

U
69 Beiträge seit 2019
vor 4 Jahren

Gerne...

Hier nochmal zum Verständnis.

Nehmen wir mal an:
Das Ergebnis des Verfahrens für x=1 ist 42...
Dann startest du das Verfahren für x = 2.
Dann steht in der inneren Schleife für i = 1

erg = (42+ (2 / 42)) / 2;

durch das zurücksetzen von erg auf 1 in der äußeren Schleife, steht dann hier aber wieder wie gewünscht:

erg = (1+ (2 / 1)) / 2;

“Knowledge cannot replace friendship. I'd rather be an idiot than lose you.”

  • Patrick to Spongebob
S
sno0ze Themenstarter:in
5 Beiträge seit 2019
vor 4 Jahren

Ja macht Sinn, jetzt habe ich es verstanden 😃