Oppure

Loading
25/05/14 13:25
pbe
Qualcuno può darmi un buon algoritmo per trasformare un numero decimale in frazione (numeratore e denominatore) ?
aaa
25/05/14 14:21
Roby94
Di algoritmi ne puoi pensare a decine, il più basilare e terra terra potrebbe essere moltiplicare il numero prima per 2 verificare se è diventato un intero se no moltiplichi per 3 verifichi e cosi finché non trova una intero.
aaa
25/05/14 14:37
pbe
Giusto... Provo subito ad applicarlo.
aaa
25/05/14 14:52
Roby94
dmr il metodo da te postato fornirà sempre frazioni con denominatore in base 10 a mio parere inaccettabili nella maggior parte dei casi.

In ogni caso pde al termine della scrittura del tuo algoritmo ti pregherei di postarlo.
Grazie
aaa
25/05/14 21:22
Dal basso della mia ignoranza, io farei una cosa tipo:

1. Ricavare il numeratore moltiplicando il numero decimale per
10 elevato a un esponente pari al numero di cifre decimali
2. Usare come denominatore 10 elevato a un esponente pari
al numero di cifre decimali
3. Ridurre ai minimi termini la frazione risultante

Un esempio?
Metti caso di voler ricavare la frazione generatrice di 1.25...

1. 1.25 * 10^2 = 125
2. 125 / 10^2 , cioè 125/100
3. Semplificando 125/100 per 25 ottengo 5/4

Altro esempio.
Frazione generatrice di 1.256?

1. 1.256 * 10^3 = 1256
2. 1256 / 10^3, cioè 1256/1000
3. Semplificando 1256/1000 per 8 ottengo 157/125

In allegato trovi un programmino in C che fa queste cose.
Immagino che sia d'un'ingenuità TOTALE e DISPERANTE, ma a me è venuto in mente quello, e con quello mi son divertito a far finta di essere in gamba. Spero tu ci possa trovare qualcosa di utile. Se no... cestino e via!
Ultima modifica effettuata da 25/05/14 21:25
25/05/14 23:37
Roby94
Dai facciamo un po di confronti che sono sempre interessanti :)

Questa è una delle tante soluzioni che si può pensare
function Fraction(double d) {
  double numerator = d;
  int denominator = 1;
  while(!IsInt(numerator)) {//Verifico che il numeratore sia ancora un decimale (questa funzione si può sviluppare in centinaia di modi anche molto dipendenti dal linguaggio scelto XD)
    numerator += numerator;//Aumento il numeratore
    denominator++;//Incremento il denominatore
  }
  WriteLine(numerator+"/"+denominator);//Stampo la frazione ridotta
}
aaa
26/05/14 5:32
pbe
Appena ho tempo lo scrivo in C, non so se riesco entro oggi.:-?
aaa