Newsgroup: it.comp.programmare
Titolo: il mio primo for

ciao
mi scuso da ora per le domande banali che farò.
Premetto che prima di postare ho provato un po' di cose ma senza risultato.
Devo fare un programmino scemo che dato un numero divida quel numero per
tutti i numeri minori alla ricerca di un divisore del numero stesso e
quindi capire se quel numero è primo o no
Ho pensato di fare un ciclo e di dividere i numeri precedenti in cerca di
resto == 0 , nel qual caso il numero è primo.
Ho anche pensato che resto non potesse essere int ma float perchè il resto
mettiamo di 45/44 è 0,02272 e che quindi avrebbe fatto sempre 0 in un'int.
ho scritto la seguente
----------------------------
float resto = 0;
        for (int i = numero - 1; i > 1; i = i - 1) //numero è il numero
immesso da tastiera inserito precedentemente in un int
              resto = numero%i;
              if (resto == 0.00000)
                      out.println("Il numero " + numero + " non e'
primo!");
              else
                      out.println("Il numero " + numero + " e' primo!");
--------------------------
Questo codice mi ritorna che qualunque numero è primo... mi date uno spunto
per capire dove sbaglio?
Grazie per le risposte
Excelsior,
Stefano

 mettiamo di 45/44 è 0,02272 e che quindi avrebbe fatto sempre 0 in un'int.
scusa ma veramente il resto è sempre intero per definizione... 45 / 44 fa
1 col resto di 1, infatti 44 * 1 + 1 = 45...
e probabilmente il problema è proprio il fatto che resto è un float,
perché le comparazioni tra float non ti garantiscono mai precisione in
quanto convertendo un numero decimale dalla base 10 con la virgola alla
base 2 con la notazione segno-mantissa-esponente potresti ottenere un
numero leggermente diverso; a dire il vero non dovrebbe succedere nel caso
di 0.00, ma non si sa mai...
ti riscrivo il programma come lo farei io:
------------------------------------------------
int max = (int)Math.sqrt(numero);
boolean primo = true;
for (int i = 2; primo && (i <= max); i++) {
	if (numero % i == 0) {
		primo = false;
	}
}
if (primo) {
	out.println(numero + " e' primo\n");
}
else {
	out.println(numero + " non e' primo\n");
}
------------------------------------------------
non l'ho provato, spero sia corretto.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Stefano
Saluti,
David
- --
Linux Registered User #334216
Get FireFox! >> 
http://www.spreadfirefox.com/?q=affiliates&id=48183&t=1
Staff >> 
http://www.debianizzati.org
 <<
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.9.20 (GNU/Linux)
Comment: Using GnuPG with Mozilla - 
http://enigmail.mozdev.org
iD8DBQFFDSdv5sXXcRsFI+cRAlEPAKCAm3z9TuF+IOXNn2xskoKDPncGrwCgq+Oz
+FaTk7JzC162PbWDytCfWFo=
=8R5w
-----END PGP SIGNATURE-----

               if (resto == 0.00000)
è probabile che la variabile resto venga interpretata come variabile
numerica di tipo intero, quindi non ti darà mai un resto.
Ti consiglio di osservare dei codici funzionanti e studiarli bene per
capire come fare. Osserva le sorgenti delle pagine seguenti (view page
source):
http://javascript.internet.com/math-related/prime-number.html
http://www.jointtech.com/prime.html
http://www.wcrl.ars.usda.gov/cec/java/prime.htm
Il linguaggio usato è JavaScript