Nu stiu daca am inteles bine intrebarea! Ceea ce ne propui ca exemple dau aproximari ale zecimalelor respective, deci nu avem egalitate. Pentru a avea egalitate, aplicam regulile de transformare a numerelor zecimale in fractii (manual, cls 5!). Pentru un program care realizeaza acest lucru si face si simplificarile, aducand fractia la forma ireductibila, (deci termenii ei sunt minimali, cu respectarea egalitatii!), vezi pagina
http://www.edu.adralex.ro/sc5roman/mate/OpNrRationale/Transformari.html din site-ul meu. Atasez si sursa trans.js, pe care am transformat-o in trans.txt. Operatia inversa se face schimband extensia. Daca nu va prieste, reformulati!
Cu stima,
trans.js
___________________________________
function parteaintreaga()
{nr=f.text1.value
i=nr.indexOf("(")
s=nr.indexOf(")")
lung=nr.length
p=nr.indexOf(".")
intr1=""
for(k=0;k<p;k++){intr1=intr1+nr.charAt(k)}
verificare()
//alert(i+" "+s+" "+p+" "+lung)
if(i==s)
{ corect()
intr=Math.floor(nr)
f.text2.value=intr
zec=(Math.round(1000000000000*(nr-intr)))/1000000000000
f.text3.value=zec
f.text4.value="nu are"
f.text5.value="nu are"
nm="1"
for(k=p+1;k<lung;k++){nm=nm+"0"}
//alert("numitor="+nm)
numa=zec*Math.pow(10,lung-p-1)
//for(k=p+1;k<lung;k++){numa=numa+nr.chatAt(k)}
//alert(numa)
na=parseInt(numa)
na=Math.round(na)
//alert(na)
nm=parseInt(nm)
f1=eval(eval(intr*nm)+numa)
f2=nm
f.text6.value=intr+"+"+na+"/"+f2+"="+f1+"/"+f2
d=cmmdc(f1,f2)
f.text7.value=f1/d+"/"+f2/d
} else {periodica()}
}
function verificare()
{
if(intr1==Math.round(intr1)){}
else { alert("Introduceti numere!")
f.text1.value=1.2
nr="1.2"
}
}
function corect()
{
zec1=""
for(k=p+1;k<lung;k++){zec1=zec1+nr.charAt(k)}
//alert(zec1)
if(zec1==Math.round(zec1)){}
else {alert("Introduceti numere!")
f.text1.value=10.5
nr=10.5}
}
function periodica()
{
intr=""
for(k=0;k<p;k++){intr=intr+nr.charAt(k)}
f.text2.value=intr
zec="0."
for(k=p+1;k<lung;k++)
{zec=zec+nr.charAt(k)}
f.text3.value=zec
per=""
for(k=p+1;k<i;k++){
per=per+nr.charAt(k)}
if(!(per==Math.round(per))){per="Eroare"}
else {}
f.text4.value=per
neper=""
for(k=i+1;k<s;k++){
neper=neper+nr.charAt(k)}
if(!(neper==Math.round(neper))){neper="Eroare"}
else {}
f.text5.value=neper
if(per=="Eroare" || neper=="Eroare"){f.text6.value="Eroare"
f.text7.value="Eroare"}
else {nm=""
for(k=i+1;k<s;k++){nm=nm+"9"}
for(k=p+1;k<i;k++){nm=nm+"0"}
//alert(nm)
na=per+neper
//alert(na)
na=parseInt(na)
nm=parseInt(nm)
na=na-per
f1=eval(eval(intr*nm)+na)
f2=nm
f.text6.value=intr+"+"+na+"/"+f2+"="+f1+"/"+f2
d=cmmdc(f1,f2)
f.text7.value=f1/d+"/"+f2/d
}
}
function cmmdc(x,y) {
var w //, x, y;
while (y != 0) {
w = x % y;
x = y;
y = w;}
return x;
}
__________________________________
Va foloseste?