Algebra

Analyse

Bewijzen

De grafische rekenmachine

Discrete wiskunde

Fundamenten

Meetkunde

Oppervlakte en inhoud

Rekenen

Schoolwiskunde

Statistiek en kansrekenen

Telproblemen

Toegepaste wiskunde

Van alles en nog wat


\require{AMSmath}

 Dit is een reactie op vraag 29762 

Re: Hoe maak je van een decimaal getal een breuk?

Tja, dit kan ik wel toepassen met een blocnote en een pen. Nu een slim algoritme waarmee een programmeerbare rekenmachine uit de voeten kan. Zelf denk ik aan het delen van teller en noemer door een factor. Indien bij beide een geheel getal verkregen wordt, is dit een factor. Wellicht is er ook iets mogelijk om de teller en de noemer te ontbinden in factoren en die vervolgens tegen elkaar weg te 'strepen'.

(Toepassing: Microsoft Excel heeft standaard niet de mogelijkheid om van decimaal naar breuk te herschrijven, doch het moet wel mogelijk zijn dit te programmeren.)

Cor
Iets anders - donderdag 11 november 2004

Antwoord

Een mogelijk algoritme om een decimale breuk om te schrijven naar een gewone breuk is met behulp van kettingbreuken.
Dat staat beschreven op Raderwerk berekeningen.


Hier een script dat de berekeningen uitvoert:
Hieronder de broncode van dit script.
script
//schrijft het getal in de vorm van een kettingbreuk
function kettingbreuk(a)
{p=new Array()
i=0
while(a1)
{
a=a*10
i++
}
j=-1
while(j15&&a0)
{
j++
p[j]=Math.floor(a)
a=a-p[j]
if (a1e-6){a=1/a}else{a=0}
}
return p
}

//rekent een kettingbreuk om in een gewone breuk
function breuk()
{teller=p[j]
noemer=1
for(k=j-1;k=0;k--)
{
tnoemer=teller
teller=p[k]*teller+noemer
noemer=tnoemer
}
noemer=noemer*Math.pow(10,i)
r=ggd(teller,noemer)
teller=teller/r
noemer=noemer/r
}

//berekent de grootste gemene deler van m en n
function ggd(m,n)
{
if (m0) {m=-m}
if (n0) {n=-n}
if (nm) {r=m;m=n;n=r}
r=1
while (r!=0)
{
r=m%n
if (r!=0) {m=n; n=r}
}
return n
}

function compute(f)
{
with (Math){
getal=eval(f.invoer.value)
}
kettingbreuk(getal)
breuk()
s='ingevoerd: '
s=s+f.invoer.value+'='+getal+'\n'
s=s+'breuk: '+teller+'/'+noemer+'\n'
s=s+'en dat is: '+teller/noemer
alert(s)
}

/script
form name='f'
input type='text' size=30 name='invoer' value='0.013713713713713713'
input type='button' value='Bereken' onClick="compute(this.form)"
/form

hk
zaterdag 13 november 2004

©2001-2024 WisFaq