Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les tutoriels > Non-Officiels > Programmation > Autres langages > [Pascal] Cours pour débutants sur le Pascal > Il était une fois... Le pascal ! > Les boucles > Lecture du tutoriel

Les boucles

Vous vous apprêtez à lire un tutoriel rédigé par un membre de ce site. Malgré tout le soin que ce membre a pu apporter au tutoriel, nous ne pouvons pas garantir que les informations contenues sur cette page sont exactes à 100%. Merci de garder cela en tête lorsque vous lirez cette page ;o)
Avatar
Auteur : SAurOn
Note : 15 / 20 (2 votes)
Visualisations : 5 866

Plus d'informations Plus d'informations
Après les conditions, on va voir un concept très proche de celui-ci : les boucles.

Qu'est-ce qu'une boucle ?

C'est une autre technique de base permettant de répéter des choses. Et croyez-moi, ça nous sera bien utile !

Ce chapitre va être assez facile à avaler, étant donné que ça se rapproche assez des conditions : vous les avez déjà vues, tout comme les booléens dans le chapitre précédent ; n'hésitez pas à aller le relire, pour assimiler tous ça !

Vous êtes grands maintenant, donc je ne vais plus mettre la première ligne de chaque programme, qui est, pour rappel :
Code : Pascal
1
program nom_du_programme(output);
Sommaire du chapitre :
Icône du chapitre
Chapitre précédent Sommaire Chapitre suivant

Une boucle, c'est quoi ?

Tout comme pour les conditions, il y a plusieurs façons de réaliser des boucles :

Le schéma est, quand même, toujours identique :

Image utilisateur
Euh, oui, c'est pas moi qui l'ai fait, je l'ai honteusement piqué à M@teo...


Mais que se passe-t-il ?


L'ordinateur lit, dans l'ordre, les instructions (la flèche rouge).
A la fin, il repart au début (la flèche verte).
Et ainsi de suite... (les deux flèches).

Mais là, on rencontre un problème, et un gros ! Car la boucle, telle qu'elle est là, elle va jamais s'arrêter, l'ordinateur restera infatigable !
Heureusement, il y a une solution à ça.
Et c'est là qu'on aura besoin ... des conditions (si votre réaction en lisant ça, est : "Hein ? De quoi il parle, lui ?" allez tout de suite relire le chapitre sur les conditions).
Quand on crée une boucle, on indique toujours une condition. Cette condition signifiera : "Répète la boucle tant que cette condition est vraie". Donc, pour faire intervenir les booléens : "Répète la boucle tant que ça renvoie TRUE".
Mais je sens que vous n'en pouvez plus, et que vous voulez découvrir le premier type de boucle ! Alors passons sans tarder à la prochaine partie !

while ... do ...

Voilà comment se construit une boucle "while ... do ..." (abréviation : while) :

Code : Pascal
1
2
3
4
5
while { Condition } do
begin
    { Instructions à répéter }

end ;


C'est aussi simple que ça. :D
While signifie "Tant que", et do signifie "Fait". On dit donc à l'ordinateur : "Tant que ça renvoie TRUE, fais les instructions".

Je vous propose de faire un test simple : on va demander à l'utilisateur de taper le code secret. Tant qu'il n'a pas tapé le bon, on recommence à le lui demander. Le programme ne pourra s'arrêter que si l'utilisateur tape le bon code secret (il a intérêt à le rentrer s'il veut pas y passer sa journée !) :
Code : Pascal
1
2
3
4
5
6
7
8
9
var code:string;

begin
    while code <> 'Jambon' { c'est le seul truc qui m'est passé par la tête } do
    begin
        write('Tapez le code secret : ');
        readln(code);
    end;
end.


Voici maintenant le test que j'ai fait. Notez que j'ai fait exprès de me planter 2-3 fois avant de taper le bon code, pour jouer au voleur. :D

Code : Console
Tapez le code secret : Fromage

Tapez le code secret : Pain au chocolat

Tapez le code secret : Salade

Tapez le code secret : Mayonnaise

Tapez le code secret : Jambon


