myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Grundlagen von C# » Wurzel der Zahlen von 1 bis 10 mit dem Heron-Verfahren herausfinden
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

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

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
sno0ze
myCSharp.de-Mitglied

Dabei seit: 14.08.2019
Beiträge: 5


sno0ze ist offline

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

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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.

C#-Code:
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.

C#-Code:
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);
                }
14.08.2019 21:23 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
LaTino LaTino ist männlich
myCSharp.de-Poweruser/ Experte

avatar-4122.png


Dabei seit: 03.04.2006
Beiträge: 2.972
Entwicklungsumgebung: Rider / VS2019 / VS Code
Herkunft: Thüringen


LaTino ist online

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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
15.08.2019 07:01 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
sno0ze
myCSharp.de-Mitglied

Dabei seit: 14.08.2019
Beiträge: 5

Themenstarter Thema begonnen von sno0ze

sno0ze ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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.
15.08.2019 08:27 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Urza Urza ist männlich
myCSharp.de-Mitglied

Dabei seit: 28.05.2019
Beiträge: 28
Entwicklungsumgebung: VS 2017, VS 2019, ReSharper


Urza ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Müsstest du erg nicht innerhalb der äußeren Schleife zurück auf 1 setzen?
15.08.2019 09:13 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
sno0ze
myCSharp.de-Mitglied

Dabei seit: 14.08.2019
Beiträge: 5

Themenstarter Thema begonnen von sno0ze

sno0ze ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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.

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von sno0ze am 15.08.2019 09:47.

15.08.2019 09:37 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Urza Urza ist männlich
myCSharp.de-Mitglied

Dabei seit: 28.05.2019
Beiträge: 28
Entwicklungsumgebung: VS 2017, VS 2019, ReSharper


Urza ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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

Das gilt für die innere Schleife.

Zitat:
C#-Code:
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

C#-Code:
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);
                }
            }
        }
    }
15.08.2019 10:13 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
sno0ze
myCSharp.de-Mitglied

Dabei seit: 14.08.2019
Beiträge: 5

Themenstarter Thema begonnen von sno0ze

sno0ze ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ä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!!!
15.08.2019 10:36 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Urza Urza ist männlich
myCSharp.de-Mitglied

Dabei seit: 28.05.2019
Beiträge: 28
Entwicklungsumgebung: VS 2017, VS 2019, ReSharper


Urza ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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

C#-Code:
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:

C#-Code:
erg = (1+ (2 / 1)) / 2;
15.08.2019 10:48 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
sno0ze
myCSharp.de-Mitglied

Dabei seit: 14.08.2019
Beiträge: 5

Themenstarter Thema begonnen von sno0ze

sno0ze ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ja macht Sinn, jetzt habe ich es verstanden :)
15.08.2019 10:54 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 2 Monate.
Der letzte Beitrag ist älter als 2 Monate.
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 15.10.2019 08:23