Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Algoritmi - Algoritmo Frazione
Forum - Algoritmi - Algoritmo Frazione

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
pbe (Normal User)
Pro


Messaggi: 131
Iscritto: 24/05/2014

Segnala al moderatore
Postato alle 15:25
Domenica, 25/05/2014
Qualcuno può darmi un buon algoritmo per trasformare un numero decimale in frazione (numeratore e denominatore) ?

PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1170
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 16:21
Domenica, 25/05/2014
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.

PM Quote
Avatar
dmr (Normal User)
Pro


Messaggi: 141
Iscritto: 04/01/2012

Segnala al moderatore
Postato alle 16:33
Domenica, 25/05/2014

PM Quote
Avatar
pbe (Normal User)
Pro


Messaggi: 131
Iscritto: 24/05/2014

Segnala al moderatore
Postato alle 16:37
Domenica, 25/05/2014
Giusto... Provo subito ad applicarlo.

PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1170
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 16:52
Domenica, 25/05/2014
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

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 23:22
Domenica, 25/05/2014
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 il 25/05/2014 alle 23:25
PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1170
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 1:37
Lunedì, 26/05/2014
Dai facciamo un po di confronti che sono sempre interessanti :)

Questa è una delle tante soluzioni che si può pensare
Codice sorgente - presumibilmente Algoritmi

  1. function Fraction(double d) {
  2.   double numerator = d;
  3.   int denominator = 1;
  4.   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)
  5.     numerator += numerator;//Aumento il numeratore
  6.     denominator++;//Incremento il denominatore
  7.   }
  8.   WriteLine(numerator+"/"+denominator);//Stampo la frazione ridotta
  9. }


PM Quote
Avatar
pbe (Normal User)
Pro


Messaggi: 131
Iscritto: 24/05/2014

Segnala al moderatore
Postato alle 7:32
Lunedì, 26/05/2014
Appena ho tempo lo scrivo in C, non so se riesco entro oggi.:-?

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 11:02
Lunedì, 26/05/2014
Roby, come fai a determinare se un numero è un intero a partire da un valore in virgola mobile? Ho provato con modf(), controllando se la parte decimale è uguale a zero, ma praticamente non lo è mai perché in fondo al numero c'è sempre qualche decimale "incontrollato" che rende inaffidabile il confronto con 0.0

Codice sorgente - presumibilmente C#

  1. bool Intero( double val ) {  // questa non funziona!
  2.     double parte_intera, parte_decimale;
  3.     parte_decimale = modf( val, &parte_intera );
  4.     return parte_decimale == 0.0;
  5. }



Suggerimenti a prova di idiota? C'è qualche funzione di libreria che mi è sfuggita e che si occupa di verificare se un numero in virgola mobile è o non è un intero? (mi sembra contraddittorio: se è in virgola mobile non è un intero... anche se è un intero!) Cosa mi sfugge?

Ultima modifica effettuata da il 26/05/2014 alle 11:03
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo