De digitale vraagbaak voor het wiskundeonderwijs

home |  vandaag |  gisteren |  bijzonder |  gastenboek |  wie is wie? |  verhalen |  contact

HOME

samengevat
vragen bekijken
een vraag stellen
hulpjes
zoeken
FAQ
links
twitter
boeken
help

inloggen

colofon

  \require{AMSmath} Printen

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

 Dit is een reactie op vraag 29762 
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

Wie is wie?
Vragen naar aanleiding van dit antwoord? Klik rechts..!
zaterdag 13 november 2004



home |  vandaag |  bijzonder |  gastenboek |  statistieken |  wie is wie? |  verhalen |  colofon

©2001-2024 WisFaq - versie 3