L'ordinateur traite de nombreuses tâches répétitives rapidement . C'est son principal intérêt. On illustre la répétition par l'image d'une boucle qui est parcourue de nombreuses fois. La boucle représente une suite ou bloc d'instructions.
Il y a deux façons de parcourir la boucle:
Regardons comment avec Java on code la répétition.
Regardons sur l'exemple suivant un exemple de boucle for: Il s'agit de simuler le lancer de 10 lancers de dés à 6 faces et d'afficher les résultats. La boucle for sert quand on connaît dès le début de l'exécution le nombre , ici 10 de répétitions dans la boucle.
class LancerDe {
public static void main (String[] args) {
for(int i = 1;i <= 10;i = i+1){
System.out.println("Le lancer de dé numéro"+ i +" est :"+ Math.floor(6*Math.random() + 1));
}
}
}
Copier ce programme dans un fichier nommé LancerDe.java et l'executer dans un terminal. Qu' observez vous ?. En utilisant votre manuel ou internet corriger ce problème.
On pourrait traduire ce programme par : Pour i allant de 1 à 10 et variant d'une unité, afficher le message le lancer numéro i est ...
On constate plusieurs choses: en toute généralité la boucle for peut être définie ainsi
for(état initial; valeur maximale; variation){
instruction 1;
instruction 2;
.......
instruction n;
}
Regardons sur un exemple, le programme de calcul de la racine carrée d'un nombre réel a strictement positif:
Il est basé sur la suite récurrente un+1=0,5*(un+a/un) avec u0=1
Ce qui est appelé racine1 et racine2 dans la suite sont deux termes consécutifs de cette suite
class RacineCarre { public static void main (String[] args) { double racine1; double racine2; // on utilise une variable intermédiaire racine pour mettre le contenu de racine2 dans racine1 //et recalculer une nouvelle valeur de racine2 à partir de racine1 //sans perdre ni la valeur de racine1 ni la valeur de racine2 double racine; System.out.println(" Entrez un nombre réel strictement positif"); double a = Isn.readDouble(); double precision = Math.pow(10,-8); racine1 = 1; racine2 = 0.5*(1+a); while (Math.abs(racine1 - racine2) > precision){ racine = racine2; racine2 = 0.5*(racine2+a/racine2); racine1 = racine; } System.out.println("Une valeur approchée de la racine carrée de " + a +" est : "+ racine2 +" à "+ precision +" près"); } }
class Jeu {
public static void main (String[] args) {
int nombreOrdinateur;
nombreOrdinateur = .......Voir Lancer de Dé;
System.out.println(" Entrez un nombre entier entre 1 et 1000");
int nombreUtilisateur = Isn.readInt();
while (....................){
if(...................){
System.out.println(" Entrez un nombre entier plus grand");
nombreUtilisateur = Isn.readInt();
}
else{
System.out.println(" Entrez un nombre entier plus petit");
nombreUtilisateur = Isn.readInt();
}
}
System.out.println(" Gagné! Le nombre de l'ordinateur est "+ nombreOrdinateur);
}
}
class Jeu {
public static void main (String[] args) {
int nombreOrdinateur;
nombreOrdinateur = (int) Math.floor(1000*Math.random())+1;
System.out.println(" Entrez un nombre entier entre 1 et 1000");
int nombreUtilisateur = Isn.readInt();
while (nombreUtilisateur != nombreOrdinateur){
if(nombreUtilisateur < nombreOrdinateur){
System.out.println(" Entrez un nombre entier plus grand");
nombreUtilisateur = Isn.readInt();
}
else{
System.out.println(" Entrez un nombre entier plus petit");
nombreUtilisateur = Isn.readInt();
}
}
System.out.println(" Gagné! Le nombre de l'ordinateur est "+ nombreOrdinateur);
}
}