Semplificare numero razionale

di il
7 risposte

Semplificare numero razionale

Ciao, dovrei creare una classe numero razionale, quindi un oggetto che possegga un numeratore, un denominatore e un insieme di operatori sovraccaricati utili per le operazioni aritmetiche tra gli oggetti stessi. Avrei bisogno di creare un metodo che ogni qual volta venga invocato il costrutttore della classe mi riduca il numeratore e il denominatore
ad esempio se istanzio un oggetto rationalNumber(2,4) dovrei ottenere 1/2.
Sto riscontrando problemi sull'algoritmo per la semplificazione, vi posto il mio codice:


rationalNumber reduce(int num, int den){
int max, min, temp;
max=(num>den) ? num: den;
if(max==num)
      min=den;
else min=num;
while((max%min)==0){
   max=max-min;
   if(max<min)
   temp=max;
   max=min;
   min=temp;

}

num=num/max;
den=den/max;

return nationalNumber(num,den);

}

cosa sbaglio?

7 Risposte

  • Re: Semplificare numero razionale

    Intanto in fondo ritorni nationalNumber; se hai fatto copia incolla, per cui l'errore c'è anche nel programma, può darsi che il problema sia solo quello.
  • Re: Semplificare numero razionale

    dvaosta ha scritto:


    Intanto in fondo ritorni nationalNumber; se hai fatto copia incolla, per cui l'errore c'è anche nel programma, può darsi che il problema sia solo quello.
    nono, l'ho riscritto a mano, e nel mio programma non mi ritornava il rational ma un intero ossia il min.
  • Re: Semplificare numero razionale

    Ma intanto partiamo dal problema iniziale: per semplificare bisogna trovare il minimo comune multiplo e poi dividere entrambe i numeri per questo giusto?
  • Re: Semplificare numero razionale

    poel ha scritto:


    ma intanto partiamo dal problema iniziale: per semplificare bisogna trovare il minimo comune multiplo e poi dividere entrambe i numeri per questo giusto?
    Non è il massimo comun divisore? altrimenti se cerchi il minimo comune multiplo almeno uno dei due numeri diventra frazionario (tipo 2/6 -> minimo comune multiplo=6 -> (2/6)/1=2/6 anziché 1/3).
  • Re: Semplificare numero razionale

    Ho risolto così:
    void rational::reduce(){
    	cout<<"\n Prima della riduzione "<<num<<"/"<<den<<endl;
    	 int largest, mcd = 1;
    
    	 largest = ( num > den ) ? num: den;
    
    	 for ( int i = 2; i <= largest; ++i )
    	 if ( num % i == 0 && den % i == 0 )
    		mcd = i;
    
    		 num = num/mcd;
    		 den = den/mcd;
    			cout<<"\n dopo  la riduzione "<<num<<"/"<<den<<endl<<endl;
    
    		 }
    ma quindi quello è il MCD(massimo comun divisore) e non il mcm (minimo comune multiplo) ?
  • Re: Semplificare numero razionale

    L'algoritmo funziona quando effettivamente c'è da semplificare, ma se immetto un numero come 17/2
    mi semplifica in 2/1
  • Re: Semplificare numero razionale

    Anziché trovare il numero 'largest' dovresti trovare 'smallest' (largest lo cercavi per il minimo comune multiplo, che è un numero maggiore o uguale del maggiore tra i 2, col MCD è il contrario, dev'essere minore del minore (scusa il gioco di parole) per poterli dividere entrambi).
Devi accedere o registrarti per scrivere nel forum
7 risposte