Cinquième semaine

Rappel sur la notion de boucle et de répétition

Exercice 1
Création d'une classe permettant de dessiner un carré Carre & TestCarre
Exercice 2
Création d'une classe permettant de dessiner un triangle rectangle TriangleRectangle & TestTriangleRectangle
Exercice 3
Création d'une classe permettant de dessiner un triangle isocèle TriangleIsocele & TestTriangleIsocele
Exercice 4
Création d'une classe permettant de dessiner un sablier Sablier & TestSablier


Rappel sur la notion de boucle et de répétition :

Qu'est-ce qu'une boucle ? A quoi cela peut-il servir ?
Dans de nombreux programmes, il est souvent nécessaire de répéter un certain nombre de fois un ensemble d'instructions. Pour pouvoir effectuer cela, les langages de programmations proposent deux alternatives : la notion de boucle et la notion de récursivité. nous allons pour l'instant nous limiter aux notions de boucles proposées par le langage Java : les boucles pour (for) et les boucles tant que (while).

I La boucle pour (for) :

La boucle pour est a utiliser lorsque l'on sait le nombre de répétitions (ou d'itérations) que l'on aura à faire. Ainsi si je veux calculer la factorielle d'un nombre, je sais le nombre de multiplications que j'aurai à effectuer. Au niveau de la syntaxe, la boucle for est constituée d'une expression contenant trois parties et d'un corps de boucle. Le corps de la couple contient les instructions qui vont etre répétées, tandis que l'expression composée de trois parties sert à définir les conditions initiales, le critère d'arret et la mise à jour de la boucle :
 

 
for ( initialisation ; condition ; mise à jour ) 
{
   // Corps de la boucle
}

La première partie de l'expression permet d'initialiser un compteur, la seconde exprime la condition qu'il faut vérifier pour rester dans la boucle, tandis que la dernière partie permet de préciser comment le compteur évolue lorsque l'on arrive à la fin de la boucle.

Exemple : On désire afficher à l'écran une suite d'entiers dont l'utilisateur précisera la borne inférieure et la borne supérieure.
 

C:\Java> java Suite
Entrez la borne inférieure : 5
Entrez la borne supérieure : 9
5
6
7
8
9
C:\Java>

On peut utiliser une boucle pour, puisque l'on connait le nombre d'itérations à effectuer (borneSup - borneInf + 1). On aura ainsi :
 

class Suite
{
    public static void main(String[] args)
    {
        int bInf, bSup;
        System.out.print("Entrez la borne inférieure : ");
        bInf = Clavier.readInt();
        System.out.print("Entrez la borne supérieure : ");
        bSup = Clavier.readInt();

        for (int i=bInf; i <= bSup; i++)
        {
            System.out.println(i);
        }
    }
}

Vous pouvez trouver le source ici.

On initialise le compteur à la valeur de la borne inférieure, ensuite on défini la condition qu'il faudra vérifier pour rester dans la boucle (on utilise un inférieur ou égal car l'on désire que la borne supérieure soit affichée), enfin on décrit la mise à jour du compteur. Le corps de la boucle ne consiste qu'à afficher la valeur du compteur (le compteur évoluant entre la borne inférieure et la borne supérieure).

II La boucle tant que (while) :

La boucle while est a utiliser lorsque l'on ne connait pas le nombre d'itérations que l'on aura à faire. Ainsi si je propose un jeu à l'utilisateur pour qu'il puisse y rejouer autant de fois qu'il le désire, je ne connais pas le nombre de jeux à effectuer. Au niveau de la syntaxe, la boucle while est constituée d'une condition et d'un corps de boucle. Le corps de la couple contient les instructions qui vont etre répétées, tandis que la condition détermine le critére d'arret de la boucle :
 

 
while ( condition ) 
{
   // Corps de la boucle
}

Tant que la condition sera vérifiée, on répétera les instructions contenues dans le corps de la boucle.

Exemple : On désire calculer la moyenne d'un ensemble de notes. L'utilisateur entrera -1 lorsqu'il aura fini de saisir les notes.
 

C:\Java> java Notes
Entrez la note suivante : 15
Entrez la note suivante : 9
Entrez la note suivante : 12
Entrez la note suivante : 7
Entrez la note suivante : 18
Entrez la note suivante : -1
La moyenne des 5 notes est de 12.
C:\Java>

On peut utiliser une boucle pour, puisque l'on connait le nombre d'itérations à effectuer (borneSup - borneInf + 1). On aura ainsi :
 

class Notes
{
    public static void main(String[] args)
    {
        int nbNotes = 0, somme = 0, noteCourante = 0;

        while (noteCourante != -1)
        {
            System.out.print("Entrez la note suivante : ");
            noteCourante = Clavier.readInt();
            somme = somme + noteCourante;
            nbNotes++;
        }
        if (nbNotes > 0)
        {
           System.out.println("La moyenne des "+nbNotes+" notes est de "+(somme / nbNotes)+".");
        }
    }
}

Vous pouvez trouver le source ici.

Ici, on ne connait pas a l'avance le nombre d'itérations à effectuer, par contre on connait la condition d'arret : l'utilisateur saisira la note "-1". On va donc accumuler dans la variable somme les différentes notes, en concervant dans la variable nbNotes le nombre de notes que l'on a saisi. Lorsque la boucle est terminée, on n'oublie pas de retirer une note au nombre de notes (la note "-1" qu'il ne faut pas prendre en compte dans le calcul de la moyenne), on vérifie que l'utilisateur a saisi au moins une note et on procéde enfin au calcul de la moyenne.



Exercice 1 :
Nous cherchons à écrire une classe permettant de dessiner un carré dont l'utilisateur choisi la taille.


C:\Java\Algo> java TestCarre
Entrez la longuer du cote : 4
****
*  *
*  *
****
C:\Java\Algo>

Rappel : aucun affichage ne doit etre fait dans les classes "Boites à outils". Par contre il est bien sur possible de retourner une chaine de caractères (String).



Exercice 2 :
Le but de cet exercice est d'écrire et de tester un programme qui dessine un triangle rectangle.


C:\Java\Algo> java TestTriangleRectangle
Entrez la longueur du cote : 5
*
**
* *
*  *
*****
C:\Java\Algo>



Exercice 3 :
C'est le meme exercice que précédemment, sauf que cette fois-ci, on désire un triangle isocèle :


C:\Java\Algo> java TestTriangleIsocele
Entrez la longueur du cote : 5
    *
   * *
  *   *
 *     *
*********
C:\Java\Algo>



Exercice 4 :
Cette fois-ci on cherche à écrire un programme dessinant un sablier s'inscrivant dans un carré :


C:\Java\Algo> java TestSablier
Entrez la hauteur du sablier : 8
*********
 *     *
  *   *
   * *
   * *
  *   *
 *     *
*********
C:\Java\Algo>