Le but de ce tutoriel d'apprendre à utiliser des boucles.
Vous avez déjà utilisé des boucles TANT QUE, ou POUR... en algorithmique, nous allons voir ces notions en JAVASCOOL
Imprimer 10 fois la même chose.
Supposons vouloir imprimer
"Hello world" 10 fois, bien sûr, nous pouvons écrire :
void main() {
println("Hello World !");
println("Hello World !");
println("Hello World !");
println("Hello World !");
println("Hello World !");
println("Hello World !");
println("Hello World !");
println("Hello World !");
println("Hello World !");
println("Hello World !");
} |
mais si nous devons écrire un code qui doit répéter un million de fois une action, nous ne sommes pas rendus ! Regardons
alors cette autre solution :
void main() {
int n;
for( n=1;n<10;n=n+1)
{
println("Hello World !");
}
} |
où
- nous avons défini un compteur n;
- Que nous faisons varier de 1 à 10; de 1 en 1 : for( n=1;n<10;n=n+1),
- nous imprimons "Hello world"
Notez bien les accolades autour du
println(
"Hello World !"); qui permettent de regrouper dans un BLOC tout ce qui sera répété 10 fois.
A nous de jouer.
Recopier le 2ème programme proposé ci-dessus et :
- Le modifier pour imprimer 11 fois le "Hello World !".
- Remplacer la ligne n = n + 1; par n=n+2 que se passe t'il?
- Remplacer la ligne n = n + 1; par n = n - 1; et expliquer ce qui se passe.
Une autre forme de boucle : la boucle TANT-QUE : While
Cette boucle repète le code du bloc TANT QUE le test est vrai.
On l'utilise quand la boucle FOR n'est pas adaptée, c'est à dire qu'on ne sait pas à l'avance combien de fois la boucle sera faite.
Exemples : Testez les codes suivants :
- La suite (Un) est définie par u0=1 et u(n+1)=2u(n)+1.
A partir de quand dépasse t-on une valeur donnée ?
void main() {
int n = 0;
double u = 1;
double max = readDouble("Entrez la valeur à atteindre");
//OhOh vous avez remarqué la nouvelle écriture !
while (u < max) {
n = n + 1;
u = 2 * u + 1;
println("Si n=" + n + ", u(n) vaut " + u);
}
println("On dépasse " + max + " pour n=" + n);
} |
- La suite (Un) est définie par et u(n)=(2n+1)/(3n-4) tend vers 2/3.
A partir de quand est-on proche de cette limite à 10-k près ?
void main() {
int n = 0;
double u;
int k= readInt("Entrez k, entier positif");
do {
n = n + 1;
u = (2 * n + 1)/(3*n-4);
println("Si n=" + n + ", u(n) vaut " + u);
} while (abs(u-2.0/3.0)>pow(10,-k));
//Remarquez les instruction mathématiques abs( ) et pow( )
println("On est à " + pow(10,-k)+ " de 2/3 pour n=" + n);
} |
Programmer quelques boucles:
- Programmer une boucle qui calcule la somme 1+3+5+...+39 (tous les nombres impairs de 1 à 39 inclus)
- Le nombre d'or est défini par une suite
de la forme : r = 1 + 1 / r initialisée avec
r = 1. Ecrire une boucle qui part de r = 1 et calcule 30 fois r = 1 + 1 / r en imprimant
à chaque fois r (par exemple avec l'instruction println("r = " + r);