Autor Beitrag
HansW
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Sa 12.04.14 19:11 
Hallo,

ich soll als Übung ein Programm schreiben, dass die unendliche Reihe ausrechnet, wobei der Term x/2^n kleiner als 0.00001 sein soll.

Wobei x eingelesen wird und somit "nur" n berechnet werden soll.

Jetzt meine Frage wie kann ich das machen? Reicht eine for schleife für o.g. Term aus?

Kann mir jemand einen Tipp geben? Komme einfach nicht drauf.

Gruß Hans
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Sa 12.04.14 19:24 
Da gibt es zwei Möglichkeiten: Du kannst Dir aus x/2^n < 0.00001 ausrechnen, bis zu welchen n Du gehen musst und dann mit einer for-Schleife arbeiten, oder Du nimmst eine while-Schleife und prüfst in jedem Schleifendurchlauf, ob die Bedingung nun erfüllt ist.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
HansW Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Sa 12.04.14 20:07 
Vielen Dank Christian für die schnelle antwort.

Kannst du mir etwas mehr helfen? Wie meinst du das genauer mit der while-schleife?

Ich weiß nicht wie ich das n setzen soll bzw. die ganze Formel. Wäre es nur z.b. x/n würde ich es sofort wissen aber mit 2^n...

Gruß
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Sa 12.04.14 20:24 
Mit der while-Schleife meine ich das so, dass Du halt den Term, den Du zur Reihe addierst, ausrechnest und in der Bedingung der while-Schleife prüfst, ob der kleiner als 0.00001 ist.

Den Rest Deiner Frage verstehe ich nicht ganz ;-)

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
HansW Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Sa 12.04.14 20:48 
Vielleicht sollte ich erst mal komplett alles auflegen.

Die unendliche Reihe meiner Aufgabe sieht wie folgt aus:

x/2^n = x/1 + x/2 + x/4 + x/8 + x/16 usw.....
n = 0 bis unendlich

Aufgabe ist es Zitat "Zahl x einliest und die obige Summe so lange berechnet, bis der Term x/2n kleiner als 0.00001 wird".

Meine Idee war es jetzt, dass ich erst n berechne, dann weiß ich ja, wie "weit" ich auf der rechten Seite gehen muss und kann dann die Summe berechnen.

Ich steh halt nur auf dem Schlauch wie ich das mit dem n machen soll.

Sorry das ich so lange um den heißen Brei rumgeredet hab, hätte ich gleich in meinem ersten Post direkt reinschreiben sollen.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Sa 12.04.14 21:18 
Die Gleichung nach n umstellen machst Du so:

ausblenden Quelltext
1:
2:
3:
4:
5:
x / (2^n) = y    (y ist in Deinem Fall 0.00001)
    x / y = 2^n
 log(x/y) = log(2^n)
 log(x/y) = n * log(2)
        n = log(x/y) / log(2)


Dann ist n natürlich erst einmal keine ganze Zahl, da nimmst Du dann die nächste ganze Zahl, die größer ist.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".

Für diesen Beitrag haben gedankt: HansW
HansW Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Sa 12.04.14 21:46 
Super! Vielen Dank.

Jetzt ist mir fast peinlich, dass ich danach gefragt hab ;-).

Wahrscheinlich hab ich es mir schwerer gemacht als es ist.

Ich probiers morgen früh gleich mal aus und werde hier nochmal berichten.
HansW Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: So 13.04.14 09:27 
Noch eine kurze Frage:

Wenn ich für x = 1 einlese. Kommt ja 16, raus dann runde ich das auf 17. Wenn ich jetzt die rechte Seite mit 17 Brüchen versehen will, brauch ich dann zwei for schleifen?

Gruß
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: So 13.04.14 10:03 
Ich vermute, Du willst in der zweiten Schleife dann 2^n ausrechnen? Das brauchst Du nicht, Du merkst Dir einfach, durch was Du im vorhergehenden Schritt geteilt hast und nimmst das für den nächsten Schritt mal Zwei.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
HansW Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: So 13.04.14 10:15 
Ich möchte mit der for-schleife die summe der rechten Seite ausrechnen.

Wenn ich ja aber jetzt die for schleife wie folgt setze:

for (i = 1; i <= n; i = i * 2)

geht mein i ja nur bis <= n was in diesem fall 17 wäre.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: So 13.04.14 10:51 
Du lässt i ganz normal von 1 ... n laufen (ohne es immer zu verdoppeln, einfach nur +1 pro Schleifendurchlauf) und tust das, was ich eben geschrieben habe ;-)

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
HansW Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: So 13.04.14 11:17 
Meinst du das in etwa so? Oder liege ich da gänzlich falsch?

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
for (double i = 1; i <= n; i++)

{

summe += x / i;
summe = summe * 2;

}


Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: So 13.04.14 11:33 
Ja, zum einen teilst Du nur durch i und zum anderen verdoppelst Du nochmal die Summe, das ist natürlich Quatsch. Der Algorithmus sollte eher so aussehen:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
initialisiere
  summe = 0
  divisor = 1


i = 1 ... n
für jedes i:
  addiere x / divisor zur summe
  verdopple den divisor


Alternativ kannst Du das Spiel auch mit dem kompletten Summanden machen und den immer halbieren.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".

Für diesen Beitrag haben gedankt: HansW
HansW Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: So 13.04.14 11:44 
Ok. Vielen Dank, dass du mir geholfen hast!