Notez que j'avais un peu faim à ce moment là...


Le programme s'est arrêté après avoir tapé le code 'Jambon'.
Cette boucle while se répète donc tant que l'utilisateur n'a pas tapé 'Jambon', c'est assez simple.

Maintenant, essayons de faire quelque chose d'un peu plus intéressant : on veut que notre boucle se répète un certain nombre de fois.
On va pour cela créer une variable "compteur", qui vaudra 0 au début du programme, et que l'on va incrémenter au fur et à mesure. Vous vous souvenez de l'incrémentation ? Ça consiste à ajouter 1 à la variable en faisant inc(variable, 1);.

Regardez attentivement ce bout de code et, surtout, essayez de le comprendre :

Code : Pascal
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
var compteur:integer;

begin
    compteur := 0;
    while compteur < 10 do
    begin
        writeln('Ceci va se répèter 10 fois.');
        inc(compteur, 1);
    end;
end.


Résultat :
Code : Console
Ceci va se répèter 10 fois.

Ceci va se répèter 10 fois.

Ceci va se répèter 10 fois.

Ceci va se répèter 10 fois.

Ceci va se répèter 10 fois.

Ceci va se répèter 10 fois.

Ceci va se répèter 10 fois.

Ceci va se répèter 10 fois.

Ceci va se répèter 10 fois.

Ceci va se répèter 10 fois.


Ce code répète 10 fois l'affichage de "Ceci va se répéter 10 fois.".

Comment ça marche ?


Au départ, on a une variable compteur initialisée à 0. Elle vaut donc 0 au début du programme.
La boucle while ordonne la répétition TANT QUE compteur est inférieur à 10. Comme compteur vaut 0 au départ, on rentre dans la boucle.
On affiche la phrase : "Ceci va se répéter 10 fois." via un writeln.
On incrémente la valeur de la variable compteur, grâce à l'instruction "inc(compteur, 1);". compteur valait 0, elle vaut maintenant 1.
On arrive à la fin de la boucle (end;) : on repart donc au début, au niveau du while. On refait le test du while : "Est-ce que compteur est toujours inférieur à 10 ?". Ben oui, compteur vaut 1 :p . Donc on recommence les instructions de la boucle.

Et ainsi de suite... compteur va valoir progressivement 0, 1, 2, 3, ..., 8, 9, et 10. Lorsque compteur vaut 10, l'expression "compteur < 10" renvoie FALSE. Donc, on sort de la boucle.

On pourrait voir d'ailleurs que la variable compteur augmente au fur et à mesure dans la boucle, en l'affichant dans le write :

Code : Pascal
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
var compteur:integer;

begin
    compteur := 0;
    while compteur < 10 do
    begin
        writeln('compteur vaut ', compteur);
        inc(compteur, 1);
    end;
end.


Code : Console
compteur vaut 0

compteur vaut 1

compteur vaut 2

compteur vaut 3

compteur vaut 4

compteur vaut 5

compteur vaut 6

compteur vaut 7

compteur vaut 8

compteur vaut 9


Voilà, si vous avez compris ça, vous avez tout compris. ;)
Vous pouvez vous amuser à augmenter la limite du nombre de boucles ("< 100" au lieu de "< 10").

Gare aux boucles infinies



Lorsque vous créez une boucle, assurez-vous toujours qu'elle peut s'arrêter à un moment ! Si l'expression renvoie toujours TRUE, votre programme ne s'arrêtera jamais !
Voici un exemple de boucle infinie :

Code : Pascal
1
2
3
4
while TRUE do
begin
    writeln('Mais qui va arrêter cette boucle ?');
end;


Souvenez-vous des booléens : TRUE = vrai, FALSE = faux. Ici, c'est toujours TRUE, donc ce programme affichera : "Mais qui va arrêter cette boucle ?" sans arrêt !

Pour arrêter une boucle infinie, si vous avez créé un .exe, arrêtez tout simplement la console : sous le compilateur que je vous ai donné, cliquez sur la petite fenêtre Windows entre Ctrl et Alt.


