Problema con funzione che stampa fattorizzazione

di il
9 risposte

Problema con funzione che stampa fattorizzazione

Ciao a tutti, scusate il disturbo. Sto cercando di una funzione in c che stampi la fattorizzazione di un numero.

IL PROBLEMA?
Non capisco il perchè vada solo con alcuni valori (6, 9, 25, 32, 50) mentre per altri si blocca.

GRAZIE A CHIUNQUE MI AIUTASSE.
int Fattorizzazione (int numero) {
		unsigned int d=2, c=0;
		cout << "La fattorizzazione del numero inserito e': " << numero << "=";
		
		while (numero>1) { 
			 
			if (numero%d==0) { 
				c++;
				numero=numero/d;
			}
			
			if (numero%d==1) { 
				cout << d << "^" << c << "*";
				d++;
				c=0;
			}
		}
		
		cout << "1" << endl;
		
		return 0;
	}

9 Risposte

  • Re: Problema con funzione che stampa fattorizzazione

    Dicci quale valore inserisci per ottenere l'errore e qual è l'output che ottieni
  • Re: Problema con funzione che stampa fattorizzazione

    Ad esempio se inserisco 30 in output stampa 30=2^1* e si blocca.
  • Re: Problema con funzione che stampa fattorizzazione

    Penso che il problema stia nel punto in cui il numero non è divisibile per d, perché non viene eseguita alcuna operazione sul numero quindi entra in un ciclo infinito mi sembra.
    Ma tu per fattorizzazione intendi scomposizione in fattori primi?
  • Re: Problema con funzione che stampa fattorizzazione

    Ti suggerisco di inserire all'inizio del ciclo una stampa dei valori di numero, c e d.
    prima di eseguire il codice scrivi su carta quello che ti aspetti di ottenere come stampa con input 30.
    quindi lancia il programma con input 30 e verifica in quale momento differisce da quanto ti aspettavi
  • Re: Problema con funzione che stampa fattorizzazione

    Se ti interessa io ho risolto, cambiando un po la funzione ma essenzialmente non tanto, e ora funziona
  • Re: Problema con funzione che stampa fattorizzazione

    Sì mi servirebbe, grazie per l'aiuto.
  • Re: Problema con funzione che stampa fattorizzazione

    
    bool fattorizzazione(int num)
    {
      unsigned int d=2,c=0,numero=num;
      cout<<"La fattorizzazione del numero inserito e': "<<endl;
      while(numero>1)
      {
        while(numero%d==0)
        { 
          c++;
          numero/=d;
         }
        if(c>0)
        {
          cout<<d<<"^"<<c<<" * ";
          c=0;
        }
        d++;
      }
      cout<<"1 = "<<num<<endl;
      return(d-1==num)?true:false;
    }
    
    Ho messo bool la funzione in modo che ritorni true se il numero è primo, false se non lo è. È inutile ma credo che funzioni. Inoltre ho messo l'operazione di divisoione nel while invece che in un if, così esce solo se ha finito e non passa per l'altro if inutilmente
  • Re: Problema con funzione che stampa fattorizzazione

    @nikso guarda che nel tuo codice, per risolvere, basta sostituire
    if (numero%d==1) { 
    con
    if (numero%d>0) { 
    oppure introdurre un else dall'if precedente.
    Se tu avessi solo provato ad eseguire su carta te ne saresti accorto subito.
  • Re: Problema con funzione che stampa fattorizzazione

    Inoltre per evitare di stampare un numero elevato alla 1, potresti stampare l'elevazione solo se l'elsponente (c) è maggiore di 1
Devi accedere o registrarti per scrivere nel forum
9 risposte