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)
}