Google Plus

الصفحات

Affiliate Program ”Get Money from your Website”
Get Traffic Like Spam

الاثنين، 3 أكتوبر 2011

Cours d'algorithmique N°4 : les boucles

Et ça y est, on y est, on est arrivés, la voilà, c’est Broadway, la quatrième et dernière structure : ça est les boucles. Si vous voulez épater vos amis, vous pouvez également parler de structures répétitives, voire carrément de structures itératives. Ca calme, hein ? Bon, vous faites ce que vous voulez, ici on est entre nous, on parlera de boucles.
1. A quoi cela sert-il donc ?
Prenons le cas d’une saisie au clavier (une lecture), par exemple, on pose une question à laquelle l’utilisateur doit répondre par O (Oui) ou N (Non). Mais l’utilisateur, facétieux ou maladroit, risque fort tôt ou tard de taper autre chose que cela. Dès lors, le programme peut soit planter par une erreur d’exécution (parce que le type de réponse ne correspond pas au type de la variable attendu) soit se dérouler normalement jusqu’au bout, mais en produisant des résultats fantaisistes. Alors, dans tout programme un tant soit peu sérieux, on met en place ce qu’on appelle un contrôle de saisie (pour vérifier que les données entrées au clavier correspondent bien à celles attendues par l’algorithme. A vue de nez, on pourrait essayer avec un SI. Voyons voir ce que ça donne :
Variable Rep en Caractère
Ecrire
"Voulez vous un café ? (O/N)"
Lire Rep
Si Rep <> "O" ET Rep <> "N" Alors
Ecrire
"Saisie erronnée. Recommencez"
Lire Rep
FinSi C’est impeccable. Du moins tant que l’utilisateur a le bon goût de ne se tromper qu’une seule fois, et d’entrer une valeur correcte à la deuxième demande. Si l’on veut également bétonner en cas de deuxième erreur, il faudrait rajouter un SI. Et ainsi de suite, on peut rajouter des centaines de SI, et écrire un algorithme aussi lourd qu’une blague des Grosses Têtes, on n’en sortira pas, il y aura toujours moyen qu’un acharné flanque le programme par terre. C’est donc une impasse.
2. Une première structure de boucle
La seule issue est donc cette structure de boucle, qui se présente ainsi :
TantQue booléen
...
Instructions
...
FinTantQue Le principe est simple : le programme arrive sur la ligne du TantQue. Il examine alors la valeur du booléen (qui, je le rappelle, peut être une variable booléenne ou, plus fréquemment, une condition). Si cette valeur est VRAI, le programme exécute les instructions qui suivent, jusqu’à ce qu’il rencontre la ligne FinTantQue. Il retourne ensuite sur la ligne du TantQue, procède au même examen, et ainsi de suite. Le manège enchanté ne s’arrête que lorsque le booléen prend la valeur FAUX. Illustration avec notre problème de contrôle de saisie :
Variable Rep en Caractère
Ecrire
"Voulez vous un café ? (O/N)"
TantQue Rep <> "O" ET Rep <> "N"
Lire Rep
Si Rep <> "O" ET Rep <> "N" Alors
Ecrire
"Saisie erronnée. Recommencez"
FinSi
FinTantQue
On remarquera que la présence du bloc " Si " est uniquement là pour l’affichage éventuel du libellé de saisie erronée. En lui-même, le bloc " tant que " est d’une simplicité biblique. Le gag de la journée : c’est d’écrire une structure TantQue dans laquelle le booléen ne devient jamais faux ! L’ordinateur tourne alors dans la boucle comme un dératé et n’en sort plus. Seule solution, quitter le programme avec un démonte-pneu ou un bâton de dynamite. Cette faute de programmation grossière – mais fréquente - ne manquera pas d’égayer l’ambiance collective de cette formation… et accessoirement d’étancher la soif proverbiale de vos enseignants.
3. Boucler en comptant, ou compter en bouclant

Cours d'algorithmique Cours d'algorithmique N°4 : les boucles

Auteur : Christophe Darmangeat AddThis

Et ça y est, on y est, on est arrivés, la voilà, c’est Broadway, la quatrième et dernière structure : ça est les boucles. Si vous voulez épater vos amis, vous pouvez également parler de structures répétitives, voire carrément de structures itératives. Ca calme, hein ? Bon, vous faites ce que vous voulez, ici on est entre nous, on parlera de boucles.
1. A quoi cela sert-il donc ?
Prenons le cas d’une saisie au clavier (une lecture), par exemple, on pose une question à laquelle l’utilisateur doit répondre par O (Oui) ou N (Non). Mais l’utilisateur, facétieux ou maladroit, risque fort tôt ou tard de taper autre chose que cela. Dès lors, le programme peut soit planter par une erreur d’exécution (parce que le type de réponse ne correspond pas au type de la variable attendu) soit se dérouler normalement jusqu’au bout, mais en produisant des résultats fantaisistes. Alors, dans tout programme un tant soit peu sérieux, on met en place ce qu’on appelle un contrôle de saisie (pour vérifier que les données entrées au clavier correspondent bien à celles attendues par l’algorithme. A vue de nez, on pourrait essayer avec un SI. Voyons voir ce que ça donne :
Variable Rep en Caractère
Ecrire
"Voulez vous un café ? (O/N)"
Lire Rep
Si Rep <> "O" ET Rep <> "N" Alors
Ecrire
"Saisie erronnée. Recommencez"
Lire Rep
FinSi C’est impeccable. Du moins tant que l’utilisateur a le bon goût de ne se tromper qu’une seule fois, et d’entrer une valeur correcte à la deuxième demande. Si l’on veut également bétonner en cas de deuxième erreur, il faudrait rajouter un SI. Et ainsi de suite, on peut rajouter des centaines de SI, et écrire un algorithme aussi lourd qu’une blague des Grosses Têtes, on n’en sortira pas, il y aura toujours moyen qu’un acharné flanque le programme par terre. C’est donc une impasse.
2. Une première structure de boucle
La seule issue est donc cette structure de boucle, qui se présente ainsi :
TantQue booléen
...
Instructions
...
FinTantQue Le principe est simple : le programme arrive sur la ligne du TantQue. Il examine alors la valeur du booléen (qui, je le rappelle, peut être une variable booléenne ou, plus fréquemment, une condition). Si cette valeur est VRAI, le programme exécute les instructions qui suivent, jusqu’à ce qu’il rencontre la ligne FinTantQue. Il retourne ensuite sur la ligne du TantQue, procède au même examen, et ainsi de suite. Le manège enchanté ne s’arrête que lorsque le booléen prend la valeur FAUX. Illustration avec notre problème de contrôle de saisie :
Variable Rep en Caractère
Ecrire
"Voulez vous un café ? (O/N)"
TantQue Rep <> "O" ET Rep <> "N"
Lire Rep
Si Rep <> "O" ET Rep <> "N" Alors
Ecrire
"Saisie erronnée. Recommencez"
FinSi
FinTantQue
On remarquera que la présence du bloc " Si " est uniquement là pour l’affichage éventuel du libellé de saisie erronée. En lui-même, le bloc " tant que " est d’une simplicité biblique. Le gag de la journée : c’est d’écrire une structure TantQue dans laquelle le booléen ne devient jamais faux ! L’ordinateur tourne alors dans la boucle comme un dératé et n’en sort plus. Seule solution, quitter le programme avec un démonte-pneu ou un bâton de dynamite. Cette faute de programmation grossière – mais fréquente - ne manquera pas d’égayer l’ambiance collective de cette formation… et accessoirement d’étancher la soif proverbiale de vos enseignants.
3. Boucler en comptant, ou compter en bouclant
Dans le dernier algorithme, vous avez remarqué qu’une boucle était fréquemment utilisée pour augmenter la valeur d’une variable. Il arrive également très souvent qu’on ait besoin d’effectuer un nombre déterminé de passages. Or, a priori, notre structure TantQue ne sait pas à l’avance combien de tours de boucle elle va effectuer (cela dépend d’une condition). C’est pourquoi une autre structure de boucle est à notre disposition :
Variable Truc en Entier
Truc ï 0
TantQue Truc < 15
Truc = Truc + 1
Ecrire "Passage numéro : ", Truc
FinTantQue Equivaut à :
Variable Truc en Entier
Pour
Truc = 1 à 15
Ecrire "Passage numéro : ", Truc
Truc Suivant Au sens strict, on pourrait donc s’en dispenser, mais c’est tellement agréable de faire moins d’efforts…
4. Des boucles dans des boucles

On rigole, on rigole ! De même que les poupées russes contiennent d’autres poupées russes, de même qu’une structure SI … ALORS peut contenir d’autres structures SI … ALORS, une boucle peut contenir d’autres boucles.
Variables Truc, Trac en Entier
Pour
Truc ï 1 à 15
Ecrire "Il est passé par ici"
Pour Trac ï 1 à 6
Ecrire "Il repassera par là"
Trac Suivant
Truc Suivant Dans cet exemple, le programme écrira une fois "il est passé par ici" puis six fois de suite "il repassera par là", et ceci quinze fois en tout. A la fin, il y aura donc eu 15 x 6 = 90 passages dans la deuxième boucle (celle du milieu). Notez la différence marquante avec cette structure :
Variables Truc, Trac en Entier
Pour Truc
ï 1 à 15
Ecrire "Il est passé par ici"
Truc Suivant
Pour
Trac ï 1 à 6
Ecrire "Il repassera par là"
Trac Suivant Ici, il y aura quinze écritures consécutives de "il est passé par ici", puis six écritures consécutives de "il repassera par là" , et ce sera tout. Si des boucles peuvent être imbriquées (cas n°1) ou successives (cas n°2), elles ne peuvent jamais, au grand jamais, être croisées. Cela n’aurait aucun sens logique, et de plus, bien peu de langages vous autoriseraient ne serait-ce qu’à écrire cette structure aberrante.
Variables Truc, Trac en Entier

Pour Truc ï...
instructions
Pour Trac ï ...
instructions
Truc Suivant

instructions
Trac Suivant
5. Et encore une tournée générale !

Examinons l’algorithme suivant :
Variable Truc en Entier
Pour
Truc ï 1 à 15
Truc ï Truc * 2
Ecrire "Passage numéro : ", Truc
Truc Suivant Vous remarquerez que nous faisons ici gérer " en double " la variable Truc, ces deux gestions étant contradictoires. D’une part, la ligne " Pour… " augmente la valeur de Truc de 1 à chaque passage. D’autre part la ligne " Truc ï Truc * 2 " double la valeur de Truc à chaque passage. Il va sans dire que de telles manipulations perturbent complètement le déroulement normal de la boucle, et sont sources d’exécutions erratiques. Le gag de la journée : consiste donc à manipuler, au sein d’une boucle Pour, la variable qui sert de compteur à cette boucle. Cette technique est à proscrire absolument… sauf bien sûr, si vous cherchez un prétexte pour régaler tout le monde au bistrot. Mais dans ce cas, n’ayez aucune inhibition, proposez-le directement, pas besoin de prétexte.



0 commentaires:

إرسال تعليق

earn monye

شارك

Twitter Delicious Facebook Digg Stumbleupon Favorites More