{"id":4686,"date":"2012-06-21T17:40:18","date_gmt":"2012-06-21T21:40:18","guid":{"rendered":"http:\/\/cscircles.cemc.uwaterloo.ca\/?page_id=4686"},"modified":"2018-02-05T02:53:48","modified_gmt":"2018-02-05T07:53:48","slug":"15a-fr","status":"publish","type":"page","link":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/15a-fr\/","title":{"rendered":"15A: D\u00e9termination de terminaison"},"content":{"rendered":"<!-- Please retain this notice and add more notes if you create a new version.<br \/>\nMain French translator: Brice Canvel, brice.canvel@gmail.com<br \/>\nOriginal lesson author: David Pritchard, daveagp@gmail.com<br \/>\nLicense: http:\/\/creativecommons.org\/licenses\/by-nc-sa\/3.0\/<br \/>\nFor the full site, visit http:\/\/cscircles.ca-->\n<p><em>Les exercices 15A, 15B et 15C peuvent \u00eatre fait dans n'importe quel ordre.<\/em><\/p>\n<p>Dans cet exercice, vous allez r\u00e9soudre un probl\u00e8me long et complexe qui a \u00e9t\u00e9 d\u00e9coup\u00e9 en petites parties pour vous. Cette le\u00e7on introduit <code>str.split()<\/code>, une m\u00e9thode utile pour d\u00e9couper des cha\u00eenes: elle efface tous les espaces et retourne une liste avec tous les mots dans la cha\u00eene. La cha\u00eene d'origine n'est pas modifi\u00e9e.<\/p>\n<p><form class=\"pbform\" action=\"#\" id=\"pbform0\" method=\"POST\">\n<div class='pybox modeNeutral  facultative' id='pybox0'>\n<div class=\"heading\"><span class=\"title\">Example<\/span><\/div>Exemples de <code>str.split()<\/code><div class='pyboxTextwrap pyboxCodewrap RO '  style='height: 188px;'><textarea wrap='off' name='usercode0' id='usercode0'  cols=10 rows=7 readonly='readonly'  style = 'height : 188px;'  class='pyboxCode RO'>\nS = 'ceci est une cha\u00eene'\nmots = S.split()\nprint(mots)\nprint(len(mots))\nprint(mots[1])\nprint(S)   # S n'est pas modifi\u00e9\nprint('  Un    autre exemple de  split '.split())<\/textarea><\/div>\n<div id='pbhistory0' class='flexcontain' style='display:none;'><\/div>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit0' value=' '\/><\/td>\n<td><input type='button' name='consolecopy' value=\"Open in console\" onclick=\"pbConsoleCopy(0)\" ><\/td>\n<td><input type='button' name='visualize' value=\"Visualize\" onclick=\"pbVisualize(0,'N')\" ><\/td>\n<\/tr><\/table><\/div>\n<input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" id=\"inputInUse0\" name=\"inputInUse\" value=\"Y\"\/>\n<input type=\"hidden\" name=\"pyId\" value=\"0\"\/>\n<input type=\"hidden\" name=\"hash\" value=\"968ed934421071d8fe6099de0f5feba0\"\/>\n<div id='pbresults0' class='pbresults'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>document.getElementById(\"submit0\").value = \"Run program\";document.getElementById(\"inputInUse0\").value = \"N\";<\/script>\n<\/p>\n<p><table class='pywarn'><tr><td class='pywarnleft'><img src='https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-content\/plugins\/pybox\/files\/warning.png'\/><\/td><td class='pywarnright'><span> Vous pouvez appeler\u00a0<code>split()<\/code> avec des arguments sp\u00e9ciaux pour faire du d\u00e9coupage plus sophistiqu\u00e9 mais nous n'en aurons pas besoin ici. Si cela vous int\u00e9resse, allez voir la <a href=\"http:\/\/docs.python.org\/py3k\/library\/stdtypes.html#str.split\">documentation Python<\/a>. <\/span><\/td><\/table><\/p>\n<p>Maintenant, attelons-nous \u00e0 la t\u00e2che. Le vieux langage de programmation <a href=\"http:\/\/fr.wikipedia.org\/wiki\/BASIC\">BASIC<\/a> \u00e9tait c\u00e9l\u00e8bre pour ses lignes num\u00e9rot\u00e9s et ses instructions <code>goto<\/code>. Dans cet exercice, vous impl\u00e9menterez une version simplifi\u00e9e de BASIC avec seulement cette fonctionnalit\u00e9. L'entr\u00e9e de votre programme consistera en plusieurs lignes au format<\/p>\n<p style=\"text-align: center;\"><code>\u00ablabel\u00bb goto \u00abcible\u00bb<\/code><\/p>\n<p>o\u00f9\u00a0<code>\u00ablabel\u00bb<\/code>\u00a0et <code>\u00abcible\u00bb<\/code>\u00a0sont des nombres positifs. Le <em>label<\/em>\u00a0est comme le nom ou l'adresse d'une ligne;\u00a0<em>tous les labels sont uniques.<\/em>\u00a0La <em>cible<\/em> vous indique le label de la ligne \u00e0 laquelle il faut aller ensuite. La derni\u00e8re ligne du programme est le\u00a0<code>\u00ablabel\u00bb END<\/code>\u00a0qui indique que vous devez vous arr\u00eater lorsque vous arrivez \u00e0 cette ligne.\u00a0Voici un exemple de programme en BASIC:<\/p>\n<pre>5 GOTO 30\r\n10 GOTO 20\r\n20 GOTO 10\r\n30 GOTO 40\r\n40 END<\/pre>Quand BASIC ex\u00e9cute le programme, voici ce qui se passe. On commence \u00e0 la premi\u00e8re ligne (avec le label 5). La ligne avec le label 5 a comme cible 30 donc nous allons ensuite \u00e0 la ligne 30. La ligne 30 nous dit d'aller \u00e0 la ligne 40. La ligne 40 nous dit d'aller \u00e0 END. Donc le programme se termine avec succ\u00e8s.<\/p>\n<p>D'un autre c\u00f4t\u00e9, un programme en BASIC peut boucler pour toujours. Voici un exemple:<\/p>\n<pre>10 GOTO 21\r\n21 GOTO 37\r\n37 GOTO 21\r\n40 END<\/pre>Le programme commence \u00e0 la ligne 10 puis boucle entre les lignes 21 et 37.<\/p>\n<p><strong>Votre t\u00e2che<\/strong> est d'\u00e9crire un programme Python qui l\u200eit un programme BASIC en entr\u00e9e. Si le programme se termine, votre code affichera le message\u00a0<code>terminaison<\/code>. Si le programme entre dans une boucle infinie, votre code affichera <code>boucle infinie<\/code>.\u00a0Vous assumerez que chaque cible renvoie \u00e0 un label existant et que chaque label est unique, de telle mani\u00e8re que vous ne devez pas v\u00e9rifier s'il y a des erreurs.<\/p>\n<p>Il y a plusieurs mani\u00e8res de r\u00e9soudre ce probl\u00e8me, mais dans cette le\u00e7on, nous avons choisi une approche simple qui divise le probl\u00e8me en trois sous-t\u00e2ches. (A la le\u00e7on 15C, vous aurez un grand probl\u00e8me dont vous devrez d\u00e9finir les sous-t\u00e2ches vous-m\u00eame).<\/p>\n<h2>Sous-t\u00e2che 1: Lire le programme<\/h2>\n<p>Pour lire le programme, vous devrez appelez plusieurs fois la fonction <code><a href=\"\/5-fr\/\">input()<\/a><\/code>. Mais il faudra arr\u00eater d'appeler la fonction <code>input()<\/code> une fois que la derni\u00e8re ligne aura \u00e9t\u00e9 lue (celle avec <code>END<\/code>) pour \u00e9viter une erreur <code>EOFError<\/code>.<\/p>\n<p><form class=\"pbform\" action=\"#\" id=\"pbform1\" method=\"POST\">\n<div class='pybox modeNeutral ' id='pybox1'>\n<img title='You have not yet completed this problem.' src='https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-content\/plugins\/pybox\/files\/icon.png' class='pycheck'\/><div class=\"heading\"><span class='type'>Coding Exercise: <\/span><span class='title'>Lire le programme<\/span><\/div>Ecrivez une fonction <code>lireBASIC()<\/code> qui ne prend pas d'arguments et qui lit les lignes d'entr\u00e9es en utilisant une boucle while; quand elle arrive \u00e0 la fin , elle retournera tout le programme sous la forme d'une liste de cha\u00eenes. (Indices: \u00e0 propos\u00a0<a class=\"hintlink\"  id=\"hintlink2\">lists<\/a> et\u00a0<a class=\"hintlink\"  id=\"hintlink3\">de l'arr\u00eat<\/a>)<div class=\"helpOuter\" style=\"display: none;\"><div class=\"helpInner\"><div style=\"text-align: center\">You need to create an account and log in to ask a question.<\/div><\/div><\/div><div class='pyboxTextwrap pyboxCodewrap RW resizy'  style='height: 526px;'><textarea wrap='off' name='usercode1' id='usercode1'  cols=10 rows=20   class='pyboxCode RW'>\n# delete this comment and enter your code here\n<\/textarea><\/div>\n<div id='pbhistory1' class='flexcontain' style='display:none;'><\/div>\n<div name=\"pyinput\" id=\"pyinput1\">You may enter input for the program in the box below.<div class=\"pyboxTextwrap resizy\" style=\"height: 102px;\" ><textarea wrap=\"off\" name=\"userinput\" class=\"pyboxInput\" cols=10 rows=4><\/textarea><\/div><\/div>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit1' value=' '\/><\/td>\n<td><input type='button' name='switch' id=\"switch1\" value=\"Input Switch\" onclick=\"pbInputSwitch(1,'N')\" ><\/td>\n<td><input type='button' name='consolecopy' value=\"Open in console\" onclick=\"pbConsoleCopy(1)\" ><\/td>\n<td><input type='button' name='visualize' value=\"Visualize\" onclick=\"pbVisualize(1,'N')\" ><\/td>\n<\/tr><\/table><select id='pbSelect1' class='selectmore'><option name='more'>More actions...<\/option>\n<option name='history' data-pbonclick=\"historyClick(1,'15a.getbasic')\" >History<\/option>\n<option name='help' data-pbonclick=\"helpClick(1);\" >Help<\/option>\n<\/select><\/div>\n<input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" id=\"inputInUse1\" name=\"inputInUse\" value=\"Y\"\/>\n<input type=\"hidden\" name=\"pyId\" value=\"1\"\/>\n<input type=\"hidden\" name=\"hash\" value=\"12cd01a4726f6de5d3c521b5cd3e23c3\"\/>\n<div id='pbresults1' class='pbresults avoidline'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>jQuery(function(){pbToggleCodeMirror(1);});pbInputSwitch(1,\"N\");<\/script>\n<\/p>\n<h2>Sous-t\u00e2che 2: Goto!<\/h2>\n<p>Une fois que vous avez lu le programme, il vous faut \u00eatre capable d'aller de ligne en ligne dans le programme. Pour y arriver, nous vous demandons d'\u00e9crire la sous-routine suivante.<\/p>\n<p><form class=\"pbform\" action=\"#\" id=\"pbform4\" method=\"POST\">\n<div class='pybox modeNeutral ' id='pybox4'>\n<img title='You have not yet completed this problem.' src='https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-content\/plugins\/pybox\/files\/icon.png' class='pycheck'\/><div class=\"heading\"><span class='type'>Coding Exercise: <\/span><span class='title'>Goto!<\/span><\/div>D\u00e9finissez une fonction <code>trouveLigne(prog, cible)<\/code>. Assumez que <code>prog<\/code> est une liste de cha\u00eenes contenant un programme en BASIC du type de celui g\u00e9n\u00e9r\u00e9 par <code>lireBASIC()<\/code>; assumez que <code>cible<\/code> est une cha\u00eene contenant le num\u00e9ro de ligne qui est la cible de l'instruction GOTO. La fonction retournera l'index <code>i<\/code> (un nombre entre <code>0<\/code> et <code>len(prog)-1<\/code>) de fa\u00e7on que <code>prog[i]<\/code> soit la ligne donc le label est \u00e9gal \u00e0\u00a0<code>cible<\/code>. <a class=\"hintlink\"  id=\"hintlink5\">Hint<\/a>\u00a0<br\/><strong>Exemple d'entr\u00e9e\/sortie:<\/strong> Si vous appelez<\/p>\n<pre>trouveLigne(['10 GOTO 20','20 END'], '10')<\/pre>la valeur retourn\u00e9e sera <code>0<\/code>, puisque l'\u00e9l\u00e9ment 0 de la liste est la ligne avec le label 10.<div class=\"helpOuter\" style=\"display: none;\"><div class=\"helpInner\"><div style=\"text-align: center\">You need to create an account and log in to ask a question.<\/div><\/div><\/div><div class='pyboxTextwrap pyboxCodewrap RW resizy'  style='height: 526px;'><textarea wrap='off' name='usercode4' id='usercode4'  cols=10 rows=20   class='pyboxCode RW'>\n# delete this comment and enter your code here\n<\/textarea><\/div>\n<div id='pbhistory4' class='flexcontain' style='display:none;'><\/div>\n<div name=\"pyinput\" id=\"pyinput4\">Enter testing statements like <code>print(myfunction(\"test argument\"))<\/code> below.<div class=\"pyboxTextwrap resizy\" style=\"height: 102px;\" ><textarea wrap=\"off\" name=\"userinput\" class=\"pyboxInput\" cols=10 rows=4><\/textarea><\/div><\/div>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit4' value=' '\/><\/td>\n<td><input type='button' name='switch' id=\"switch4\" value=\"Input Switch\" onclick=\"pbInputSwitch(4,'Y')\" ><\/td>\n<td><input type='button' name='consolecopy' value=\"Open in console\" onclick=\"pbConsoleCopy(4)\" ><\/td>\n<td><input type='button' name='visualize' value=\"Visualize\" onclick=\"pbVisualize(4,'Y')\" ><\/td>\n<\/tr><\/table><select id='pbSelect4' class='selectmore'><option name='more'>More actions...<\/option>\n<option name='history' data-pbonclick=\"historyClick(4,'15a.goto')\" >History<\/option>\n<option name='help' data-pbonclick=\"helpClick(4);\" >Help<\/option>\n<\/select><\/div>\n<input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" id=\"inputInUse4\" name=\"inputInUse\" value=\"Y\"\/>\n<input type=\"hidden\" name=\"pyId\" value=\"4\"\/>\n<input type=\"hidden\" name=\"hash\" value=\"f697397dae9144639ca61cc1c7882460\"\/>\n<div id='pbresults4' class='pbresults avoidline'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>jQuery(function(){pbToggleCodeMirror(4);});pbInputSwitch(4,\"Y\");<\/script>\n<\/p>\n<h2>Sous-t\u00e2che 3: Simulation intelligente<\/h2>\n<p>Dans les deux exercices pr\u00e9c\u00e9dents, nous nous sommes occup\u00e9s de la <em>routine d'entr\u00e9e<\/em> et de la <em>t\u00e2che de recherche<\/em>. Elles seront utiles pour \u00e9crire un programme principal plus court. Il y a cependant encore une question majeure: comment r\u00e9soudre la probl\u00e8me pos\u00e9? La mani\u00e8re la plus directe serait de simuler le programme BASIC:<\/p>\n<ul>\n<li>soit <code>prog<\/code> le programme en BASIC (une liste de cha\u00eenes)<\/li>\n<li>d\u00e9marrer un compteur appel\u00e9 <code>location<\/code> \u00e0 0, puisque l'on commence \u00e0 la premi\u00e8re ligne du programme<\/li>\n<li>Tant que toujours (<code>while\u00a0<\/code><code>True<\/code>),\n<ul>\n<li>si <code>prog[location]<\/code> est la ligne END, retourner \"<code>terminaison<\/code>\" et arr\u00eater.<\/li>\n<li>soit <code>T<\/code> la cha\u00eene cible indiqu\u00e9e dans <code>prog[location]<\/code><\/li>\n<li>assignons \u00e0\u00a0<code>location<\/code> la valeur retourn\u00e9e par\u00a0<code>trouveLigne(prog, T)<\/code><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Mais il y a un probl\u00e8me de taille: les boucles infinies ne sont pas d\u00e9tect\u00e9es et si le programme BASIC a une boucle infinie, Python va aussi se r\u00e9peter ind\u00e9finiment. Nous voulions que le programme indique \"<code>boucle infinie<\/code>\" dans ce cas. Nous vous laissons r\u00e9soudre ce probl\u00e8me par vous-m\u00eame; vous trouverez un indice ci-dessous.<\/p>\n<p><form class=\"pbform\" action=\"#\" id=\"pbform6\" method=\"POST\">\n<div class='pybox modeNeutral ' id='pybox6'>\n<img title='You have not yet completed this problem.' src='https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-content\/plugins\/pybox\/files\/icon.png' class='pycheck'\/><div class=\"heading\"><span class='type'>Coding Exercise: <\/span><span class='title'>Simulation intelligente<\/span><\/div>Ecrivez une fonction <code>execute(prog)<\/code>. Assumez que\u00a0<code>prog<\/code> est une liste de cha\u00eenes contenant un programme BASIC, comme avant. Votre programme devra retourner \"<code>terminaison<\/code>\" ou \"<code>boucle infinie<\/code>\" suivant que le programme se termine ou boucle ind\u00e9finiment. <br\/><strong>Important<\/strong>: vous assumerez que la proc\u00e9dure <code>trouveLigne(prog, cible)<\/code> d\u00e9finie \u00e0 la sous-t\u00e2che 2 existe d\u00e9j\u00e0, vous ne devez pas la r\u00e9\u00e9crire. <a class=\"hintlink\"  id=\"hintlink7\">Indice<\/a> <div class=\"helpOuter\" style=\"display: none;\"><div class=\"helpInner\"><div style=\"text-align: center\">You need to create an account and log in to ask a question.<\/div><\/div><\/div><div class='pyboxTextwrap pyboxCodewrap RW resizy'  style='height: 526px;'><textarea wrap='off' name='usercode6' id='usercode6'  cols=10 rows=20   class='pyboxCode RW'>\n# here is a broken solution to get you started\ndef execute(prog):\n  location = 0\n  while True:\n    if location==len(prog)-1: return \"terminaison\"\n    #get T from prog[location] via str.split\n    location = trouveLigne(prog, T)\n<\/textarea><\/div>\n<div id='pbhistory6' class='flexcontain' style='display:none;'><\/div>\n<div name=\"pyinput\" id=\"pyinput6\">Enter testing statements like <code>print(myfunction(\"test argument\"))<\/code> below.<div class=\"pyboxTextwrap resizy\" style=\"height: 102px;\" ><textarea wrap=\"off\" name=\"userinput\" class=\"pyboxInput\" cols=10 rows=4><\/textarea><\/div><\/div>\n<input type='hidden' id='defaultCode6' value='# here is a broken solution to get you started\\ndef execute(prog):\\n  location = 0\\n  while True:\\n    if location==len(prog)-1: return \\\"terminaison\\\"\\n    #get T from prog[location] via str.split\\n    location = trouveLigne(prog, T)\\n'><\/input>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit6' value=' '\/><\/td>\n<td><input type='button' name='switch' id=\"switch6\" value=\"Input Switch\" onclick=\"pbInputSwitch(6,'Y')\" ><\/td>\n<td><input type='button' name='consolecopy' value=\"Open in console\" onclick=\"pbConsoleCopy(6)\" ><\/td>\n<td><input type='button' name='visualize' value=\"Visualize\" onclick=\"pbVisualize(6,'Y')\" ><\/td>\n<\/tr><\/table><select id='pbSelect6' class='selectmore'><option name='more'>More actions...<\/option>\n<option name='history' data-pbonclick=\"historyClick(6,'15a.main')\" >History<\/option>\n<option name='default' data-pbonclick=\"pbSetText(6,descape($('#defaultCode6').val()))\" >Reset code to default<\/option>\n<option name='help' data-pbonclick=\"helpClick(6);\" >Help<\/option>\n<\/select><\/div>\n<input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" id=\"inputInUse6\" name=\"inputInUse\" value=\"Y\"\/>\n<input type=\"hidden\" name=\"pyId\" value=\"6\"\/>\n<input type=\"hidden\" name=\"hash\" value=\"780ed49fc75b443cd08c7d03d28f818d\"\/>\n<div id='pbresults6' class='pbresults avoidline'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>jQuery(function(){pbToggleCodeMirror(6);});pbInputSwitch(6,\"Y\");<\/script>\n<\/p>\n<h2>Mettre tout ensemble<\/h2>\n<p>Pour tester votre code comme solution compl\u00e8te, copiez et collez les solutions pr\u00e9c\u00e9dentes ci-dessous.<\/p>\n<p><form class=\"pbform\" action=\"#\" id=\"pbform8\" method=\"POST\">\n<div class='pybox modeNeutral ' id='pybox8'>\n<img title='You have not yet completed this problem.' src='https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-content\/plugins\/pybox\/files\/icon.png' class='pycheck'\/><div class=\"heading\"><span class='type'>Coding Exercise: <\/span><span class='title'>Simulateur BASIC<\/span><\/div>Assemblez votre simulateur BASIC.<div class=\"helpOuter\" style=\"display: none;\"><div class=\"helpInner\"><div style=\"text-align: center\">You need to create an account and log in to ask a question.<\/div><\/div><\/div><div class='pyboxTextwrap pyboxCodewrap RW resizy'  style='height: 526px;'><textarea wrap='off' name='usercode8' id='usercode8'  cols=10 rows=20   class='pyboxCode RW'>\n# def lireBASIC de sous-t\u00e2che 1\n\n# def trouveLigne de sous-t\u00e2che 2\n\n# def execute de sous-t\u00e2che 3\n\nprint(execute(lireBASIC()))\n<\/textarea><\/div>\n<div id='pbhistory8' class='flexcontain' style='display:none;'><\/div>\n<div name=\"pyinput\" id=\"pyinput8\">You may enter input for the program in the box below.<div class=\"pyboxTextwrap resizy\" style=\"height: 102px;\" ><textarea wrap=\"off\" name=\"userinput\" class=\"pyboxInput\" cols=10 rows=4><\/textarea><\/div><\/div>\n<input type='hidden' id='defaultCode8' value='# def lireBASIC de sous-t\\u00e2che 1\\n\\n# def trouveLigne de sous-t\\u00e2che 2\\n\\n# def execute de sous-t\\u00e2che 3\\n\\nprint(execute(lireBASIC()))\\n'><\/input>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit8' value=' '\/><\/td>\n<td><input type='button' name='switch' id=\"switch8\" value=\"Input Switch\" onclick=\"pbInputSwitch(8,'N')\" ><\/td>\n<td><input type='button' name='consolecopy' value=\"Open in console\" onclick=\"pbConsoleCopy(8)\" ><\/td>\n<td><input type='button' name='visualize' value=\"Visualize\" onclick=\"pbVisualize(8,'N')\" ><\/td>\n<\/tr><\/table><select id='pbSelect8' class='selectmore'><option name='more'>More actions...<\/option>\n<option name='history' data-pbonclick=\"historyClick(8,'15a.overall')\" >History<\/option>\n<option name='default' data-pbonclick=\"pbSetText(8,descape($('#defaultCode8').val()))\" >Reset code to default<\/option>\n<option name='help' data-pbonclick=\"helpClick(8);\" >Help<\/option>\n<\/select><\/div>\n<input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" id=\"inputInUse8\" name=\"inputInUse\" value=\"Y\"\/>\n<input type=\"hidden\" name=\"pyId\" value=\"8\"\/>\n<input type=\"hidden\" name=\"hash\" value=\"9fd7b960087e3b3c5936397b040264d3\"\/>\n<div id='pbresults8' class='pbresults avoidline'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>jQuery(function(){pbToggleCodeMirror(8);});pbInputSwitch(8,\"N\");<\/script>\n<\/p>\n<p><table class='pywarn'><tr><td class='pywarnleft'><img src='https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-content\/plugins\/pybox\/files\/warning.png'\/><\/td><td class='pywarnright'><span> Si votre langage de programmation est un peu plus compliqu\u00e9, il est alors\u00a0<em>impossible<\/em>\u00a0d'\u00e9crire un programme de verification de terminaison. Ceci est un des th\u00e9or\u00e8mes le plus ancien et le plus important en informatique et il a \u00e9t\u00e9 d\u00e9montr\u00e9 par <a href=\"http:\/\/fr.wikipedia.org\/wiki\/Alan_Turing\">Alan Turing<\/a> dans les ann\u00e9es 1930s. De nos jours on se r\u00e9f\u00e8re \u00e0 ce r\u00e9sultat en disant que \"le\u00a0<a href=\"http:\/\/fr.wikipedia.org\/wiki\/Probl%C3%A8me_de_l%27arr%C3%AAt\">Probl\u00e8me de l'arr\u00eat<\/a>\u00a0est ind\u00e9cidable.\" <\/span><\/td><\/table><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Les exercices 15A, 15B et 15C peuvent \u00eatre fait dans n'importe quel ordre. Dans cet exercice, vous allez r\u00e9soudre un probl\u00e8me long et complexe qui a \u00e9t\u00e9 d\u00e9coup\u00e9 en petites parties pour vous. Cette le\u00e7on introduit str.split(), une m\u00e9thode utile &hellip; <a href=\"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/15a-fr\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-4686","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages\/4686","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/comments?post=4686"}],"version-history":[{"count":27,"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages\/4686\/revisions"}],"predecessor-version":[{"id":10728,"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages\/4686\/revisions\/10728"}],"wp:attachment":[{"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/media?parent=4686"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}