A propos de JavaScool : boucles while et boucles for

105 views
Skip to first unread message

Xavier Delahaye

unread,
Dec 2, 2012, 12:47:51 PM12/2/12
to java...@googlegroups.com
Bonjour,

J'utilise JavaScool en spécialité ISN avec des élèves de TS.
Je profite de l'occasion pour vous remercier de cet outil bien conçu et facile à utiliser en
classe.

A titre d'exercice je veux faire travailler les élèves sur la recherche de nombres premiers (de
taille modeste) et je voulais en profiter pour comparer les temps d'exécution de différents
programmes.

Or j'ai été surpris de constater sur mon ordinateur une grande différence d'exécution entre
un programme fait avec une boucle for (résultat obtenu en moins d'une seconde) et le même
fait avec une boucle while (une minute et 33 secondes). Je vous joins, à toutes fins utiles, les
deux versions du programme.

N'étant qu'un amateur dans le domaine de la programmation j'aurais aimé savoir s'il y avait
une explication à cela ? Est-ce une différence dûe à Javascool, à Java, à tous les langages
de programmation ? Ou est-ce moi qui commet une erreur ?

Merci si vous avez le temps de me répondre.

Cordialement

Xavier Delahaye
Lycée F Daguin
33700 Mérignac

--------------------------------

version for :

void main(){
int max=1000;
int nbpremiers[]=new int[max];
nbpremiers[0]=2;
int index=1;
int j;
boolean premier;
for (int i = 3 ; i <= max ; i++) {
premier=true;
for (j =0 ; j < index ; j++ ) {
// j=0;
// while (j < index) {
if (i%nbpremiers[j]==0) {
premier=false;
}
// j++;
}
if (premier==true) {
nbpremiers[index]=i;
index=index+1;
}
}
println(index);
}


version while


void main(){
int max=1000;
int nbpremiers[]=new int[max];
nbpremiers[0]=2;
int index=1;
int j;
boolean premier;
for (int i = 3 ; i <= max ; i++) {
premier=true;
// for (j =0 ; j < index ; j++ ) {
j=0;
while (j < index) {
if (i%nbpremiers[j]==0) {
premier=false;
}
j++;
}
if (premier==true) {
nbpremiers[index]=i;
index=index+1;
}
}
println(index);
}



Philippe Vienne

unread,
Dec 2, 2012, 1:04:45 PM12/2/12
to java...@googlegroups.com, xdel...@laposte.net
Bonjour,
Effectivement, il y a une raison à cette lenteur de la boucle while. Dans javascool, afin d'éviter que les jeunes programmeur ne fasse surchauffer un processeur, on rajoute un sleep d'une durée faible >10ms sur le while. Sur le for, cette modification n'existe pas.





--




Xavier Delahaye

unread,
Dec 2, 2012, 5:15:45 PM12/2/12
to Philippe Vienne, java...@googlegroups.com
D'accord.

Merci beaucoup de cette réponse rapide.

Cordialement

Xavier Delahaye
Reply all
Reply to author
Forward
0 new messages