{"id":40208,"date":"2020-02-01T06:04:35","date_gmt":"2020-02-01T03:04:35","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/kak-nauchit-preodolevat-trudnosti-a-zaodno-i-pisat-czikly"},"modified":"2020-02-01T06:04:35","modified_gmt":"2020-02-01T03:04:35","slug":"kak-nauchit-preodolevat-trudnosti-a-zaodno-i-pisat-czikly","status":"publish","type":"post","link":"https:\/\/prohoster.info\/fr\/blog\/kak-nauchit-preodolevat-trudnosti-a-zaodno-i-pisat-czikly","title":{"rendered":"Comment apprendre \u00e0 surmonter les difficult\u00e9s tout en \u00e9crivant des boucles","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Bien que nous parlions d'un sujet de base, cet article est r\u00e9dig\u00e9 pour des professionnels exp\u00e9riment\u00e9s. L'objectif est de montrer quelles erreurs commettent les d\u00e9butants en programmation. Pour les d\u00e9veloppeurs praticiens, ces probl\u00e8mes sont d\u00e9j\u00e0 r\u00e9solus, oubli\u00e9s ou m\u00eame compl\u00e8tement ignor\u00e9s. Cet article peut \u00eatre utile si vous devez un jour aider quelqu'un sur ce sujet. Des parall\u00e8les sont tir\u00e9s des mat\u00e9riaux de divers livres sur la programmation de authors tels que Schildt, Stroustrup et Okulov.<\/p>\n<p>Le sujet des boucles a \u00e9t\u00e9 choisi car il est souvent le point de d\u00e9part o\u00f9 beaucoup de gens abandonnent lors de l'apprentissage de la programmation.<\/p>\n<p>Cette m\u00e9thodologie est destin\u00e9e aux \u00e9tudiants moins performants. En g\u00e9n\u00e9ral, les \u00e9tudiants forts ne se retrouvent pas bloqu\u00e9s \u00e0 ce stade et il n'est pas n\u00e9cessaire d'inventer des m\u00e9thodologies sp\u00e9ciales pour eux. L'objectif secondaire de l'article est de faire passer cette m\u00e9thodologie de la cat\u00e9gorie \u00ab fonctionne pour tous les \u00e9tudiants, mais seulement avec un enseignant \u00bb \u00e0 celle de \u00ab fonctionne pour tous les \u00e9tudiants, tous les enseignants \u00bb. Je ne pr\u00e9tends pas \u00e0 l'originalit\u00e9 absolue. Si vous appliquez d\u00e9j\u00e0 une m\u00e9thodologie similaire pour enseigner ce sujet, n'h\u00e9sitez pas \u00e0 partager en quoi votre version diff\u00e8re. Si vous d\u00e9cidez de l'appliquer, faites-nous savoir comment cela s'est pass\u00e9. Si une m\u00e9thodologie similaire est d\u00e9crite dans un livre, merci de mentionner le titre.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nJ'ai affin\u00e9 cette m\u00e9thodologie pendant 4 ans, en travaillant individuellement avec des \u00e9tudiants de niveaux vari\u00e9s. En tout, pr\u00e8s d'une cinquantaine d'\u00e9tudiants et deux mille heures de cours. Au d\u00e9but, les \u00e9tudiants restaient coinc\u00e9s sur ce sujet et finissaient par abandonner. Apr\u00e8s chaque \u00e9tudiant, la m\u00e9thodologie et les mat\u00e9riaux \u00e9taient ajust\u00e9s. Au cours de la derni\u00e8re ann\u00e9e, les \u00e9tudiants ne demeurent plus bloqu\u00e9s sur cette th\u00e9matique, c'est pourquoi j'ai d\u00e9cid\u00e9 de partager mes travaux.<\/p>\n<h4>Pourquoi tant de lettres ? Les boucles, c'est \u00e9l\u00e9mentaire !<\/h4>\n<p>\nComme je l'ai d\u00e9j\u00e0 mentionn\u00e9, pour les d\u00e9veloppeurs praticiens et les \u00e9tudiants forts, la complexit\u00e9 du concept de boucles peut \u00eatre sous-estim\u00e9e. Par exemple, on peut organiser une longue conf\u00e9rence, voir des t\u00eates hocher et des yeux intelligents. Mais lorsqu'il s'agit de r\u00e9soudre un probl\u00e8me, c'est le blocage et des probl\u00e8mes inexplicables qui surviennent. Apr\u00e8s la conf\u00e9rence, les \u00e9tudiants n'ont s\u00fbrement acquis qu'une compr\u00e9hension partielle. La situation est aggrav\u00e9e par le fait que les \u00e9tudiants n'arrivent pas \u00e0 exprimer eux-m\u00eames o\u00f9 r\u00e9side leur m\u00e9prise.<br \/>\nUn jour, j'ai r\u00e9alis\u00e9 que les \u00e9tudiants voyaient mes exemples comme des hi\u00e9roglyphes. C'est-\u00e0-dire comme des morceaux de texte indivisibles o\u00f9 il fallait \u00e9crire une sorte de lettre \u00ab magique \u00bb pour que cela fonctionne.<br \/>\nParfois, je remarquais que les \u00e9tudiants pensaient qu'il leur fallait <i>une autre<\/i> construction que je n'avais tout simplement pas encore expliqu\u00e9e. Pourtant, il suffisait de modifier l\u00e9g\u00e8rement l'exemple pour r\u00e9soudre le probl\u00e8me.<\/p>\n<p>C'est pourquoi j'en suis venu \u00e0 l'id\u00e9e qu'il fallait se concentrer non pas sur la syntaxe des expressions, mais sur le concept de refactorisation du code r\u00e9p\u00e9titif \u00e0 l'aide de boucles. Une fois que les \u00e9l\u00e8ves ma\u00eetrisent cette id\u00e9e, n'importe quelle syntaxe peut \u00eatre assimil\u00e9e par de petits exercices.<\/p>\n<h4>\u00c0 qui et pourquoi j'enseigne<\/h4>\n<p>\n\u00c9tant donn\u00e9 qu'il n'y a pas d'examens d'entr\u00e9e, il peut y avoir dans les cours des \u00e9tudiants \u00e0 la fois forts et tr\u00e8s faibles. Vous pouvez en apprendre davantage sur mes \u00e9tudiants dans l'article <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/350360\/\">Portrait des auditeurs des cours du soir<\/a><\/noindex><br \/>\nJe voulais que tout le monde puisse apprendre la programmation s'il le d\u00e9sirait.<br \/>\nMes cours se d\u00e9roulent en individuel et l'\u00e9tudiant paie de son propre argent pour chaque s\u00e9ance. On pourrait penser que les \u00e9tudiants chercheraient \u00e0 optimiser leurs co\u00fbts et \u00e0 demander le minimum. Cependant, les gens assistent \u00e0 des cours en pr\u00e9sentiel avec un enseignant vivant non pas seulement pour acqu\u00e9rir des connaissances, mais pour avoir la certitude de ce qu'ils ont r\u00e9ussi \u00e0 assimiler, pour ressentir des progr\u00e8s et recevoir l'approbation d'un expert (enseignant). Si les \u00e9tudiants ne ressentent pas de progr\u00e8s dans leur apprentissage, ils partiront. En g\u00e9n\u00e9ral, on peut structurer les cours de mani\u00e8re \u00e0 ce que les \u00e9tudiants ressentent un progr\u00e8s dans le nombre de constructions famili\u00e8res. Cela signifie que l'on commence par \u00e9tudier en d\u00e9tail la boucle while, puis la boucle for, ensuite do while, et voil\u00e0, nous avons un cours qui dure mille et une nuits, o\u00f9 pendant deux mois, on n'\u00e9tudie que les boucles, avec pour r\u00e9sultat un \u00e9tudiant qui a r\u00e9dig\u00e9 la biblioth\u00e8que standard sous dict\u00e9e. Cependant, pour r\u00e9soudre des probl\u00e8mes pratiques, il faut non seulement conna\u00eetre le mat\u00e9riau, mais aussi faire preuve d'autonomie dans son application et sa recherche de nouvelles informations. C'est pourquoi, pour les cours en pr\u00e9sentiel, je consid\u00e8re qu'il est juste de suivre le principe d'apprendre le minimum et d'encourager l'\u00e9tude autonome des nuances et des sujets connexes. Dans le sujet sur les boucles, je consid\u00e8re que le minimum est la construction while. C'est sur cela que l'on peut comprendre le principe. En connaissant le principe, on peut \u00e9galement ma\u00eetriser for et do-while de mani\u00e8re autonome.<\/p>\n<p>Pour aider les \u00e9tudiants en difficult\u00e9 \u00e0 ma\u00eetriser le sujet, il ne suffit pas de d\u00e9crire la syntaxe. Il faut offrir davantage de t\u00e2ches simples mais vari\u00e9es et d\u00e9tailler les exemples. En fin de compte, la vitesse d'apprentissage est limit\u00e9e par la capacit\u00e9 de l'\u00e9l\u00e8ve \u00e0 transformer des expressions et \u00e0 rechercher des motifs. Pour les \u00e9tudiants plus vifs, la plupart des t\u00e2ches s'av\u00e9reront ennuyeuses. Lors des cours avec eux, il n'est pas n\u00e9cessaire d'exiger la r\u00e9solution de 100 % des probl\u00e8mes. Vous pouvez consulter mon mat\u00e9riel sur <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/AKryukov92\/programming-basics\">mon GitHub<\/a><\/noindex>. Pourtant, le d\u00e9p\u00f4t ressemble plut\u00f4t \u00e0 un grimoire de sorcier \u2014 personne, sauf moi, ne comprendra o\u00f9 se trouve quoi, et si l'examen \u00e9choue, on pourrait en devenir fou.<\/p>\n<h4>La m\u00e9thode est ax\u00e9e sur la pratique.<\/h4>\n<p>\nLa th\u00e9orie est expliqu\u00e9e \u00e0 l'aide de la r\u00e9solution de probl\u00e8mes. Dans les cours d'introduction \u00e0 la programmation, o\u00f9 l'on \u00e9tudie les structures conditionnelles et les boucles, il n'est tout simplement pas possible de tenir une conf\u00e9rence utile sur un seul sujet pendant une heure. 15 \u00e0 20 minutes suffisent pour expliquer le concept. Les principales difficult\u00e9s surviennent lors de l'ex\u00e9cution des t\u00e2ches pratiques.<br \/>\nLes enseignants d\u00e9butants peuvent aborder les op\u00e9rateurs, les structures conditionnelles, les boucles et les tableaux en une seule le\u00e7on. Cependant, leurs \u00e9tudiants rencontreront des difficult\u00e9s pour assimiler ces informations.<br \/>\nIl ne suffit pas seulement de pr\u00e9senter le mat\u00e9riel, il faut \u00e9galement s'assurer que les auditeurs l'ont compris.<\/p>\n<p>La ma\u00eetrise du sujet se d\u00e9termine par la fa\u00e7on dont l'\u00e9tudiant r\u00e9ussit son travail ind\u00e9pendant. <br \/>\nSi l'\u00e9tudiant parvient \u00e0 r\u00e9soudre le probl\u00e8me sur le sujet sans l'aide du professeur, cela signifie que le sujet a \u00e9t\u00e9 compris. Pour garantir une auto-\u00e9valuation, chaque t\u00e2che est accompagn\u00e9e d'un tableau de sc\u00e9narios de test. Les t\u00e2ches suivent un ordre bien d\u00e9fini. Il est d\u00e9conseill\u00e9 de sauter des t\u00e2ches. Si la t\u00e2che actuelle est trop difficile, il est inutile de passer \u00e0 la suivante. Elle sera encore plus difficile. Pour permettre \u00e0 l'\u00e9tudiant de ma\u00eetriser la t\u00e2che complexe actuelle, plusieurs strat\u00e9gies lui sont expliqu\u00e9es \u00e0 l'aide du premier probl\u00e8me. En r\u00e9alit\u00e9, tout le contenu du sujet se r\u00e9sume \u00e0 des m\u00e9thodes pour surmonter les difficult\u00e9s. Les boucles sont plut\u00f4t un effet secondaire.<\/p>\n<p>Le premier probl\u00e8me est toujours un exemple. Le second diff\u00e8re l\u00e9g\u00e8rement et est effectu\u00e9 \u00ab ind\u00e9pendamment \u00bb imm\u00e9diatement apr\u00e8s le premier sous la supervision du professeur. Tous les probl\u00e8mes suivants visent \u00e0 attirer l'attention sur de petites subtilit\u00e9s qui peuvent pr\u00eater \u00e0 confusion.<\/p>\n<p>L'explication d'un exemple prend la forme d'un dialogue, o\u00f9 l'\u00e9tudiant doit appeler la r\u00e9tropropagation et la validation crois\u00e9e pour s'assurer qu'il a assimil\u00e9 la mati\u00e8re.<\/p>\n<p>Je vais \u00eatre banal et dire que le premier exemple sur le sujet est tr\u00e8s important. Avec du mat\u00e9riel pour un travail autonome approfondi, on peut corriger l'oubli du premier exemple. S'il n'y a rien d'autre que cet exemple, l'\u00e9tudiant ne r\u00e9ussira probablement pas \u00e0 ma\u00eetriser le sujet.<\/p>\n<h4>While ou for ?<\/h4>\n<p>\nUne des questions controvers\u00e9es est le choix de la structure pour l'exemple : while ou for. Un jour, un ami, d\u00e9veloppeur pratiquant sans exp\u00e9rience d'enseignement, m'a pass\u00e9 une heure \u00e0 me convaincre que la boucle for est la plus simple \u00e0 comprendre. Ses arguments se r\u00e9sumaient \u00e0 \"tout y est clair et rang\u00e9.\" Cependant, la v\u00e9ritable racine des difficult\u00e9s pour les v\u00e9ritables d\u00e9butants r\u00e9side dans l'id\u00e9e m\u00eame de boucle, et non dans son \u00e9criture. Si une personne ne comprend pas cette id\u00e9e, elle rencontrera des difficult\u00e9s avec la syntaxe. D\u00e8s que l'id\u00e9e est comprise, les probl\u00e8mes de mise en forme du code disparaissent d'eux-m\u00eames.<\/p>\n<p>Dans mes supports, le sujet des boucles vient apr\u00e8s celui des branchements. La ressemblance ext\u00e9rieure entre if et while permet d'\u00e9tablir une analogie directe : \u00ab lorsque la condition dans l'en-t\u00eate est vraie, le corps est ex\u00e9cut\u00e9 \u00bb. La particularit\u00e9 de la boucle est que le corps est ex\u00e9cut\u00e9 plusieurs fois.<\/p>\n<p>Mon deuxi\u00e8me argument est que while n\u00e9cessite moins de mise en forme que for. Moins de mise en forme signifie moins d'erreurs stupides dues \u00e0 des virgules et parenth\u00e8ses manquantes. Les d\u00e9butants n'ont pas encore assez d\u00e9velopp\u00e9 leur attention et leur minutie pour \u00e9viter automatiquement les erreurs de syntaxe.<br \/>\nLe troisi\u00e8me argument est que dans de nombreux bons livres, while est expliqu\u00e9 en premier.<\/p>\n<p>Si l'\u00e9tudiant parvient facilement \u00e0 transformer des expressions, on peut passer rapidement \u00e0 for. L'\u00e9tudiant choisira ensuite ce qu'il pr\u00e9f\u00e8re. En revanche, si les transformations posent des difficult\u00e9s, il vaut mieux ne pas distraire son attention. Qu'il r\u00e9solve d'abord tout avec while. Une fois qu'il aura ma\u00eetris\u00e9 le sujet des boucles, on pourra r\u00e9\u00e9crire les solutions pour travailler la transformation de while en for.<br \/>\nLes boucles avec post-condition sont plut\u00f4t rares. Je ne perds pas de temps avec \u00e7a. Si l'\u00e9tudiant a compris les id\u00e9es d'identification des mod\u00e8les et de transformation des expressions, il pourra s'en sortir sans mon aide.<\/p>\n<p>Lors de la d\u00e9monstration du premier exemple \u00e0 des \u00e9tudiants brillants, je souligne que dans le premier exemple, il est important de noter non seulement la solution mais aussi toute la cha\u00eene d'actions qui a conduit au r\u00e9sultat. Les \u00e9tudiants paresseux peuvent n\u00e9gliger les \u00e9crits et ne conserver que l'algorithme final. Il faut les convaincre qu'un jour, ils seront confront\u00e9s \u00e0 une probl\u00e9matique complexe. Pour la r\u00e9soudre, il leur faudra proc\u00e9der \u00e9tape par \u00e9tape comme dans cet exemple. C'est pourquoi il est essentiel de fixer toutes les \u00e9tapes. Dans les exercices suivants, on ne pourra laisser que la version finale de la solution.<\/p>\n<p>L'id\u00e9e principale de l'automatisation est que nous confions \u00e0 l'ordinateur le travail routinier \u00e0 la place de l'homme. L'une des techniques de base consiste \u00e0 \u00e9crire des boucles. Elle est utilis\u00e9e lorsque plusieurs actions identiques et r\u00e9p\u00e9t\u00e9es doivent \u00eatre ex\u00e9cut\u00e9es en s\u00e9rie dans le programme.<\/p>\n<h4>L'explicite est mieux que l'implicite<\/h4>\n<p>\nCela peut sembler \u00eatre une bonne id\u00e9e, dans le premier exercice sur les boucles, d'afficher \u00e0 l'\u00e9cran une phrase identique plusieurs fois. Par exemple :<\/p>\n<blockquote><p>Hourra, \u00e7a fonctionne !<br \/>\nHourra, \u00e7a fonctionne !<br \/>\nHourra, \u00e7a fonctionne !<br \/>\nHourra, \u00e7a fonctionne !<br \/>\nHourra, \u00e7a fonctionne !<br \/>\nHourra, \u00e7a fonctionne !<br \/>\nHourra, \u00e7a fonctionne !<br \/>\nHourra, \u00e7a fonctionne !\n<\/p><\/blockquote>\n<p>\nCette option est mauvaise car la valeur du compteur n'est pas visible \u00e0 l'\u00e9cran. C'est un probl\u00e8me pour les d\u00e9butants. Il ne faut pas sous-estimer cela. Au d\u00e9part, cet exercice \u00e9tait le premier, et celui d'afficher une s\u00e9rie de nombres par ordre croissant \u00e9tait le deuxi\u00e8me. Il a fallu introduire des termes suppl\u00e9mentaires tels que \u00ab boucle N fois \u00bb et \u00ab boucle de A \u00e0 B \u00bb, qui sont en r\u00e9alit\u00e9 identiques. Pour \u00e9viter de cr\u00e9er des entit\u00e9s superflues, j'ai d\u00e9cid\u00e9 de ne montrer que l'exemple d'affichage d'une s\u00e9rie de nombres. Peu de gens parviennent sans pr\u00e9paration \u00e0 garder un compteur en t\u00eate et \u00e0 mod\u00e9liser le comportement du programme mentalement. Certains \u00e9tudiants sont confront\u00e9s pour la premi\u00e8re fois \u00e0 la mod\u00e9lisation \u00ab dans leur t\u00eate \u00bb pr\u00e9cis\u00e9ment sur le sujet des boucles.<br \/>\nApr\u00e8s un certain temps de pratique, je donne la t\u00e2che de r\u00e9p\u00e9ter le m\u00eame texte \u00e0 r\u00e9soudre de mani\u00e8re autonome. Si l'on commence par un compteur visible, puis un invisible, les \u00e9tudiants rencontrent moins de probl\u00e8mes. Parfois, il suffit de donner l'indice \u00ab ne pas \u00e9crire le compteur \u00e0 l'\u00e9cran \u00bb.<\/p>\n<h4>Comment cela est-il expliqu\u00e9 chez les autres ?<\/h4>\n<p>\nDans la plupart des mat\u00e9riaux d'apprentissage en ligne, la syntaxe des boucles est donn\u00e9e dans le cadre d'une \u00ab le\u00e7on \u00bb. Par exemple, sur developer.mozilla.org (actuellement), la boucle while est accompagn\u00e9e de plusieurs autres constructions. Cependant, seules les constructions elles-m\u00eames sont fournies sous forme de mod\u00e8les. Le r\u00e9sultat de leur ex\u00e9cution est d\u00e9crit par des mots, et l'illustration est absente. \u00c0 mon avis, cette approche r\u00e9duit \u00e0 n\u00e9ant l'utilit\u00e9 de tels mat\u00e9riaux. L'\u00e9tudiant peut r\u00e9\u00e9crire le code et l'ex\u00e9cuter lui-m\u00eame, mais une r\u00e9f\u00e9rence pour comparaison est toujours n\u00e9cessaire. Comment savoir si un exemple a \u00e9t\u00e9 correctement r\u00e9\u00e9crit, sans rien avec quoi comparer le r\u00e9sultat ?<br \/>\nLorsqu'un seul mod\u00e8le est fourni, sans exemple, il devient encore plus difficile pour l'\u00e9tudiant. Comment \u00eatre s\u00fbr que les fragments de code sont correctement dispos\u00e9s dans le mod\u00e8le ? On peut essayer d'\u00e9crire <i>d'une mani\u00e8re ou d'une autre<\/i>, puis de l'ex\u00e9cuter. Mais s'il n'y a pas de r\u00e9f\u00e9rence pour comparer le r\u00e9sultat, l'ex\u00e9cution ne sera pas d'une grande aide non plus.<\/p>\n<p>Dans le cours de C++ sur l'intuition, la syntaxe de la boucle est enterr\u00e9e \u00e0 la troisi\u00e8me page de la le\u00e7on 4 sur le sujet \u00ab op\u00e9rateurs \u00bb. Lors de l'explication de la syntaxe des boucles, une attention particuli\u00e8re est port\u00e9e au terme \u00ab op\u00e9rateur \u00bb. Ce terme est pr\u00e9sent\u00e9 sous forme d'un ensemble de faits tels que \u00ab le symbole ; c'est un op\u00e9rateur \u00bb, \u00ab {} est un op\u00e9rateur composite \u00bb, \u00ab le corps de la boucle doit \u00eatre un op\u00e9rateur \u00bb. Je n'aime pas cette approche car elle cache en quelque sorte des relations importantes derri\u00e8re un seul terme. L'analyse du code source d'un programme au niveau des termes est n\u00e9cessaire pour les d\u00e9veloppeurs de compilateurs dans la mise en \u0153uvre de la sp\u00e9cification du langage, mais pas du tout pour les \u00e9tudiants dans un premier temps. Les d\u00e9butants en programmation n'ont souvent pas la minutie n\u00e9cessaire pour porter une attention aussi soutenue aux termes. Peu de gens retiennent et comprennent de nouveaux mots du premier coup. Pratiquement personne ne peut appliquer correctement un terme qu'il vient d'apprendre. Ainsi, les \u00e9tudiants rencontrent de nombreuses erreurs telles que \u00ab j'ai \u00e9crit while(a&lt;7);{, et le programme ne fonctionne pas \u00bb.<br \/>\n\u00c0 mon avis, il est pr\u00e9f\u00e9rable de donner d'abord la syntaxe de la construction imm\u00e9diatement avec des accolades. L'option sans accolades ne doit \u00eatre expliqu\u00e9e que si l'\u00e9l\u00e8ve pose une question concr\u00e8te \u00ab pourquoi ici sans accolades et \u00e7a fonctionne \u00bb.<\/p>\n<p>Dans le livre d'Okulov \u00ab Les Fondements de la programmation \u00bb de 2012, l'introduction aux boucles commence par le mod\u00e8le for, suivi de recommandations pour son utilisation, puis s\u2019encha\u00eene avec une section exp\u00e9rimentale. Je comprends que ce livre a \u00e9t\u00e9 \u00e9crit pour cette minorit\u00e9 d'\u00e9l\u00e8ves tr\u00e8s talentueux qui viennent rarement \u00e0 mes cours.<\/p>\n<p>Dans les livres populaires, on indique toujours le r\u00e9sultat des fragments de code. Par exemple, dans le livre de Schildt \u00ab Java 8. Guide complet \u00bb publi\u00e9 en 2015. On commence par donner le mod\u00e8le, puis un exemple de programme et imm\u00e9diatement apr\u00e8s \u2014 le r\u00e9sultat de l'ex\u00e9cution.<\/p>\n<blockquote><p>Prenons comme exemple une boucle while qui effectue un compte \u00e0 rebours<br \/>\n\u00e0 partir de 10, affichant exactement 10 lignes de \u00ab battements \u00bb : <\/p>\n<pre><code class=\"java\">\/\/\u041f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0446\u0438\u043a\u043b\u0430 while\nclass While {\n    public static void main(String args []) {\n        int n = 10;\n        while (n &gt; 0) {\n            System.out.println(&quot;\u0442\u0430\u043a\u0442 &quot; + n);\n            n--;\n        }\n    }\n}<\/code><\/pre>\n<p>\nApr\u00e8s son lancement, ce programme affiche dix \u00ab battements \u00bb de la mani\u00e8re suivante :<br \/>\n<code>tact 10<br \/>\ntact 9<br \/>\ntact 8<br \/>\ntact 7<br \/>\ntact 6<br \/>\ntact 5<br \/>\ntact 4<br \/>\ntact 3<br \/>\ntact 2<br \/>\ntact 1<\/code><\/p><\/blockquote>\n<p>\nL'approche consistant \u00e0 d\u00e9crire le mod\u00e8le, l'exemple de programme et le r\u00e9sultat de ce programme est \u00e9galement utilis\u00e9e dans le livre \u00ab Javascript pour les enfants \u00bb et dans le cours js sur w3schools.com. Le format de la page web permet m\u00eame de rendre cet exemple interactif.<\/p>\n<p>Dans le livre de Stroustrup \u00ab Principes et pratique avec C++ \u00bb de 2016, l'auteur va encore plus loin. Tout d'abord, il explique quel r\u00e9sultat doit \u00eatre obtenu, puis montre le texte du programme. De plus, comme exemple, il ne prend pas juste un programme al\u00e9atoire, mais offre un aper\u00e7u historique. Cela aide \u00e0 attirer l'attention sur le fait que \u00ab Regarde, ce n'est pas juste un texte inutile. Tu vois quelque chose de significatif \u00bb.<\/p>\n<blockquote><p>Prenons comme exemple l'it\u00e9ration de la premi\u00e8re programme ex\u00e9cut\u00e9 sur une machine \u00e0 programme stock\u00e9 (EDSAC). Elle a \u00e9t\u00e9 \u00e9crite par David Wheeler dans le laboratoire informatique de l'Universit\u00e9 de Cambridge (Cambridge University, Angleterre) le 6 mai 1949. Ce programme calcule et imprime une simple liste de carr\u00e9s.<br \/>\n<code>0 0<br \/>\n1 1<br \/>\n2 4<br \/>\n3 9<br \/>\n4 16<br \/>\n...<br \/>\n98 9604<br \/>\n99 9801<\/code><br \/>\nIci, chaque ligne contient un nombre, suivi d'un signe de tabulation ('t') et du carr\u00e9 de ce nombre. La version de ce programme en C++ est la suivante :<\/p>\n<pre><code class=\"cpp\">\/\/\u0412\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c \u0438 \u0440\u0430\u0441\u043f\u0435\u0447\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043e\u0432 \u0447\u0438\u0441\u0435\u043b 0-99\nint main()\n{\n    int i = 0; \/\/ \u041d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0441 \u043d\u0443\u043b\u044f\n    while(i &lt; 100){\n        cout &lt;&lt; i &lt;&lt; 't' &lt;&lt; square(i) &lt;&lt; 'n';\n        ++i;\n    }\n}<\/code><\/pre>\n<\/blockquote>\n<p>\nIl est int\u00e9ressant de noter que le mod\u00e8le de syntaxe n'est pas d\u00e9crit dans ce livre. Stroustrup, dans le manuel de l'instructeur (<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/349342\/\">traduction<\/a><\/noindex>) souligne qu'il respecte l'intelligence de ses \u00e9tudiants. Peut-\u00eatre que la capacit\u00e9 \u00e0 identifier le mod\u00e8le dans plusieurs exemples est consid\u00e9r\u00e9e comme une manifestation de cette intelligence.<\/p>\n<h4>Comme je l'explique moi-m\u00eame<\/h4>\n<p>\nL'approche de Stroustrup : d\u00e9crire le r\u00e9sultat, ensuite r\u00e9soudre le probl\u00e8me, puis analyser de mani\u00e8re autonome par l'\u00e9tudiant \u2014 semble \u00eatre la plus r\u00e9fl\u00e9chie. J'ai donc d\u00e9cid\u00e9 de me baser sur celle-ci, mais d'expliquer \u00e0 travers un exemple moins historique \u2014 le probl\u00e8me de l'affichage d'une \u00ab table des mati\u00e8res \u00bb. Cela cr\u00e9e une ancre reconnaissable, permettant de dire ensuite \u00ab souviens-toi du probl\u00e8me de la table des mati\u00e8res \u00bb pour que les \u00e9tudiants s'en rappellent pr\u00e9cis\u00e9ment. Dans mon exemple, j'ai essay\u00e9 de pr\u00e9venir deux des id\u00e9es fausses les plus courantes. J'en parlerai plus en d\u00e9tail ensuite.<\/p>\n<blockquote><p>Avec ce probl\u00e8me, nous nous familiarisons avec les techniques de r\u00e9solution de probl\u00e8mes complexes. La solution initiale doit \u00eatre faite de mani\u00e8re primitive et simple. Ensuite, on peut r\u00e9fl\u00e9chir \u00e0 la mani\u00e8re d'am\u00e9liorer cette solution.<br \/>\n<code>Introduction<br \/>\nChapitre 1<br \/>\nChapitre 2<br \/>\nChapitre 3<br \/>\nChapitre 4<br \/>\nChapitre 5<br \/>\nChapitre 6<br \/>\nChapitre 7<br \/>\nConclusion<\/code><\/p><\/blockquote>\n<p>\nD'apr\u00e8s mes observations, l'approche \u00ab mod\u00e8le-exemple-r\u00e9sultat \u00bb dans diff\u00e9rentes combinaisons conduit n\u00e9anmoins \u00e0 ce que les \u00e9tudiants per\u00e7oivent la boucle comme un id\u00e9ogramme. Cela se manifestait par le fait qu'ils ne comprenaient pas pourquoi il fallait \u00e9crire une condition, comment choisir entre i++ et i--, et d'autres choses qui semblent pourtant \u00e9videntes. Pour \u00e9viter ces malentendus, l'approche pour raconter les boucles doit souligner le sens de la r\u00e9p\u00e9tition des m\u00eames actions et seulement ensuite \u2014 leur pr\u00e9sentation \u00e0 l'aide de la construction. Par cons\u00e9quent, avant de donner la syntaxe de la boucle, il faut r\u00e9soudre la t\u00e2che \u00ab directement \u00bb. La solution primitive \u00e0 la t\u00e2che de contenu semble \u00eatre la suivante :<\/p>\n<pre><code class=\"cs\">Console.WriteLine(\"Introduction\");\nConsole.WriteLine(\"Chapitre 1\");\nConsole.WriteLine(\"Chapitre 2\");\nConsole.WriteLine(\"Chapitre 3\");\nConsole.WriteLine(\"Chapitre 4\");\nConsole.WriteLine(\"Chapitre 5\");\nConsole.WriteLine(\"Chapitre 6\");\nConsole.WriteLine(\"Chapitre 7\");\nConsole.WriteLine(\"Conclusion\");\n<\/code><\/pre>\n<p>\nComment peut-on l'am\u00e9liorer ?<br \/>\nRemplacer les actions r\u00e9p\u00e9titives par une boucle.<br \/>\nQuelles actions se r\u00e9p\u00e8tent ici cons\u00e9cutivement sans changements ?<br \/>\nIl n'y en a pas dans ce fragment. Cependant, les commandes pour afficher le mot \u00ab Chapitre \u00bb avec un num\u00e9ro se ressemblent fortement.<br \/>\nAinsi, la prochaine \u00e9tape consiste \u00e0 chercher la diff\u00e9rence entre les fragments. Ce n'est que dans ce probl\u00e8me que tout est \u00e9vident, ensuite, il s'agira non pas de commandes individuelles mais de blocs de code de 5 lignes ou plus. Il faudra chercher, non seulement dans la liste des commandes, mais dans des constructions de branchement ou de boucle.<br \/>\nDans l'exemple, la diff\u00e9rence entre les commandes r\u00e9side dans le nombre qui suit le mot \u00ab Chapitre \u00bb.<br \/>\nUne fois la diff\u00e9rence trouv\u00e9e, il faut comprendre la r\u00e9gularit\u00e9 des changements. Le fragment distinct est un nombre ? Augmente-t-il ou diminue-t-il constamment ? Comment la valeur du nombre change-t-elle entre deux commandes c\u00f4te \u00e0 c\u00f4te ?<br \/>\nDans cet exemple, le nombre apr\u00e8s le mot \u00ab Chapitre \u00bb augmente par paliers de 1. La diff\u00e9rence a \u00e9t\u00e9 trouv\u00e9e, la r\u00e9gularit\u00e9 a \u00e9t\u00e9 identifi\u00e9e. Vous pouvez maintenant remplacer la partie variable par une variable.<br \/>\nVous devez d\u00e9clarer une telle variable avant le premier des fragments r\u00e9p\u00e9titifs. Cette variable est g\u00e9n\u00e9ralement appel\u00e9e i ou j, ou d'une mani\u00e8re plus d\u00e9velopp\u00e9e. Sa valeur initiale doit \u00eatre \u00e9gale \u00e0 la premi\u00e8re valeur affich\u00e9e \u00e0 l'\u00e9cran. Dans cet exemple, la premi\u00e8re valeur est 1. <br \/>\nQuelle valeur initiale faut-il prendre pour afficher la s\u00e9rie de nombres \u00ab 100, 101, 102, 103, 104, 105 \u00bb ?<br \/>\nDans cette s\u00e9rie, le premier nombre est 100.<br \/>\nApr\u00e8s chaque commande d'affichage, il faut augmenter la valeur de cette variable de 1. Cette unit\u00e9 correspond \u00e0 l'incr\u00e9ment.<br \/>\nQuel sera l'incr\u00e9ment pour la s\u00e9rie de nombres \u00ab 100, 102, 104, 106 \u00bb ?<br \/>\nDans cette s\u00e9rie, l'incr\u00e9ment est 2.<br \/>\nApr\u00e8s avoir remplac\u00e9 le fragment variable par une variable, le code ressemblera \u00e0 ceci :<\/p>\n<pre><code class=\"cs\">Console.WriteLine(\"Introduction\");\nint i;\ni = 0;\nConsole.WriteLine(\"Chapitre \" + i);\ni = i + 1;\nConsole.WriteLine(\"Chapitre \" + i);\ni = i + 1;\nConsole.WriteLine(\"Chapitre \" + i);\ni = i + 1;\nConsole.WriteLine(\"Chapitre \" + i);\ni = i + 1;\nConsole.WriteLine(\"Chapitre \" + i);\ni = i + 1;\nConsole.WriteLine(\"Chapitre \" + i);\ni = i + 1;\nConsole.WriteLine(\"Chapitre \" + i);\ni = i + 1;\nConsole.WriteLine(\"Conclusion\");\n<\/code><\/pre>\n<p>\nApr\u00e8s avoir appliqu\u00e9 la m\u00e9thode \u00ab exprimer la r\u00e9gularit\u00e9 par une variable \u00bb, le code se compose de plusieurs groupes d'actions identiques, qui se suivent. Les actions r\u00e9p\u00e9titives peuvent maintenant \u00eatre remplac\u00e9es par une boucle.<\/p>\n<p>La s\u00e9quence de r\u00e9solution d'une t\u00e2che o\u00f9 il faut utiliser des boucles se compose des \u00e9tapes suivantes :<\/p>\n<ol>\n<li>R\u00e9soudre \u00ab directement \u00bb avec de nombreuses commandes s\u00e9par\u00e9es<\/li>\n<li>Trouver la r\u00e9gularit\u00e9<\/li>\n<li>Exprimer la r\u00e9gularit\u00e9 par une variable<\/li>\n<li>Formuler sous forme de boucle<\/li>\n<\/ol>\n<p>Ensuite, de nouveaux termes sont introduits pour que l'\u00e9tudiant ne se retrouve pas dans la situation \u00ab je comprends tout, mais je ne peux pas le dire \u00bb :<br \/>\n \u2014 compteur \u2014 toujours une variable qui est n\u00e9cessaire pour suivre le nombre d'\u00e9tapes de la boucle. G\u00e9n\u00e9ralement un nombre entier, qui est compar\u00e9 \u00e0 une limite.<br \/>\n \u2014 pas du compteur \u2014 description de la r\u00e9gularit\u00e9 du changement du compteur.<br \/>\n \u2014 limite \u2014 nombre ou variable avec laquelle le compteur est compar\u00e9 pour que l'algorithme soit fini. La valeur du compteur change de mani\u00e8re \u00e0 se rapprocher de la limite.<br \/>\n \u2014 corps de la boucle \u2014 ensemble de commandes qui vont \u00eatre r\u00e9p\u00e9t\u00e9es. Quand on dit \u00ab la commande est \u00e9crite \u00e0 l'int\u00e9rieur de la boucle \u00bb, il s'agit pr\u00e9cis\u00e9ment du corps.<br \/>\n \u2014 it\u00e9ration de la boucle \u2014 ex\u00e9cution unique du corps de la boucle.<br \/>\n \u2014 condition de boucle \u2014 une expression logique qui d\u00e9termine si une autre it\u00e9ration sera ex\u00e9cut\u00e9e. (Il peut y avoir confusion avec les constructions de branchement.)<br \/>\nIl faut \u00eatre pr\u00eat \u00e0 ce que, dans un premier temps, les \u00e9tudiants utilisent les termes de mani\u00e8re incorrecte. Cela concerne \u00e0 la fois les forts et les faibles. \u00c9tablir un langage commun est tout un art. Pour faire court : il faut poser la t\u00e2che \u00ab mets en \u00e9vidence le fragment de code avec  \u00bb et utiliser ces termes correctement dans la conversation.<br \/>\nApr\u00e8s la transformation avec la boucle, on obtient le fragment :<\/p>\n<pre><code class=\"cs\">Console.WriteLine(\"Introduction\");\nint i = 0;\nwhile (i &lt; 7) {\n    Console.WriteLine(&quot;Chapitre &quot; + i);\n    i = i + 1;\n}\nConsole.WriteLine(&quot;Conclusion&quot;);<\/code><\/pre>\n<h4>La principale id\u00e9e re\u00e7ue<\/h4>\n<p>\nUne id\u00e9e re\u00e7ue populaire parmi les \u00e9tudiants est qu'ils placent dans la construction de boucle des actions qui ne doivent \u00eatre effectu\u00e9es qu'une seule fois. Par exemple comme ceci :<\/p>\n<pre><code class=\"cs\">;\nint i = 0;\nwhile (i &lt; 7) {\n    Console.WriteLine(&quot;Introduction&quot;)\n    Console.WriteLine(&quot;Chapitre &quot; + i);\n    i = i + 1;\n    Console.WriteLine(&quot;Conclusion&quot;);\n}\n<\/code><\/pre>\n<p>\nLes \u00e9l\u00e8ves rencontrent constamment ce probl\u00e8me, tant au d\u00e9but que dans des t\u00e2ches plus complexes.<br \/>\nL'astuce cl\u00e9 dans ce cas :<\/p>\n<blockquote><p>Combien de fois faut-il r\u00e9p\u00e9ter l\u2019\u00e9criture de la commande : une fois ou plusieurs ?\n<\/p><\/blockquote>\n<p>\nLes commandes pour afficher les mots \u00ab Introduction \u00bb et \u00ab Conclusion \u00bb, ainsi que la d\u00e9claration et l'initialisation de la variable i, ne ressemblent pas aux autres actions r\u00e9p\u00e9t\u00e9es. Elles ne s'ex\u00e9cutent qu'une seule fois, donc elles doivent \u00eatre \u00e9crites en dehors du corps de la boucle.<\/p>\n<p>Le code doit contenir toutes les trois \u00e9tapes de la solution afin de pouvoir s'y r\u00e9f\u00e9rer en cas de difficult\u00e9s. Les deux premi\u00e8res variantes peuvent \u00eatre simplement comment\u00e9es pour ne pas interf\u00e9rer.<br \/>\nL\u2019attention de l\u2019\u00e9tudiant doit \u00eatre attir\u00e9e sur les faits suivants :<br \/>\n \u2014 Dans la condition de boucle, on compare g\u00e9n\u00e9ralement le compteur et la limite. Le compteur peut changer dans le corps de la boucle, mais la limite ne peut pas. Pour violer cette r\u00e8gle, il faut formuler de bonnes raisons.<br \/>\n \u2014 Les commandes pour afficher les mots \u00ab Introduction \u00bb et \u00ab Conclusion \u00bb sont en dehors du corps de la boucle. Nous devons les ex\u00e9cuter une fois. \u00ab Introduction \u00bb \u2014 avant de r\u00e9p\u00e9ter les actions, \u00ab Conclusion \u00bb \u2014 apr\u00e8s.<br \/>\nDans le processus de ma\u00eetrise de ce sujet, de l'acquisition des suivants, ainsi que lors des clarifications en cas de difficult\u00e9s, m\u00eame les \u00e9tudiants les plus forts b\u00e9n\u00e9ficient de poser la question : \u00ab Et cette action, combien de fois doit-elle \u00eatre ex\u00e9cut\u00e9e ? Une fois ou plusieurs ? \u00bb.<\/p>\n<h4>D\u00e9veloppement de comp\u00e9tences suppl\u00e9mentaires<\/h4>\n<p>\nLors de l'exploration des cycles, les \u00e9tudiants d\u00e9veloppent \u00e9galement leurs comp\u00e9tences en mati\u00e8re de diagnostic et de r\u00e9solution de probl\u00e8mes. Pour effectuer un diagnostic, l'\u00e9tudiant doit imaginer le r\u00e9sultat souhait\u00e9 et le comparer au r\u00e9sultat r\u00e9el. Les actions \u00e0 entreprendre pour corriger la situation d\u00e9pendent de la diff\u00e9rence entre ces deux r\u00e9sultats.<br \/>\nComme les \u00e9tudiants ont encore du mal \u00e0 se repr\u00e9senter le \u00ab r\u00e9sultat souhait\u00e9 \u00bb \u00e0 ce stade, ils peuvent se baser sur des donn\u00e9es de test. En g\u00e9n\u00e9ral, personne ne comprend encore \u00e0 ce stade ce qui pourrait mal tourner et comment y faire face. C'est pourquoi je fournis une description des probl\u00e8mes typiques et quelques solutions possibles \u00e0 noter dans leur carnet. Le choix de la solution la plus appropri\u00e9e est la t\u00e2che de l'\u00e9tudiant lui-m\u00eame.<br \/>\nCette prise de note est n\u00e9cessaire pour poser les questions : \u00ab Est-ce que le r\u00e9sultat souhait\u00e9 a \u00e9t\u00e9 atteint ? \u00bb, \u00ab Quelle de ces situations s'est produite ? \u00bb, \u00ab La solution appliqu\u00e9e a-t-elle \u00e9t\u00e9 efficace ? \u00bb.<\/p>\n<ol>\n<li>Le nombre d'actions est sup\u00e9rieur ou inf\u00e9rieur de 1 \u00e0 ce qui \u00e9tait attendu. M\u00e9thodes de r\u00e9solution :<br \/>\n \u2014 augmenter la valeur initiale du compteur de 1.<br \/>\n \u2014 remplacer l'op\u00e9rateur de comparaison stricte (&lt; ou &gt;) par un op\u00e9rateur de comparaison non stricte (&lt;= ou &gt;=).<br \/>\n \u2014 modifier la valeur de la limite de 1.<\/li>\n<li>Les actions dans la boucle s'ex\u00e9cutent sans interruption, de mani\u00e8re infinie. M\u00e9thodes de r\u00e9solution :<br \/>\n \u2014 ajouter une commande pour modifier le compteur, si elle est absente.<br \/>\n \u2014 corriger la commande de modification du compteur afin que sa valeur se rapproche de la limite.<br \/>\n \u2014 supprimer la commande de modification de la limite, si elle est dans le corps de la boucle.<\/li>\n<li>Le nombre d'actions dans la boucle est sup\u00e9rieur ou inf\u00e9rieur de plus de 1 \u00e0 ce qui \u00e9tait attendu. Aucune action dans la boucle ne s'est ex\u00e9cut\u00e9e. Il est d'abord n\u00e9cessaire de d\u00e9terminer les valeurs r\u00e9elles des variables juste avant le d\u00e9but de la boucle. M\u00e9thodes de r\u00e9solution :<br \/>\n \u2014 modifier la valeur initiale de la limite<br \/>\n \u2014 modifier la valeur initiale du compteur<\/li>\n<\/ol>\n<p>\nEn g\u00e9n\u00e9ral, le probl\u00e8me 3 est li\u00e9 \u00e0 l'utilisation d'une mauvaise variable ou \u00e0 l'absence de r\u00e9initialisation du compteur.<\/p>\n<p>Apr\u00e8s cette explication, l'\u00e9tudiant peut encore avoir diverses id\u00e9es fausses concernant le fonctionnement des cycles.<br \/>\nPour dissiper les id\u00e9es fausses les plus courantes, je propose des exercices :<\/p>\n<ol>\n<li>Dans lequel la limite, la valeur initiale du compteur ou l'\u00e9tape du compteur est saisie par l'utilisateur.<\/li>\n<li>Dans lequel la valeur du compteur doit \u00eatre utilis\u00e9e dans une expression arithm\u00e9tique. Id\u00e9alement, en utilisant le compteur dans l'expression sous le radical ou dans le d\u00e9nominateur, afin que la diff\u00e9rence soit non lin\u00e9aire.<\/li>\n<li>Dans lequel la valeur du compteur n'est pas affich\u00e9e \u00e0 l'\u00e9cran pendant le d\u00e9roulement de la boucle. Par exemple, afficher un certain nombre de fragments de texte identiques ou dessiner une figure avec la programmation turtle.<\/li>\n<li>Dans lequel il faut d'abord effectuer certaines actions r\u00e9p\u00e9titives, puis d'autres.<\/li>\n<li>Dans lequel il faut effectuer d'autres actions avant et apr\u00e8s les r\u00e9p\u00e9titions.<\/li>\n<\/ol>\n<p>\nPour chaque t\u00e2che, il faut fournir des donn\u00e9es de test et le r\u00e9sultat attendu.<\/p>\n<p>Pour comprendre \u00e0 quelle vitesse on peut avancer, il faut faire lire les conditions de ces t\u00e2ches et demander : \u00ab Qu'est-ce qui les distingue de l'exemple ? \u00bb, \u00ab Que faut-il changer dans l'exemple pour les r\u00e9soudre ? \u00bb. Si l'\u00e9tudiant r\u00e9pond de mani\u00e8re r\u00e9fl\u00e9chie, alors qu'il r\u00e9solve au moins une t\u00e2che en classe, et les autres \u00e0 la maison de mani\u00e8re autonome. Si la solution r\u00e9ussit, alors on peut commencer \u00e0 expliquer les conditions \u00e0 l'int\u00e9rieur des boucles.<br \/>\nS'il y a des difficult\u00e9s avec la r\u00e9solution autonome, il faut tout travailler en classe. Pour que la r\u00e9solution d'une t\u00e2che ne ressemble pas \u00e0 un dessin de hibou, je recommande d'abord de r\u00e9soudre la t\u00e2che de mani\u00e8re non universelle. C'est-\u00e0-dire de sorte que la solution r\u00e9ussisse le premier test et n'utilise pas de structure de boucle. Ensuite, on applique des transformations pour obtenir l'universalit\u00e9 de la solution.<\/p>\n<h4>Boucles et conditionnelles<\/h4>\n<p>\n\u00c0 mon avis, il est utile de donner le sujet \u00ab boucles \u00e0 l'int\u00e9rieur des conditionnelles \u00bb s\u00e9par\u00e9ment. Ainsi, on pourra voir ensuite la diff\u00e9rence entre une v\u00e9rification conditionnelle multiple et une unique.<br \/>\nLes t\u00e2ches de consolidation porteront sur l'affichage des nombres de A \u00e0 B, qui sont saisis par l'utilisateur :<br \/>\n \u2014 toujours de mani\u00e8re croissante.<br \/>\n \u2014 de mani\u00e8re croissante ou d\u00e9croissante selon les valeurs de A et B.<\/p>\n<p>Le sujet \"les branches \u00e0 l'int\u00e9rieur des boucles\" ne doit \u00eatre abord\u00e9 qu'une fois que l'\u00e9tudiant a ma\u00eetris\u00e9 les techniques : \"remplacement de la r\u00e9gularit\u00e9 par une variable\" et \"remplacement des actions r\u00e9p\u00e9t\u00e9es par une boucle\".<br \/>\nLa principale raison d'appliquer des conditionnelles \u00e0 l'int\u00e9rieur des boucles est qu'il peut y avoir des anomalies dans la r\u00e9gularit\u00e9. Elle est perturb\u00e9e en fonction des donn\u00e9es d'entr\u00e9e.<br \/>\nPour les \u00e9tudiants capables de rechercher une solution en combinant des techniques simples, il suffit de dire \u00ab les conditionnelles peuvent \u00eatre \u00e9crites \u00e0 l'int\u00e9rieur des boucles \u00bb et de donner une t\u00e2che \u00ab par exemple \u00bb enti\u00e8rement \u00e0 r\u00e9soudre de mani\u00e8re autonome.<br \/>\nT\u00e2che par exemple :<\/p>\n<blockquote><p>L'utilisateur saisit un nombre X. Afficher en colonne les nombres de 0 \u00e0 9 en pla\u00e7ant le signe '+' \u00e0 c\u00f4t\u00e9 du nombre qui est \u00e9gal \u00e0 X.<\/p><\/blockquote>\n<p>\n<b class=\"spoiler_title\">Si 0 a \u00e9t\u00e9 saisi<\/b>0+<br \/>\n1<br \/>\n2<br \/>\n3<br \/>\n4<br \/>\n5<br \/>\n6<br \/>\n7<br \/>\n8<br \/>\n9<\/p>\n<p><b class=\"spoiler_title\">Si 6 a \u00e9t\u00e9 entr\u00e9<\/b>0<br \/>\n1<br \/>\n2<br \/>\n3<br \/>\n4<br \/>\n5<br \/>\n6+<br \/>\n7<br \/>\n8<br \/>\n9<\/p>\n<p><b class=\"spoiler_title\">Si 9 a \u00e9t\u00e9 entr\u00e9<\/b>0<br \/>\n1<br \/>\n2<br \/>\n3<br \/>\n4<br \/>\n5<br \/>\n6<br \/>\n7<br \/>\n8<br \/>\n9+<\/p>\n<p><b class=\"spoiler_title\">Si 777 a \u00e9t\u00e9 entr\u00e9<\/b>0<br \/>\n1<br \/>\n2<br \/>\n3<br \/>\n4<br \/>\n5<br \/>\n6<br \/>\n7<br \/>\n8<br \/>\n9<\/p>\n<p>Si l'explication courte est insuffisante pour \u00e9crire avec une boucle, il faut alors trouver une solution universelle \u00e0 cette m\u00eame t\u00e2che sans boucle.<br \/>\nIl en r\u00e9sultera une des deux options :<br \/>\n<b class=\"spoiler_title\">D\u00e9sir\u00e9<\/b><\/p>\n<pre><code class=\"cs\">string temp;\ntemp = Console.ReadLine();\nint x;\nx = int.Parse(temp);\nif (x==0) {\n    Console.WriteLine(0 + \"+\");\n} else {\n    Console.WriteLine(0);\n}\nif (x==1) {\n    Console.WriteLine(1 + \"+\");\n} else {\n    Console.WriteLine(1);\n}\nif (x==2) {\n    Console.WriteLine(2 + \"+\");\n} else {\n    Console.WriteLine(2);\n}\nif (x==3) {\n    Console.WriteLine(3 + \"+\");\n} else {\n    Console.WriteLine(3);\n}\nif (x==4) {\n    Console.WriteLine(4 + \"+\");\n} else {\n    Console.WriteLine(4);\n}\nif (x==5) {\n    Console.WriteLine(5 + \"+\");\n} else {\n    Console.WriteLine(5);\n}\nif (x==6) {\n    Console.WriteLine(6 + \"+\");\n} else {\n    Console.WriteLine(6);\n}\nif (x==7) {\n    Console.WriteLine(7 + \"+\");\n} else {\n    Console.WriteLine(7);\n}\nif (x==8) {\n    Console.WriteLine(8 + \"+\");\n} else {\n    Console.WriteLine(8);\n}\nif (x==9) {\n    Console.WriteLine(9 + \"+\");\n} else {\n    Console.WriteLine(9);\n}\n<\/code><\/pre>\n<p><b class=\"spoiler_title\">Possible<\/b><\/p>\n<pre><code class=\"cs\">string temp;\ntemp = Console.ReadLine();\nint x;\nx = int.Parse(temp);\nif (x==0) {\n    Console.WriteLine(\"0+n1n2n3n4n5n6n7n8n9\");\n}\nif (x==1) {\n    Console.WriteLine(\"0n1+n2n3n4n5n6n7n8n9\");\n}\nif (x==2) {\n    Console.WriteLine(\"0n1n2+n3n4n5n6n7n8n9\");\n}\nif (x==3) {\n    Console.WriteLine(\"0n1n2n3+n4n5n6n7n8n9\");\n}\nif (x==4) {\n    Console.WriteLine(\"0n1n2n3n4+n5n6n7n8n9\");\n}\nif (x==5) {\n    Console.WriteLine(\"0n1n2n3n4n5+n6n7n8n9\");\n}\nif (x==6) {\n    Console.WriteLine(\"0n1n2n3n4n5n6+n7n8n9\");\n}\nif (x==7) {\n    Console.WriteLine(\"0n1n2n3n4n5n6n7+n8n9\");\n}\nif (x==8) {\n    Console.WriteLine(\"0n1n2n3n4n5n6n7n8+n9\");\n}\nif (x==9) {\n    Console.WriteLine(\"0n1n2n3n4n5n6n7n8n9+\");\n}\n<\/code><\/pre>\n<p>Je donne une t\u00e2che similaire \u00e0 l'avance, lors de l'\u00e9tude du sujet sur les branchements.<br \/>\nSi l'\u00e9tudiant obtient une option \u00ab possible \u00bb, il faut expliquer que pour un m\u00eame probl\u00e8me, il peut y avoir plusieurs solutions. Cependant, elles diff\u00e8rent par leur stabilit\u00e9 face aux changements de exigences. Posez la question : \u00ab Combien d'endroits dans le code devront \u00eatre modifi\u00e9s si l'on doit ajouter un autre nombre ? \u00bb Dans l'option \u00ab possible \u00bb, il faudra ajouter une autre branche et \u00e9crire le nouveau nombre \u00e0 10 autres endroits. Dans l'option \u00ab d\u00e9sir\u00e9e \u00bb, il suffit d'ajouter une seule branche.<br \/>\nPosez la t\u00e2che de reproduire l'option \u00ab d\u00e9sir\u00e9e \u00bb, puis de trouver la r\u00e9gularit\u00e9 dans le code, de r\u00e9aliser un remplacement de variable et d'\u00e9crire une boucle.<br \/>\nSi vous avez une id\u00e9e pour r\u00e9soudre cette t\u00e2che sans boucle d'une autre mani\u00e8re, veuillez \u00e9crire dans les commentaires.<\/p>\n<h4>Boucles \u00e0 l'int\u00e9rieur des boucles<\/h4>\n<p>\nDans ce sujet, il faut faire attention \u00e0 ce que :<br \/>\n \u2014 les compteurs pour la boucle interne et externe doivent \u00eatre des variables diff\u00e9rentes.<br \/>\n \u2014 le compteur pour la boucle interne doit \u00eatre r\u00e9initialis\u00e9 plusieurs fois (c'est-\u00e0-dire dans le corps de la boucle externe).<br \/>\n Dans les t\u00e2ches d'affichage du texte, il est impossible d'\u00e9crire d'abord une lettre sur plusieurs lignes, puis une autre. Il faut d'abord afficher toutes les lettres de la premi\u00e8re ligne, puis toutes les lettres de la deuxi\u00e8me, et ainsi de suite.<\/p>\n<p>Il est pr\u00e9f\u00e9rable de commencer l'explication du sujet sur les boucles imbriqu\u00e9es par expliquer l'importance de r\u00e9initialiser le compteur.<br \/>\nT\u00e2che par exemple :<\/p>\n<blockquote><p>L'utilisateur saisit deux nombres : R et T. Afficher deux lignes de caract\u00e8res \"#\". La premi\u00e8re ligne doit contenir R caract\u00e8res. La deuxi\u00e8me ligne doit contenir T caract\u00e8res. Si l'un des nombres est n\u00e9gatif, afficher un message d'erreur.<\/p><\/blockquote>\n<p>\n<b class=\"spoiler_title\">R=5, T=11<\/b>#####<br \/>\n###########<\/p>\n<p><b class=\"spoiler_title\">R=20, T=3<\/b>####################<br \/>\n###<\/p>\n<p><b class=\"spoiler_title\">R=-1, T=6<\/b>La valeur de R doit \u00eatre non n\u00e9gative<\/p>\n<p><b class=\"spoiler_title\">R=6, T=-2<\/b>La valeur de T doit \u00eatre non n\u00e9gative<\/p>\n<p>Il est \u00e9vident que ce probl\u00e8me a \u00e9galement au moins deux solutions possibles.<br \/>\n<b class=\"spoiler_title\">D\u00e9sir\u00e9<\/b><\/p>\n<pre><code class=\"cs\">string temp;\nint R;\nint T;\ntemp = Console.ReadLine();\nR = int.Parse(temp);\ntemp = Console.ReadLine();\nT = int.Parse(temp);\nint i = 0;\nwhile (i &lt; R)\n{\n    Console.Write(&quot;#&quot;);\n    i = i + 1;\n}\nConsole.WriteLine();\ni = 0;\nwhile (i &lt; T)\n{\n    Console.Write(&quot;#&quot;);\n    i = i + 1;\n}\n<\/code><\/pre>\n<p><b class=\"spoiler_title\">Possibilit\u00e9 n\u00b01<\/b><\/p>\n<pre><code class=\"cs\">string temp;\nint R;\nint T;\ntemp = Console.ReadLine();\nR = int.Parse(temp);\ntemp = Console.ReadLine();\nT = int.Parse(temp);\nint i = 0;\nwhile (i &lt; R)\n{\n    Console.Write(&quot;#&quot;);\n    i = i + 1;\n}\nConsole.WriteLine();\nint j = 0;\nj = 0;\nwhile (j &lt; T)\n{\n    Console.Write(&quot;#&quot;);\n    j = j + 1;\n}\n<\/code><\/pre>\n<p>La diff\u00e9rence est que dans la solution \u00abpossible\u00bb, une deuxi\u00e8me variable a \u00e9t\u00e9 utilis\u00e9e pour afficher la seconde ligne. Il faut insister sur l'utilisation de la m\u00eame variable pour les deux boucles. On peut justifier cette limitation par le fait qu'une solution avec un seul compteur pour deux boucles sera une illustration du terme \u00abr\u00e9initialisation du compteur\u00bb. Comprendre ce terme est n\u00e9cessaire pour r\u00e9soudre les probl\u00e8mes suivants. En tant que compromis, on peut conserver les deux solutions au probl\u00e8me.<\/p>\n<p>Un probl\u00e8me typique avec l'utilisation d'une seule variable compteur pour deux boucles se manifeste de cette mani\u00e8re :<br \/>\n<b class=\"spoiler_title\">R=5, T=11<\/b>#####<br \/>\n######<\/p>\n<p>Le nombre de caract\u00e8res dans la seconde ligne ne correspond pas \u00e0 la valeur de T. Si une aide est n\u00e9cessaire avec ce probl\u00e8me, il faut \u00abpointer du doigt\u00bb le r\u00e9sum\u00e9 sur les probl\u00e8mes typiques avec les boucles. C'est le sympt\u00f4me n\u00b03. Il est diagnostiqu\u00e9 en ajoutant l'affichage de la valeur du compteur juste avant la seconde boucle. Cela se corrige par une r\u00e9initialisation. Mais il vaut mieux ne pas le dire tout de suite. L'\u00e9tudiant doit essayer de formuler au moins une hypoth\u00e8se.<\/p>\n<p>Il y a bien s\u00fbr une autre solution possible. Mais je ne l'ai jamais vue chez les \u00e9tudiants. Lors de l'apprentissage des boucles, en parler disperserait l'attention. On peut y revenir plus tard, en \u00e9tudiant les fonctions de manipulation des cha\u00eenes.<br \/>\n<b class=\"spoiler_title\">Possibilit\u00e9 n\u00b02<\/b><\/p>\n<pre><code class=\"cs\">chaine temp;\nint R;\nint T;\ntemp = Console.ReadLine();\nR = int.Parse(temp);\ntemp = Console.ReadLine();\nT = int.Parse(temp);\nConsole.WriteLine(new String('#', R));\nConsole.WriteLine(new String('#', T));\n<\/code><\/pre>\n<p>\nLa prochaine t\u00e2che obligatoire :<\/p>\n<blockquote><p>Affichez les chiffres de 0 \u00e0 9. Chaque chiffre doit \u00eatre sur sa propre ligne. Le nombre de chiffres par ligne (W) est saisi au clavier.<\/p><\/blockquote>\n<p>\n<b class=\"spoiler_title\">W=1<\/b>0<br \/>\n1<br \/>\n2<br \/>\n3<br \/>\n4<br \/>\n5<br \/>\n6<br \/>\n7<br \/>\n8<br \/>\n9<\/p>\n<p><b class=\"spoiler_title\">W=10<\/b><code>0000000000<br \/>\n1111111111<br \/>\n2222222222<br \/>\n3333333333<br \/>\n4444444444<br \/>\n5555555555<br \/>\n6666666666<br \/>\n7777777777<br \/>\n8888888888<br \/>\n9999999999<\/code><\/p>\n<p>Si l'\u00e9tudiant a ma\u00eetris\u00e9 la technique de substitution de variable, il s'en sortira assez rapidement. Le probl\u00e8me potentiel sera encore une fois l'initialisation de la variable. S'il ne parvient pas \u00e0 effectuer la transformation, cela signifie que vous vous \u00eates pr\u00e9cipit\u00e9 et qu'il faut r\u00e9soudre des t\u00e2ches plus simples.<\/p>\n<p>Merci de votre attention. Aimez, abonnez-vous \u00e0 la cha\u00eene.<\/p>\n<p>P.S. Si vous trouvez des fautes d'orthographe ou des erreurs dans le texte, veuillez me le faire savoir. Vous pouvez le faire en s\u00e9lectionnant une partie du texte et en appuyant sur \u00ab\u2318 + Entr\u00e9e\u00bb sur Mac, ou sur les claviers classiques \u00abCtrl \/ Entr\u00e9e\u00bb, ou via des messages personnels. Si ces options ne sont pas accessibles, veuillez signaler les erreurs dans les commentaires. Merci !<\/p>\n<p class=\"for_users_only_msg\">Seuls les utilisateurs enregistr\u00e9s peuvent participer au sondage. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Connectez-vous<\/a><\/noindex>, s'il vous pla\u00eet.<\/p>\n<h2 class=\"default-block__polling-title\">Sondage pour les lecteurs sans karma<\/h2>\n<ul class=\"poll-result\">\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">20,0%<\/strong>J'enseigne professionnellement, +12<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">10,0%<\/strong>J'enseigne professionnellement, -11<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent  poll-result__data-percent_winner\">70,0%<\/strong>Je n'enseigne pas, +17<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">0,0%<\/strong>Je n'enseigne pas, -10<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">0,0%<\/strong>Autre0<\/p>\n<\/li>\n<\/ul>\n<p>    10 utilisateurs ont vot\u00e9. 5 utilisateurs se sont abstenus.<br \/>\n<br \/>Source : <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/456500\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0440\u0435\u0447\u044c \u043f\u043e\u0439\u0434\u0435\u0442 \u043e\u0431 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u0442\u0435\u043c, \u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u0434\u043b\u044f \u043e\u043f\u044b\u0442\u043d\u044b\u0445 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u043e\u0432. \u0426\u0435\u043b\u044c \u2014 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u0430\u043a\u0438\u0435 \u0437\u0430\u0431\u043b\u0443\u0436\u0434\u0435\u043d\u0438\u044f \u0431\u044b\u0432\u0430\u044e\u0442 \u0443 \u043d\u043e\u0432\u0438\u0447\u043a\u043e\u0432 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438. \u0414\u043b\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0443\u044e\u0449\u0438\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u044d\u0442\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0443\u0436\u0435 \u0434\u0430\u0432\u043d\u043e \u0440\u0435\u0448\u0435\u043d\u044b, \u043f\u043e\u0437\u0430\u0431\u044b\u0442\u044b \u0438\u043b\u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0437\u0430\u043c\u0435\u0447\u0435\u043d\u044b. \u0421\u0442\u0430\u0442\u044c\u044f \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u044c\u0441\u044f, \u0435\u0441\u043b\u0438 \u0432\u0434\u0440\u0443\u0433 \u0432\u0430\u043c \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043f\u043e\u043c\u043e\u0433\u0430\u0442\u044c \u0441 \u044d\u0442\u043e\u0439 \u0442\u0435\u043c\u043e\u0439 \u043a\u043e\u043c\u0443-\u043d\u0438\u0431\u0443\u0434\u044c. \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u0440\u043e\u0432\u043e\u0434\u044f\u0442\u0441\u044f [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-40208","post","type-post","status-publish","format-standard","hentry"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0440\u0435\u0447\u044c \u043f\u043e\u0439\u0434\u0435\u0442 \u043e\u0431 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u0442\u0435\u043c, \u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u0434\u043b\u044f \u043e\u043f\u044b\u0442\u043d\u044b\u0445 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u043e\u0432. \u0426\u0435\u043b\u044c \u2014 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u0430\u043a\u0438\u0435 \u0437\u0430\u0431\u043b\u0443\u0436\u0434\u0435\u043d\u0438\u044f \u0431\u044b\u0432\u0430\u044e\u0442 \u0443 \u043d\u043e\u0432\u0438\u0447\u043a\u043e\u0432 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/fr\/blog\/kak-nauchit-preodolevat-trudnosti-a-zaodno-i-pisat-czikly\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041a\u0430\u043a \u043d\u0430\u0443\u0447\u0438\u0442\u044c \u043f\u0440\u0435\u043e\u0434\u043e\u043b\u0435\u0432\u0430\u0442\u044c \u0442\u0440\u0443\u0434\u043d\u043e\u0441\u0442\u0438, \u0430 \u0437\u0430\u043e\u0434\u043d\u043e \u0438 \u043f\u0438\u0441\u0430\u0442\u044c \u0446\u0438\u043a\u043b\u044b | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0440\u0435\u0447\u044c \u043f\u043e\u0439\u0434\u0435\u0442 \u043e\u0431 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u0442\u0435\u043c, \u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u0434\u043b\u044f \u043e\u043f\u044b\u0442\u043d\u044b\u0445 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u043e\u0432. \u0426\u0435\u043b\u044c \u2014 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u0430\u043a\u0438\u0435 \u0437\u0430\u0431\u043b\u0443\u0436\u0434\u0435\u043d\u0438\u044f \u0431\u044b\u0432\u0430\u044e\u0442 \u0443 \u043d\u043e\u0432\u0438\u0447\u043a\u043e\u0432 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/fr\/blog\/kak-nauchit-preodolevat-trudnosti-a-zaodno-i-pisat-czikly\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-02-01T03:04:35+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-01T03:04:35+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Comment apprendre \u00e0 surmonter les difficult\u00e9s tout en \u00e9crivant des boucles | ProHoster","description":"Bien que nous parlions d'un sujet de base, cet article est \u00e9crit pour des professionnels exp\u00e9riment\u00e9s. L'objectif est de montrer quelles id\u00e9es fausses peuvent avoir les d\u00e9butants en programmation.","canonical_url":"https:\/\/prohoster.info\/fr\/blog\/kak-nauchit-preodolevat-trudnosti-a-zaodno-i-pisat-czikly","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"fr_FR","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041a\u0430\u043a \u043d\u0430\u0443\u0447\u0438\u0442\u044c \u043f\u0440\u0435\u043e\u0434\u043e\u043b\u0435\u0432\u0430\u0442\u044c \u0442\u0440\u0443\u0434\u043d\u043e\u0441\u0442\u0438, \u0430 \u0437\u0430\u043e\u0434\u043d\u043e \u0438 \u043f\u0438\u0441\u0430\u0442\u044c \u0446\u0438\u043a\u043b\u044b | ProHoster","og:description":"\u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0440\u0435\u0447\u044c \u043f\u043e\u0439\u0434\u0435\u0442 \u043e\u0431 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u0442\u0435\u043c, \u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u0434\u043b\u044f \u043e\u043f\u044b\u0442\u043d\u044b\u0445 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u043e\u0432. \u0426\u0435\u043b\u044c \u2014 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u0430\u043a\u0438\u0435 \u0437\u0430\u0431\u043b\u0443\u0436\u0434\u0435\u043d\u0438\u044f \u0431\u044b\u0432\u0430\u044e\u0442 \u0443 \u043d\u043e\u0432\u0438\u0447\u043a\u043e\u0432 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438.","og:url":"https:\/\/prohoster.info\/fr\/blog\/kak-nauchit-preodolevat-trudnosti-a-zaodno-i-pisat-czikly","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-02-01T03:04:35+00:00","article:modified_time":"2020-02-01T03:04:35+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"40208","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 00:43:24","updated":"2022-09-29 01:18:32","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/40208","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=40208"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/40208\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=40208"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=40208"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=40208"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}