Newsgroup: it.comp.java
Titolo: stampare i primi n numeri perfetti

import javax.swing.*;
public class Primi_n_perfetti{
    public static void main (String args[]){
        int n,i=0,divisore=1,k=0;
        n=Integer.parseInt(JOptionPane.showInputDialog("Inserire il limite
massimo dei numeri perfetti"));
        while (i<=n){
            while (divisore<i){
                if (i%divisore==0){
                    k=k+divisore;
                }
                divisore++;
            }
            if (k==i){
                JOptionPane.showMessageDialog(null,"un numero perfetto č
"+i);
            }
            i++;
        }//while
        if (i==0){
            JOptionPane.showMessageDialog(null,"nella serie non c'erano
numeri perfetti");     
        }
    }
}
Il pezzo di codice qui sopra dovrebbe stampare a video i primi n numeri
perfetti. Invece non svolge il suo compito.Perchč?
i numeri perfetti sono quei numeri che sono uguali alla somma dei loro
divisori.Non capisco dove il programma sbagli.Si interrompe senza neanche
un output.Bhoo!Non posso usare altre tipi di soluzioni per risolvere
l'esercizio,solo if e ciclo while.
grazie
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 perfetti. Invece non svolge il suo compito.Perchč?
Innanzitutto ti inviterei a riflettere sull'utilita' dell'ultimo if(i==0).
Quanto al tuo problema, devi inizializzare k e divisore dentro al primo 
while se vuoi che ad ogni ciclo venga fatto un controllo "sensato"
while(i<=n) {
    k=0;
    divisore=1;
    ..eccetera..
Per ultimo, mi sa che questo codice stampa i numeri perfetti minori di n 
(quindi la serie che va da 0 a n), non i primi n numeri perfetti.
Saluti
CarMas

 grazie
Il vostro prof vi vuole far sprecare un po' di cicli macchina... ;)
http://mathforum.org/library/drmath/view/51516.html
Dai un'occhiata qui:
http://mat140.bham.ac.uk/~richard/msm2c/lectures/IntAndFor/Perfect.java
NOTA: se devi trovare i divisori propri di un numero intero n, e' inutile 
      andare a cercarli oltre n/2...
Ciao!
Roberto


 numeri perfetti");
Questo test è un pò inutile.
Per come hai scritto il codice, i non sarà mai uguale a 0.
A meno che tu non inserisci un numero negativo nella InputDialog.
Ciao
Marco 

 (quindi la serie che va da 0 a n), non i primi n numeri perfetti.
si,mi sono sbagliato a scrivere,volevo dire la serie di numeri perfetti da
0 al numero !scusate per l'incomprensione!grazie ancora


       andare a cercarli oltre n/2...
come oltre n/2?


 Marco


 dal mio programma risultano 6,28,8128(qualcosa del genere,nn ricordo) e
Qui c'è un'interessante descrizione del problema:
http://it.wikipedia.org/wiki/Numero_perfetto
Ed un'altrettanto interessante soluzione sfruttando i numeri primi.
Ciao
Marco 

 come oltre n/2?
se per un divisore d vale
N/2 < d < N
allora c'è un altro divisore d' < N/2 (Il primo dovrà pure essere
moltiplicato per qualcosa, no? E qualcosa è _almeno_ 2)
-- 
chi sono e soprattutto chi non sono:
http://www.softeaware.it

 come oltre n/2?
Rifletti...
Ciao!
Roberto


 
Apparte il fatto che ti potresti fermare a radice(n), inoltre esistono 
algoritmi un pň meno "scalda-cpu" che provare tutti i numeri da 2 a 
radice(n); uno che mi viene in mente, piů efficente ed altrettando 
semplice, č l'algoritmo di eratostene (cerca su google crivello di 
eratostene)...
Ciao, Alberto

 :-O
...sono all'inizio ed ho un po di confusione sugli oggetti.Che vuol dire
di preciso?


 di preciso?
Ehm, non è una cosa che si può spiegare in 2 parole.
E' un paradigma di programmazione, oltre che un modo di pensare.
Oserei dire una filosofia di vita. :-)
A differenza della programmazione procedurale, che pone l'attenzione sulla 
chiamata di procedura ed in cui ti trovi un flusso uniforme di codice, nella 
programmazione ad oggetti ti ritrovi a gestire degli oggetti ciascuno dotato 
di un proprio stato e di un proprio comportamento.
Il programma utilizza gli oggetti e li fa interagire tra di loro.
Ad esempio, hai un oggetto Dipendente.
Questo oggetto avrà un suo stato: nome, cognome, data di nascita, codice 
fiscale, stipendio.
Ed avrà un suo comportamento: leggere i dati anagrafici, modificare lo 
stipendio, ecc...
Sono caratteristiche INTERNE all'oggetto, che solo l'oggetto sa gestire 
perchè di sua compenteza.
Poi ci sono mille altre cose: l'ereditarietà, il polimorfismo, 
l'incapsulamento, ...
Ciao
Marco 

 eratostene)...
Tra l'altro uno di quegli algoritmi su cui Java si č mostrato
leggermente piů performante di C++. <fonte Core Java di Horstmann e
Cornell>
-- 
non vincono, non vinceranno, non hanno domani
la forza č nel puntello impugnato da oneste fortissime mani

 moltiplicato per qualcosa, no? E qualcosa è _almeno_ 2)
In effetti è sufficiente cercarli prima della radice quadrata del
numero. La motivazione è la stessa del non superare N/2.
-- 
-RiK0