ubuntuusers.de

Pascal: Summenberechnung

Status: Ungelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

torte123

Anmeldungsdatum:
29. Mai 2009

Beiträge: Zähle...

Hallo...

Ich habe seid einiger Zeit probiert folgendes Problem mit Pascal zu lösen

Wie viel Summanden von Sn = 1+1/2+1/3+1/4+ … +1/n muss man addieren, bis die Summe zum ersten Mal eine einzugebende Zahl (Sn) übersteigt? Die Berechnung soll nach höchstens 100 000 Summanden abgebrochen werden. Ausgegeben werden soll die Summe Sn und die benötigte Anzahl Summanden.

Rein mathematisch ist mir klar, was ich machen soll, die Berechnung der Summe an sich im Einzelfall (wenn ich eine Zahl n eingebe funktioniert auch)

Nur so komm ich bei dem Programm nicht weiter...

Ich hatte folgendes ohne Erfolg probiert weiß nicht ob das mit der Schranke eine so gute Idee ist. Vielleicht könnte man es mit while i<= 100000 irgendwie probieren, dass das Programm dann abbricht?

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
program Summenberechnung;
uses crt;

var n,z: integer;
schranke: longint;
sum,sn,i: real;

PROCEDURE Willkommen;
var sn:real;
begin
writeln('');
writeln('Willkommen im Turbo-PASCAL-Programm "Summenberechnung"!');
writeln('');
writeln('Dieses Programm ermoeglicht Ihnen die Anzahl der Summanden');
writeln('der Folge Sn=1+1/2+1/3+...+1/n einer einzugebenen Zahl Sn zu berechnen.');
write('Bitte geben Sie nun eine Zahl Sn ein: '); readln(sn);
end;


begin
clrscr;
Willkommen;

sum:=0;
schranke:=100000;
i:=0;

WHILE (i<=schranke) DO
begin
i:=i+1;
end;

WHILE (sn<=sum) DO
begin
sum:=sum+1/i;
end;

writeln('s(',sn,') = ',sum:0:8);
writeln('Anzahl der Summanden:,i,');

readln;

end.

Ich hoffe, mir kann jemand helfen. Vielen dank schon einmal

Moderiert von user unknown:

Code-Tags eingefügt. Bitte lies "Hilfe zur Syntax" (Link im Editorfeld oben rechts). Danke

Greebo

Avatar von Greebo

Anmeldungsdatum:
21. November 2006

Beiträge: 3443

Wohnort: 97070 Würzburg

Code bitte in Codetags *fix*

torte123 schrieb:

Hallo...

Ich habe seid einiger Zeit probiert folgendes Problem mit Pascal zu lösen

Wie viel Summanden von Sn = 1+1/2+1/3+1/4+ … +1/n muss man addieren, bis die Summe zum ersten Mal eine einzugebende Zahl (Sn) übersteigt? Die Berechnung soll nach höchstens 100 000 Summanden abgebrochen werden. Ausgegeben werden soll die Summe Sn und die benötigte Anzahl Summanden.

Rein mathematisch ist mir klar, was ich machen soll, die Berechnung der Summe an sich im Einzelfall (wenn ich eine Zahl n eingebe funktioniert auch)

Nur so komm ich bei dem Programm nicht weiter...

Ich hatte folgendes ohne Erfolg probiert weiß nicht ob das mit der Schranke eine so gute Idee ist. Vielleicht könnte man es mit while i<= 100000 irgendwie probieren, dass das Programm dann abbricht?

 
program Summenberechnung;
uses crt;

var n,z: integer;
schranke: longint;
sum,sn,i: real;

PROCEDURE Willkommen;
var sn:real;
begin
writeln('');
writeln('Willkommen im Turbo-PASCAL-Programm "Summenberechnung"!');
writeln('');
writeln('Dieses Programm ermoeglicht Ihnen die Anzahl der Summanden');
writeln('der Folge Sn=1+1/2+1/3+...+1/n einer einzugebenen Zahl Sn zu berechnen.');
write('Bitte geben Sie nun eine Zahl Sn ein: '); readln(sn);
end;


begin
clrscr;
Willkommen;

sum:=0;
schranke:=100000;
i:=0;

WHILE (i<=schranke) DO
begin
i:=i+1;
end;

WHILE (sn<=sum) DO
begin
sum:=sum+1/i;
end;

writeln('s(',sn,') = ',sum:0:8);
writeln('Anzahl der Summanden:,i,');

readln;

end.

Ich hoffe, mir kann jemand helfen. Vielen dank schon einmal

Ich kann kein Pascal, insofern muss der Syntax nicht stimmen. Auf sum habe ich verzichtet, deswegen wird bei mir von sn abgezogen, bis die Zahl 0 oder negativ ist, das ist logisch dasselbe wie aufsummieren einer Zahl von 0 bis sn überschritten ist. && Soll die logische UND Verknüpfung darstellen, also solange die Schranke nicht überschritten wurde und sn noch größer als 0 ist.

WHILE (i<=schranke && sn > 0) DO
begin
i:=i+1;
sn:= sn - 1 / i;
end;
writeln('Anzahl der Summanden:,i,');

readln;

end.

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4687

Wohnort: Berlin

@torte123: Ähm, die Zahl, die der Benutzer eingibt, wird gleich nach verlassen der Prozedur wieder weggeworfen. Ist vielleicht keine gute Idee den Namen Sn dort noch einmal als lokale Variable zu deklarieren.

Greebo's Syntax ist falsch, aber die Idee ist auf jeden Fall die richtige. In Worten ausgedrückt, willst Du ja, dass die Schleife solange ausgeführt wird, wie die Zählvariable kleiner als die Schranke ist und die Summe kleiner als das gegebene Sn ist. Das muss man halt auch in einer Bedingung ausdrücken. Wobei es vielleicht ungünstig ist sowohl die Summe (Sn = ...) als auch die Schranke Sn zu nennen.

Über die Bedingung in der zweiten While-Schleife solltest Du übrigens auch nochmal nachdenken.

Antworten |