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);
}
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)
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.
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.”
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.
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.”
Ä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!!!
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.”