Formula pt real in fractie

Formula pt real in fractie

Mesajde idcatalin » 29 Mar 2006, 13:16

Am urmatorul scenariu:

un numar real a pe care vreau sa l transform in fractie cu numitorul cel mai mic numar intreg posibil care verifica formula B/C=A

ex1
A=2.23
B=194 , C=87 deci A= 194/87

ex2
A=6.17
B=290 , C=47 deci A= 290/47

ex3
A=3.8
B=19 , C=5 deci A=19/5

Ma intereseaza o formula pentru aflarea numerelor B si C cunoscand doar numarul A

Va multumesc
idcatalin
 
Mesaje: 1
Membru din: 29 Mar 2006, 13:14

un posibil raspuns

Mesajde constantin_obreja » 31 Mai 2006, 12:42

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?
Avatar utilizator
constantin_obreja
 
Mesaje: 214
Membru din: 16 Mai 2006, 13:07


Înapoi la Matematică

Cine este conectat

Utilizatorii ce navighează pe acest forum: Niciun utilizator înregistrat şi 9 vizitatori

cron