Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Division by Zero?! (https://www.delphipraxis.net/63214-division-zero.html)

Stoertebecker 15. Feb 2006 14:48


Division by Zero?!
 
Hi,
muss für die Schule ein Programm für die Annäherung der Zahl Pi schreiben.
Soll nach dem Gregory Verfahren funktionieren!
Zitat:

Wir nutzen einen Kreis mit Radius 1/2 da dieser den Umfang Pi hat.Damit nähern sich die Umfänge der einbeschrieben und umbeschriebenen Vielecke direkt der Zahl Pi an.
Es gilt demnach: u<Pi<U (u= Umfang einbeschriebenes n-Eck; U= Umfang einbeschriebenes n-Eck;)
Startwerte:
Einbeschriebense 6-Eck u=3
Umbeschriebenes 6-Eck U=2sqrt(3) = 3.464101615
Formeln:
Umfang des umbeschriebenen 2n-Ecks: U2n=2*Un*un/Un+un
Umfang des einbeschriebenen 2n-Ecks: u2n=Wurzel aus un*U2n
Ich weiß nicht wieso das nicht funktioniert:

Delphi-Quellcode:
program gregory;
var
  a,b,d,e: real;
  c,f,i: integer;

function Um(var la,lb:real):real;
begin
  la:=(2*la*lb)/(la+lb);
end;

function Ein(var sa,sb:real):real;
begin
  sa:=sqrt(sb*(2*sa*sb)/(sa+sb));
end;

begin
a:=3;
b:=2*sqrt(3);
writeln('Eingabe Genauigkeit in 10(hoch)x');
readln(c);
for i:=1 to c do f:=f*10;
repeat
d:=(Um(b,a))*f;
e:=(Ein(b,a))*f;
d:=round(e);
e:=round(e);
writeln((d/f));
writeln(e/f);
until d=e;
readln;

end.

glkgereon 15. Feb 2006 14:53

Re: Division by Zero?!
 
f ist am anfang 0.
Dann setzt du es nie.
"verändert" wird es erst bei der schleife, wo du es mit 10 multiplizierst (0*10=0)

und dann teilst du so einiges durch f ;)

abhilfe würde ein f:=1; ziemlich am Anfang schaffen ;)

Stoertebecker 15. Feb 2006 15:47

Re: Division by Zero?!
 
Oh stimmt!
Dank dir!

Aber dann nächstes Problem:
Delphi-Quellcode:
program gregory;
var
  a,b,d,e: real;
f,i: integer;
c:longint;

function Um(var la,lb:real):real;
begin
  la:=(2*la*lb)/(la+lb);
end;

function Ein(var sa,sb:real):real;
begin
  sa:=sqrt(sb*(2*sa*sb)/(sa+sb));
end;

begin
f:=1;
a:=3;
b:=2*sqrt(3);
writeln('Eingabe Genauigkeit in 10(hoch)x');
readln(c);
for i:=1 to c do f:=f*10;
repeat
d:=(Um(b,a))*f;
e:=(Ein(b,a))*f;
d:=round(e);
e:=round(e);
writeln((d/f));
writeln(e/f);
until d=e;
readln;

end.
Funktioniert zwar sieht aber überhaupt nicht nach Pi aus!
Und wenn ich eine Zahl über 9 eingebe kommt wieder:
Zitat:

Division by Zero
mfg
störtbecker

Klaus01 15. Feb 2006 16:51

Re: Division by Zero?!
 
kann es sein das bei c=9
f aus dem Wertebereich fliegt

i=1 f:=1*10
i=2 f:=10*10
i=3 f:=100 * 10
i=4 f:= 10 * 1000
i=5 f:= 10 * 10000
i=6 f:= 10 * 100000
i=7 f:= 10 * 1000000

....

Grüße
Klaus

glkgereon 15. Feb 2006 16:53

Re: Division by Zero?!
 
ausserdem schreibst du:
Delphi-Quellcode:
d:=round(e);
e:=round(e);
sicher das es nicht
Delphi-Quellcode:
d:=round(d);
e:=round(e);
sein soll?

Klaus01 15. Feb 2006 17:04

Re: Division by Zero?!
 
Delphi-Quellcode:
pi_1:=0;

For i:=1 to n do
  begin
     if i mod 2 = 0 then
        pi_1:=pi_1+(1/(2*n-1))
     else
        pi_1:=pi_1-(1/2*n-1))
  end;

pi_2:=1/(2*n+1)

pi_x:=4*(pi_1+pi_2)
nicht getestet.

frei nach
http://www.matheprisma.uni-wuppertal...XXL/index.html

Grüße
Klaus


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:46 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz