Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 20
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2011
    Messaggi
    19

    [JAVA] Scomposizione di numeri interi in fattori

    Qualcuno mi potrebbe spiegare meglio della traccia a che cosa servono i metodi nextFactor e hasMoreFactors ?

    Ecco la traccia:
    Esercizio P6.8. Scomposizione di numeri interi in fattori. Scrivete un programma che chieda all’utente un numero intero e che visualizzi tutti i suoi fattori. Per esempio, se l’utente immette 150, il programma stamperà:

    2
    3
    5
    5

    Usate una classe FactorGenerator con il costruttore FactorGenerator(int numberToFactor) e i metodi nextFactor e hasMoreFactors. Progettate la classe FactorPrinter il cui metodo main legga un numero in ingresso, costruisca un esemplare di FactorGenerator e visualizzi i fattori.

  2. #2
    Credo che il nome sia più che esplicativo:

    - nextFactor (fattore successivo)
    - hasMoreFactors (boolean true/false indica se ci sono altri fattori)
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  3. #3
    Utente di HTML.it L'avatar di oronze
    Registrato dal
    Jun 2001
    Messaggi
    3,543
    La traccia è parecchio chiara...forse non sai come scomporre un unmero in fattori primi....
    http://www.google.it/search?q=algori...3&pf=p&pdl=300

    In ogni caso, un algoritmo che mi viene in mente ora....è un po' che non "uso" matematica discreta...
    1) verifichi che n non sia primo
    2) con il crivello di Eratostene ti trovi i numeri primi < di n
    3) dividi n per il numero primo più piccolo (2)
    4a) se la divisione è esatta, il numero è un fattore e n diventa n/fattore
    4b) se la divisione non è esatta torni al punto 3 incrementando il fattore
    5) torni al punto 3 utilizzando il secondo numero primo più piccolo (sarà 3)

    praticamente sono le divisioni successive http://critto.liceofoscarini.it/mate/fattorintero.html

    No ai layout tabellari!

    Insulto libero: http://forum.html.it/forum/showthread.php?s=&postid=12524872#post12524872

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2011
    Messaggi
    19
    non riesco a tradurlo in codice

  5. #5
    Utente di HTML.it L'avatar di oronze
    Registrato dal
    Jun 2001
    Messaggi
    3,543
    Originariamente inviato da cv91
    non riesco a tradurlo in codice
    che hai scritto fino ad ora? mettilo sul forum e vediamo di correggerlo insieme

    No ai layout tabellari!

    Insulto libero: http://forum.html.it/forum/showthread.php?s=&postid=12524872#post12524872

  6. #6
    Siccome per scomporre un numero intero in fattori è necessario conoscere tutti i numeri primi compresi tra 2 ed il numero da fattorizzare ti consiglio di iniziare con l'implementare una classe che ti restituisca appunto tale elenco. L'algoritmo più semplice da implementare è sicuramente, come già espresso da oronze, il crivello di Eratostene.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2011
    Messaggi
    19
    Questo esercizio fa parte di un libro. Essendo arrivato al sesto capitolo cioè quello dei cicli per risolvere questo esercizio dovrei usare i cicli ma non posso usare gli array visto che sono nel capitolo successivo. Per il crivello di Eratostene se non sbaglio si devono usare gli array quindi non e questa la strada

    codice:
    public class FactorGenerator {
    	
    	private int numeroDaFattorizzare;
    	private int fattore;
    	
    	
    	public FactorGenerator(int numeroDaFattorizzare){
    		this.numeroDaFattorizzare = numeroDaFattorizzare;
    	}
    	
    	public int prossimoFattore(int fattore){
    		if(numeroDaFattorizzare % fattore == 0){
    			System.out.println(fattore);
    			this.numeroDaFattorizzare = numeroDaFattorizzare / fattore;
    		}		
    		else
    			System.out.println("Non è divisibile per "+fattore);
    		
    		return numeroDaFattorizzare;
    	}
    	
    	public boolean haAltriFattori(){
    		
    		
    	}
    
    }
    
    import java.util.Scanner;
    
    public class FactorPrinter {
    
    	public static void main(String[] args) {
    		
    		Scanner in = new Scanner(System.in);
    		
    		System.out.println("Numero da fattorizzare: ");
    		FactorGenerator fg = new FactorGenerator(in.nextInt());
    		
    		String input = null;
    		System.out.println("Digita Q per terminare la sequenza di input.");
    		System.out.println("Inserisci possibile fattore: ");
    		
    		while( !((input = in.next()).equalsIgnoreCase("Q")) ){
    			System.out.println(fg.prossimoFattore(Integer.parseInt(input)));
    			System.out.println("Ha altri fattori ? "+fg.haAltriFattori());
    			System.out.println("Inserisci possibile fattore: ");
    			
    		}
    		
    		
    		
    
    	}
    
    }
    Questo è il massimo che ho potuto fare. Non so come devo usare il metodo predicativo haAltriFattori() e lo lasciato vuoto

  8. #8
    Originariamente inviato da cv91
    Questo esercizio fa parte di un libro. Essendo arrivato al sesto capitolo cioè quello dei cicli per risolvere questo esercizio dovrei usare i cicli ma non posso usare gli array visto che sono nel capitolo successivo. Per il crivello di Eratostene se non sbaglio si devono usare gli array quindi non e questa la strada

    codice:
    public class FactorGenerator {
    	
    	private int numeroDaFattorizzare;
    	private int fattore;
    	
    	
    	public FactorGenerator(int numeroDaFattorizzare){
    		this.numeroDaFattorizzare = numeroDaFattorizzare;
    	}
    	
    	public int prossimoFattore(int fattore){
    		if(numeroDaFattorizzare % fattore == 0){
    			System.out.println(fattore);
    			this.numeroDaFattorizzare = numeroDaFattorizzare / fattore;
    		}		
    		else
    			System.out.println("Non è divisibile per "+fattore);
    		
    		return numeroDaFattorizzare;
    	}
    	
    	public boolean haAltriFattori(){
    		
    		
    	}
    
    }
    
    import java.util.Scanner;
    
    public class FactorPrinter {
    
    	public static void main(String[] args) {
    		
    		Scanner in = new Scanner(System.in);
    		
    		System.out.println("Numero da fattorizzare: ");
    		FactorGenerator fg = new FactorGenerator(in.nextInt());
    		
    		String input = null;
    		System.out.println("Digita Q per terminare la sequenza di input.");
    		System.out.println("Inserisci possibile fattore: ");
    		
    		while( !((input = in.next()).equalsIgnoreCase("Q")) ){
    			System.out.println(fg.prossimoFattore(Integer.parseInt(input)));
    			System.out.println("Ha altri fattori ? "+fg.haAltriFattori());
    			System.out.println("Inserisci possibile fattore: ");
    			
    		}
    		
    		
    		
    
    	}
    
    }
    Questo è il massimo che ho potuto fare. Non so come devo usare il metodo predicativo haAltriFattori() e lo lasciato vuoto
    Prima cosa ti consiglio di utilizzare nomi in inglese (nextFactor, hasMoreFactors, ecc.) piuttosto che traduzioni in italiano.
    Premesso ciò, ti viene chiesto di implementare il metodo nextFactor che non riceve alcun parametro per cui la tua implementazione è errata. In pratica l'utente deve immettere i vari fattori a mano finchè non trova quelli giusti?! E' l'applicazione che deve individuare i vari fattori di scomposizione e questo può essere fatto solamente conoscendo i numeri primi compresi tra 2 ed il numero da fattorizzare.

    P.S.
    Se non puoi/vuoi utilizzare gli array puoi scrivere un metodo che ti restituisce di volta in volta il numero primo successivo (<= numero da fattorizzare).

    P.P.S.
    L'alternativa al crivello di Eratostene è quella di ciclare su tutti i numeri compresi tra 2 ed il numero da fattorizzare e controllare se sono primi o meno ed utilizzare solo questi per la fattorizzazione.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2011
    Messaggi
    19
    Con quasi tutti i numeri in input non funziona. Con il metodo hasMoreFactors mi sono non so come usarloooo

    codice:
    public class FactorGenerator {
    	
    	private int numberToFactor;
    	
    	
    	public FactorGenerator(int numberToFactor){
    		this.numberToFactor = numberToFactor;
    	}
    	
    	public int nextFactor(){
    		for(int i = 2; i <= Math.sqrt(numberToFactor); i++){
    			if(i % 2 == 0 && i != 2){
    				i++;
    			}
    			if(numberToFactor % i == 0){
    				System.out.println(i);
    			}
    			else{
    				i++;
    			}
    			this.numberToFactor = numberToFactor / i;
    		}
    		return numberToFactor;
    	}	
    	
    	public boolean hasMoreFactors(){
    		if(numberToFactor != 1){
    			System.out.println(numberToFactor);
    		}
    		return numberToFactor == 1;
    	}
    	
    
    }
    
    
    import java.util.Scanner;
    
    public class FactorPrinter {
    
    	public static void main(String[] args) {
    		
    		Scanner in = new Scanner(System.in);
    		
    		System.out.println("Numero da fattorizzare: ");
    		FactorGenerator fg = new FactorGenerator(in.nextInt());
    		
    		fg.nextFactor();
    		System.out.println(fg.hasMoreFactors());
    		
    		
    		
    		
    	}
    
    }

  10. #10
    Comincia con lo scrivere un metodo ad es: boolean isPrime(int value) che ti restituisce true/false a seconda che l'intero in input sia o meno un numero primo.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.