programmeren in Delphi 2007 'Pi benaderen'

Het forum voor overige vragen betreffende wiskunde uit het hoger onderwijs.
Plaats reactie
BusinessMath
Vast lid
Vast lid
Berichten: 57
Lid geworden op: 23 feb 2014, 15:14

programmeren in Delphi 2007 'Pi benaderen'

Bericht door BusinessMath » 23 feb 2014, 15:50

hallo

ik heb een vraag over programmeren, dit doe ik in Delphi 2007

de opdracht is om pi te benaderen.
de opdracht staat op de bijgevoegde afbeelding
Afbeelding


en dit is wat ik heb gemaakt alvast::

Afbeelding

alleen ik weet niet hoe ik de 'bn' en de 'sn' moet maken. hoe vul je dat in met n-1??
heeft iemand een idee hoe dit verder moet??

Bedankt alvast!
Durf te vragen!

arie
Moderator
Moderator
Berichten: 3911
Lid geworden op: 09 mei 2008, 09:19

Re: programmeren in Delphi 2007 'Pi benaderen'

Bericht door arie » 23 feb 2014, 17:19

Hieronder wat aangepaste code (de belangrijkste stappen).
Let op dat je om te beginnen k=1 maakt om de lus het juiste aantal keren te doorlopen.

Binnen de lus werk je met 2 nieuwe hulpvariabelen, bnieuw en snieuw, die je gebruikt om de nieuwe waarden van b en s in op te slaan zoals je berekent met je formules.
Vervolgens maak je de waarden van b en s gelijk aan hun nieuwe waarde (doe dit in de code hieronder zelf voor s)

Het eindantwoord hoef je maar 1 keer te berekenen met de laatste b en s.

Kom je hiermee verder?

Code: Selecteer alles

n:=StrToFloat(edit1.text);

b:=sqrt(2);
s:=sqrt(8);

\\ LET OP: begin met k = 1:
k:=1;

\\ als n=0 dan wordt deze lus nooit uitgevoerd (=klopt):
\\ als n>0 dan wordt deze lus n keer uitgevoerd (=klopt ook):
while k<=n do
  begin
    \\ bereken eerst de nieuwe waarden van b en s uit de oude:
    bnieuw := b*s - 2;
    snieuw :=              \\  <== werk dit zelf uit
   
    \\ update nu de waarden van b en s:
    b := bnieuw;
    s := snieuw;

    \\ verhoog k
    k:=k+1;
  end;

\\ bereken eindantwoord (dit hoeft maar 1 keer, dus kan buiten de while-lus):
antwoord := power(0.5,n) * s / b;
\\ merk op: hier gebruiken we de huidige (= laatste) waarden van b en s

\\ toon antwoord aan buitenwereld:
edit2.text := FloatToStr(antwoord);
PS: als je je code klaar hebt, test die dan in ieder geval met de gegeven voorbeeldwaarden (pi0, pi1 en pi2).

BusinessMath
Vast lid
Vast lid
Berichten: 57
Lid geworden op: 23 feb 2014, 15:14

Re: programmeren in Delphi 2007 'Pi benaderen'

Bericht door BusinessMath » 03 mar 2014, 15:14

waarom k=1. k moet toch nul zijn?

Ik heb dit als snieuw gemaakt >> snieuw:= (sqrt((power(s+((sqr(s))-4),2))/2))

Code: Selecteer alles

2:                                                            begin                                                
               n:=StrToFloat (edit1.text);
               b:= sqrt(2) ;
               s:= sqrt (8);
               k:=1;

               while k<=n do
                  begin
                     bnieuw:= (b*s)-2;
                     snieuw:= (sqrt((power(s+((sqr(s))-4),2))/2));
                     b:= bnieuw;
                     s:= snieuw;
                     k:= k+1;
                  end;

               antwoord:= (power(0.5,n) *(s/b));
               edit2.text:=FloatToStr(antwoord);
            end;


k heb dit ingevuld, maar er komt een erg klein getal uit als ik ga runnen.
doe ik nog wat fout?
want ik moet 100 invullen en dan moet er een benadering van pi uitkomen.
Durf te vragen!

arie
Moderator
Moderator
Berichten: 3911
Lid geworden op: 09 mei 2008, 09:19

Re: programmeren in Delphi 2007 'Pi benaderen'

Bericht door arie » 03 mar 2014, 17:17

BusinessMath schreef:waarom k=1. k moet toch nul zijn?
Gegeven:



waardoor



Voordat we de lus bereiken maken we s = s0 en b = b0.
Als n = 0 dan moeten we de lus geen enkele keer doorlopen, want dan berekenen we na de lus pi_0 op correcte wijze.
Als n = 1 dan moeten we de lus 1 keer doorlopen om uit b0 en s0 de nieuwe waarden, b1 en s1 te berekenen, die we vervolgens na de lus gebruiken voor pi_1

Stel we maken in het begin k = 1, hoe vaak doorlopen we dan de lus in geval n = 0 en in geval n = 1?
Stel we maken in het begin k = 0, hoe vaak doorlopen we dan de lus in geval n = 0 en in geval n = 1?

BusinessMath schreef: Ik heb dit als snieuw gemaakt >> snieuw:= (sqrt((power(s+((sqr(s))-4),2))/2))
De formule voor snieuw kan je gewoon overnemen uit de met rechthoek gemarkeerde tekst,
voor neem je snieuw, en voor neem je s.
Ik denk dat je daarbij een typo hebt gemaakt, ik kom uit op
snieuw:= power( s + sqrt(sqr(s) - 4) , 2)) / 2;
ofwel
snieuw:= sqr( s + sqrt(sqr(s) - 4) ) / 2;

BusinessMath schreef: k heb dit ingevuld, maar er komt een erg klein getal uit als ik ga runnen.
doe ik nog wat fout?
Met bovenstaande formule voor snieuw zou je op pi uit moeten komen.
Test in ieder geval eerst voor kleine waarden van n (n = 1, 2, 3 en 4).

BusinessMath schreef: want ik moet 100 invullen en dan moet er een benadering van pi uitkomen.
Ik ben geen Delphi-specialist, maar ik vraag me wel af of Delphi n=100 aankan.
Of gebruik je daarin een speciaal rekenkundig pakket?

Ik vraag dit omdat s al snel groter wordt.
Voor grote s gaat



dan over in



en herhaald kwadrateren levert heel snel hele grote getallen op.

BusinessMath
Vast lid
Vast lid
Berichten: 57
Lid geworden op: 23 feb 2014, 15:14

Re: programmeren in Delphi 2007 'Pi benaderen'

Bericht door BusinessMath » 05 mar 2014, 18:47

Heel erg bedankt :)

ik had inderdaad de formule verkeerd over genomen, dom van mij.

Het is nu gelukt.
Durf te vragen!

Plaats reactie