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
en dit is wat ik heb gemaakt alvast::
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!
programmeren in Delphi 2007 'Pi benaderen'
-
- Vast lid
- Berichten: 57
- Lid geworden op: 23 feb 2014, 15:14
programmeren in Delphi 2007 'Pi benaderen'
Durf te vragen!
Re: programmeren in Delphi 2007 'Pi benaderen'
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?
PS: als je je code klaar hebt, test die dan in ieder geval met de gegeven voorbeeldwaarden (pi0, pi1 en pi2).
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);
-
- Vast lid
- Berichten: 57
- Lid geworden op: 23 feb 2014, 15:14
Re: programmeren in Delphi 2007 'Pi benaderen'
waarom k=1. k moet toch nul zijn?
Ik heb dit als snieuw gemaakt >> snieuw:= (sqrt((power(s+((sqr(s))-4),2))/2))
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.
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!
Re: programmeren in Delphi 2007 'Pi benaderen'
Gegeven:BusinessMath schreef:waarom k=1. k moet toch nul zijn?
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?
De formule voor snieuw kan je gewoon overnemen uit de met rechthoek gemarkeerde tekst,BusinessMath schreef: Ik heb dit als snieuw gemaakt >> snieuw:= (sqrt((power(s+((sqr(s))-4),2))/2))
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;
Met bovenstaande formule voor snieuw zou je op pi uit moeten komen.BusinessMath schreef: k heb dit ingevuld, maar er komt een erg klein getal uit als ik ga runnen.
doe ik nog wat fout?
Test in ieder geval eerst voor kleine waarden van n (n = 1, 2, 3 en 4).
Ik ben geen Delphi-specialist, maar ik vraag me wel af of Delphi n=100 aankan.BusinessMath schreef: want ik moet 100 invullen en dan moet er een benadering van pi uitkomen.
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.
-
- Vast lid
- Berichten: 57
- Lid geworden op: 23 feb 2014, 15:14
Re: programmeren in Delphi 2007 'Pi benaderen'
Heel erg bedankt
ik had inderdaad de formule verkeerd over genomen, dom van mij.
Het is nu gelukt.
ik had inderdaad de formule verkeerd over genomen, dom van mij.
Het is nu gelukt.
Durf te vragen!