Overblog Tous les blogs Top blogs Photographie
Editer l'article Suivre ce blog Administration + Créer mon blog
MENU

Paris, photo, humeurs, un peu de HTML/CSS pour faire sérieux. Feinte innocence et vraie naïveté (ou vice-versa). Encore un blog qui agite ses petits bras en couinant "Viens me lire !"

Publicité

[B-A BA] Programmation - 2 (les fiches de Maman)

Fourrageons un peu dans les fiches et les boîtes (sans rien déclasser), il y en a pour plusieurs articles.


Première fiche : aller du téléphone au congélateur. Il faut 42 pas de Norbert pour ça (un pas consistant ici à avancer un pied puis l'autre).

La première version de la fiche obéissait au principe des gens normaux :  on n'a pas le temps  – pas le temps d'attendre, pas le temps d'écouter, pas le temps de chercher, pas le temps de réfléchir. La fiche ressemblait donc à  pied gauche, pied droit, pied gauche, pied droit, etc. . Très long et pas terrible mais  on n'a pas le temps  de mieux faire.

Un soir que Maman rentrait épuisée (pléonasme), son mari était exceptionnellement là lui aussi. Policier, il rentre quand il peut. Époux attentionné, il s'est fait expliquer la situation, a réfléchi un moment :  Et si tu utilisais ton compteur de rangs de tricot, tu sais, l'igno… l'espèce de grenouille avec un bouton ? Non, attends un peu… . Pas démonstratif mais prévenant, il a fouillé cinq minutes dans son barda, est revenu tout sourire :  Tiens, prends plutôt ça, c'est un compteur de manifestants. Ça monte à 9999 et c'est du costaud – qualité Préfecture .

La fin de la soirée ne nous regarde pas mais, le lendemain, le compteur conjugal était en bonne place sur le bureau de Maman et la fiche était devenue :  42 fois  pied gauche, pied droit  .

Décodage. La première version (très longue) de la fiche était une suite d'instructions où le motif  un pas  se répétait 42 fois, à lire de haut en bas. La deuxième version, presque 42 fois plus courte, était en revanche d'emploi un peu plus complexe : mettre le compteur à 1, faire un pas (=lire la fiche), augmenter le compteur de 1 (l'incrémenter de 1) et recommencer jusqu'à ce qu'il vaille 42.


Le jour où elle a dû confier le système à un stagiaire pas futé (le genre qui a oublié le début de sa phrase quand il arrive à la fin) Maman a compris qu'il fallait détailler :

  1. tu mets le compteur à 1 ;
  2. tu lis le reste de la fiche ;
  3. quand tu as fini, tu regardes le compteur : s'il affiche 42 tu t'arrêtes, sinon tu l'augmentes de 1 (oui, le bouton, là) et tu repars de la deuxième étape…
 … et tu ne me fais plus ch…  ajouta-t-elle in petto.

Décodage. Le croiriez-vous ? Ce système s'appelle une boucle logicielle.  Mettre le compteur à 1 , c'est initialiser la boucle (l'amorcer, la préparer).  Lire le reste de la fiche  c'est exécuter (lire) le corps de la boucle (reste de la fiche).  Regarder si le compteur affiche 42 , c'est le test de fin de boucle ou test d'arrêt, dont le résultat est vrai ou faux (ben oui…). Si le résultat est vrai (succès du test) on sort de la boucle (on a fini et passe à autre chose) sinon le résultat du test est un échec. Dans ce cas on  augmente le compteur (oui, le bouton, là)  puis  on recommence  : on exécute la ou les instructions de fin d'itération (ici, une seule instruction : le bouton) puis on entame l'itération suivante. Quant au compteur (de manifestants, reconverti en compteur de pas), hé bien c'est un … compteur ou, pour être tout à fait général, une variable de contrôle.


Un jour le stagiaire a cru astucieux de déplacer l'instruction  mettre le compteur à 1  dans le corps de boucle. Le lendemain matin, hâve et hagard, l'index crispé sur le bouton, il a fallu l'assommer avant de l'envoyer aux urgences – à l'autre bout du fil Norbert, renonçant à traverser le congélateur, s'était bien plus raisonnablement endormi le ventre creux.

Décodage. Plantage suivi d'un reboot : la boucle infinie suite à bidouille hasardeuse avait encore frappé. Les boucles c'est très commode mais ça demande d'avoir les idées claires quand on les rédige.


La Préfecture a du bon matériel, à preuve le fameux compteur. Si on tourne une certaine molette il fonctionne en sens inverse : après l'avoir réglé sur une valeur, chaque pression sur le bouton le fait diminuer de 1. Un compte à rebours, ni plus ni moins.

Et alors… et alors… (tous en chœur) Jea-ni-ne est ar-ri-véé-héhé Sans s'presser-héhé… Elle a fait un peu mumuse avec le compteur, songeuse. Elle a remarqué que, dans ce cas, il faisait  dinnng  quand il arrivait à zéro. Et elle a dit :  Tu sais quoi ? Si tu mettais ton compteur, au début, dans ce mode  à rebours  et que tu le règles à 41, tu n'aurais plus besoin de le regarder pour savoir si tu as fini : 42 coups d'œil économisés . Maman a un peu réfléchi (c'est déroutant, tout de même, non ? Sacrée Jeanine) puis elle s'est discrètement renseignée sur le prix d'un très bon champagne.

Décodage. D'abord : une boucle qui fait -1 (qui décrémente le compteur) marche aussi bien qu'une boucle qui fait +1 (qui incrémente ce même compteur). Ensuite : compter de zéro à n-1, ou de n-1 à zéro, produit autant d'étapes, d'itérations (n itérations) que compter de 1 à n et permet un test d'arrêt plus simple, donc plus rapide. Or ce test est exécuté à la fin de chaque étape, donc n fois, donc peut mériter d'être accéléré quand n est grand.


Je ne me rappelle plus très bien la manière dont on m'a enseigné les boucles, je sais seulement que c'était beaucoup plus rébarbatif.

Publicité
Retour à l'accueil
Partager cet article
Repost0
Pour être informé des derniers articles, inscrivez vous :
Commenter cet article
S
:-)<br /> Je crois que "GEB" est le signe de main de gang projeté par des passionnés dans le monde entier. http://northtownmud.org/docs/IPTM_Basic_Street_Gangs_Hand_Signs1.pdf
Répondre
É
<br /> <br /> Ils sont fous ! Ils sont tous fous ! :-D :-D<br /> <br /> <br /> Bonne année !<br /> <br /> <br /> <br />
S
Oui, mais je pense qu'une boucle *infinie* est moins inquiétante (ou au moins, plus prévisible) qu'une boucle *étrange.* Hic sunt dracones.<br /> (La "boucle étrange" a été défini par le mathématicien Douglas Hofstadter dans son livre Godel, Escher, Bach.<br /> http://fr.wikipedia.org/wiki/G%C3%B6del,_Escher,_Bach_:_Les_Brins_d%27une_Guirlande_%C3%89ternelle<br /> Le connaissez-vous? Un livre psychotrope et intoxiquant.)
Répondre
É
<br /> <br /> Très juste ! Et, oui, je connais ce (fascinant) livre, il est dans mes cartons de déménagement :)<br /> <br /> <br /> <br />
S
Saviez-vous que le siège social d'Apple Inc. est à 1 Boucle Infinie, Cupertino, California? (Un peu d'humour informatique.)<br /> http://www.quora.com/Whats-the-story-if-there-is-one-behind-Apples-Infinite-Loop-address-is-it-a-genuine-postal-address-or-a-customized-one
Répondre
É
<br /> <br /> Non, je ne le savais pas - et, Dieu sait pourquoi, cette adresse m'inquiète un peu!<br /> <br /> <br /> <br />
A
Ça me rappelle mes débuts sur un amstrad qui parlait Basic, avec les if et les goto... On dira ce qu'on voudra, il y a quelque chose d'exaltant à réussir à faire faire à un ordinateur, après quelques heures de suées chaudes et froides, quelque chose qu'un enfant comprendrait en quelques minutes. ;-)
Répondre
É
<br /> J'ai aussi ce genre de souvenir, quand ça marche enfin. L'exaltant n'est pas tant dans la difficulté ou non de ce que fait le programme (même un adulte peut comprendre, c'est dire...) que dans le<br /> fait de le voir exécuter par la machine. C'est assez proche de "lève-toi et marche", grisant et un peu dérisoire...<br /> <br /> <br />
A
"42", bon sang mais c'est bien sûr !<br /> <br /> Ok, 42 selon la police, mais 63 selon les syndicats, une fois de plus, on nous manipule !<br /> <br /> Eh voilà, et maintenant Jeanine va se picrater avec Bernardo. Ah ! Il est beau l'avenir de l'informatique…<br /> A propos de la rédaction des boucles, n'es-tu pas en train de taper sur le dos de Minisoft, en loucedé ?
Répondre
É
<br /> Bernardo ? Pas possible, tu as lu les épisodes suivants ?? Roohhh...<br /> ----<br /> Non, je ne tape pas spécialement sur le dos de Micromou (enfin, pas ici) : c'était juste pour faire sentir qu'il suffit de pas grand-chose pour écrire un programme pathologique. D'où l'intérêt de<br /> procéder progressivement, par étapes de petite taille et faciles à tester (modularité, programmation structurée, blablabla...)<br /> <br /> <br />