Mais le meilleur moyen reste quand même de ne pas en faire.

Repeat ... Until ...

Ce type de boucle est très similaire à while, bien qu'un peu moins utilisé, en général.
La seule chose qui change en fait par rapport à while, c'est la position de la condition. Au lieu d'être au début de la boucle, la condition est à la fin :
Code : Pascal
1
2
3
4
5
6
7
8
9
var compteur:integer;

begin
    compteur := 0;
    repeat
        writeln('compteur vaut ', compteur);
        inc(compteur, 1);
    until compteur = 10;
end.


Qu'est-ce que ça change ?

C'est très simple : la boucle while pourrait très bien ne jamais être exécutée si la condition est fausse dès le départ. Par exemple, si on avait initialisé le compteur à 50, la condition aurait été fausse dès le début, et on ne serait jamais rentrés dans la boucle.
Pour la boucle repeat ... until, c'est différent : cette boucle s'exécutera toujours au moins une fois. En effet, le test se fait à la fin, comme vous pouvez le voir. Si on initialise compteur à 50, la boucle s'exécutera une fois.

Il est donc parfois utile de faire des boucles de ce type, pour s'assurer que l'on rentre au moins une fois dans la boucle. C'est quand même plus rare. ;)

repeat veut dire, en français, répète, et until, jusqu'à ce que. La boucle va donc se répéter JUSQU'A CE QUE LA CONDITION SOIT VERIFIEE, et non pas tant qu'elle est fausse !

Les boucles FOR

En théorie, la boucle while permet de réaliser toutes les boucles que l'on veut.
Toutefois, tout comme le "case ... of ... end ..." pour les conditions, il est dans certains cas utiles d'avoir un autre système de boucle plus "condensé", plus rapide à écrire.

Les boucles for sont très très utilisées en programmation. Je n'ai pas de statistiques sous la main, mais sachez que vous utiliserez certainement autant de for que de while, donc il vous faudra savoir manipuler ces deux types de boucles.


Comme je vous le disais, les boucles for sont juste une autre façon de faire une boucle while.
Voici un exemple de boucle while que nous avons vu tout à l'heure :

Code : Pascal
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
var compteur:integer;

begin
    compteur := 0;
    while compteur < 10 do
    begin
        writeln('compteur vaut ', compteur);
        inc(compteur, 1);
    end;
end.


Voici maintenant l'équivalent en boucle for :

Code : Pascal
1
2
3
4
5
6
7
8
var compteur:integer;

begin
    for compteur := 0 To 10 do
    begin
       writeln('compteur vaut ', compteur);
    end;
end.


Quelles différences ?


Intéressons-nous maintenant à ce qu'il y a après le for :
Code : Pascal
1
for compteur := 0 To 10 do




Bref, comme vous le voyez, la boucle for n'est rien d'autre qu'un condensé. ;)
Sachez vous en servir, vous en aurez besoin plus d'une fois !

Q.C.M.

Laquelle de ces boucles n'existe pas en PASCAL ?
Combien de fois le message "Salut" sera-t-il affiché ?


Code : Pascal
1
2
3
4
5
6
7
8
9
var compteur:integer;

begin
    compteur := 10;
    repeat
        writeln('Salut');
        inc(compteur, 1);
    until compteur >= 10;
end.

Statistiques de réponses au QCM


Alors, vous voyez que c'est pas trop dur !
Si vous n'avez pas bien assimilé ce chapitre, c'est sûrement que vous n'avez pas pas bien compris le chapitre précédent, allez donc le relire.
Chapitre précédent Sommaire Chapitre suivant
Retour en haut Retour en haut


Créé : le 01/12/2005 à 20:05:56
Modifié : le 22/08/2008 à 15:49:16
Avancement : 100%
Licence : Copie non autorisée

3 commentaires

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | RSS tutoriels | RSS news
Édité par Simple IT SARL : Nous contacter | Notre blog | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 81 Zéros connectés | Requêtes SQL 8 requêtes | Temps de génération de la page : Total (SQL) 0.0779s (0.0665s)