{"id":5530,"date":"2012-09-12T20:41:13","date_gmt":"2012-09-13T00:41:13","guid":{"rendered":"http:\/\/cscircles.cemc.uwaterloo.ca\/?page_id=5530"},"modified":"2024-07-11T06:14:17","modified_gmt":"2024-07-11T10:14:17","slug":"15a-de","status":"publish","type":"page","link":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/15a-de\/","title":{"rendered":"15A: Das ENDe?"},"content":{"rendered":"<p><em>Die Aufgaben 15A, 15B, und 15C k\u00f6nnen in beliebiger Reihenfolge bearbeitet werden.<\/em><\/p>\n<p>In dieser \u00dcbung wirst du ein langes und komplexes Problem bearbeiten, das f\u00fcr dich in Einzelteile zerlegt wurde. In dieser \u00dcbung findest du auch <code>str.split()<\/code>, eine hilfreiche Methode, um Strings, also Zeichenketten aufzusplitten: es l\u00f6scht alle Leerzeichen und gibt dann eine Liste all jener Worte in der Zeichenkette aus. Die Originalkette wird dabei nicht ver\u00e4ndert.<\/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>Beispiele f\u00fcr <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 = 'This is a string'\nwords = S.split()\nprint(words)\nprint(len(words))\nprint(words[1])\nprint(S) # S is not changed\nprint(' Another example of 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=\"533aa6aa28ed7c23eeaf5a56a9ce3338\"\/>\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> Du kannst <code>split()<\/code> mit besonderen Argumenten aufrufen, um ein anspruchsvolleres Splitting durchzuf\u00fchren, aber wir brauchen diese F\u00e4higkeit weiter unten nicht. Wenn du aber interessiert bist, findest du weitere Details in der <a href=\"http:\/\/docs.python.org\/py3k\/library\/stdtypes.html#str.split\">Python Dokumentation<\/a>. <\/span><\/td><\/table><\/p>\n<p>Jetzt k\u00f6nnen wir zum eigentlichen Problem vorsto\u00dfen. Die alte Programmiersprache <a href=\"http:\/\/de.wikipedia.org\/wiki\/BASIC\">BASIC<\/a> war ber\u00fchmt f\u00fcr ihre nummerierten Zeilen und <code>goto<\/code> Statements. F\u00fcr diese \u00dcbung wirst du eine einfache Version von BASIC implementieren, die nur diese Eigenschaften hat. Um es genauer zu sagen: die Eingabe f\u00fcr dein Programm wird aus mehreren Zeilen des Formats<\/p>\n<p style=\"text-align: center;\"><code>\u00ablabel\u00bb goto \u00abtarget\u00bb<\/code><\/p>\n<p>erstellt, wobei <code>\u00ablabel\u00bb<\/code>\u00a0und <code>\u00abtarget\u00bb<\/code> positive ganze Zahlen sind. Das <em>Label<\/em> ist sowas wie der Name oder die Adresse der Zeile; alle Labels sind einzigartig. Das <em>Ziel<\/em> (engl.: <em>target<\/em>) sagt dir, zu welchem Label, bzw. zu welcher Zeile als n\u00e4chstes <em>gegangen<\/em> wird (engl.: <em>go to<\/em>). Die letzte Zeile des Programms ist <code>\u00ablabel\u00bb END<\/code> , was anzeigt, dass du aufh\u00f6ren solltest, wenn du diese Zeile erreichst. Hier ist ein einfaches BASIC-Programm:<\/p>\n<pre>5 GOTO 30\n10 GOTO 20\n20 GOTO 10\n30 GOTO 40\n40 END<\/pre>Wenn BASIC das Programm ausf\u00fchrt, passiert folgendes. Wir fangen mit der ersten Zeile an (mit dem Label 5). Die Zeile mit dem Label 5 hat das Ziel 30, also machen wir weiter mit der Zeile mit dem Label 30. Dann sagt uns Zeile 30, dass als n\u00e4chstes Zeile 40 dran ist. Zeile 40 sagt uns: END. Also wurde das Programm erfolgreich beendet.<\/p>\n<p>Andererseits, kann ein BASIC-Programm in einer ewigen Schleife sein. Hier ist ein Beispiel:<\/p>\n<pre>10 GOTO 21\n21 GOTO 37\n37 GOTO 21\n40 END<\/pre>Das Programm beginnt mit der Zeile 10, aber dann vollf\u00fchrt es eine unendliche Schleife zwischen den Zeilen 21 und 37.<\/p>\n<p><strong>Deine Aufgabe<\/strong> ist es, ein Python-Programm zu schreiben, das ein BASIC Programm als Eingabe einliest. Wenn das Programm zu Ende ist, sollte es <code>success<\/code> ausgeben. Wenn das Programm eine unendliche Schleife beginnt, sollte dein Programm <code>infinite loop<\/code> ausgeben. Nimm an, dass jedes Ziel gleich einem zul\u00e4ssigen Label ist, und dass es kein Label zweimal gibt, so dass du nicht nochmal auf Fehler \u00fcberpr\u00fcfen musst.<\/p>\n<p>Es gibt mehrere Ans\u00e4tze, um dieses Problem zu l\u00f6sen, aber in dieser \u00dcbung haben wir eine einfache Variante ausgew\u00e4hlt, die das Problem in 3 kleinere Auftr\u00e4ge unterteilt. (In der Lektion 15C hast du ein gro\u00dfes Problem und musst die kleineren Auftr\u00e4ge selbst entwerfen).<\/p>\n<h2>Auftrag 1: Das Programm lesen<\/h2>\n<p>Um das Programm zu lesen, m\u00fcssen wir immer wieder <a href=\"http:\/\/cscircles.cemc.uwaterloo.ca\/5-de\/\" target=\"_blank\" rel=\"noopener noreferrer\"><code>input()<\/code><\/a> aufrufen. Wir m\u00fcssen jedoch aufh\u00f6ren, <code>input()<\/code> aufzurufen, wenn die letzte Zeile (die mit\u00a0<code>END<\/code>) erreicht wurde, um einen <code>EOFError<\/code> zu vermeiden.<\/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'>Reading the Program<\/span><\/div>Schreibe eine Funktion <code>getBASIC()<\/code>, die keine Argumente nimmt und folgendes macht: Sie sollte Zeilen aus der Eingabe lesen, indem sie eine while Schleife verwendet. Wenn das Ende erreicht wurde, sollte sie das ganze Programm zur\u00fcckgeben als eine Auflistung von Zeichenketten bzw. Strings. (Tipp: \u00fcber <a class=\"hintlink\"  id=\"hintlink2\">Listen<\/a> und <a class=\"hintlink\"  id=\"hintlink3\">das Beenden von Schleifen<\/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=\"6c902a898cd352905e59e4a948f963fa\"\/>\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>Auftrag 2: Geh dort hin!<\/h2>\n<p>Wenn wir das Programm ausgelesen haben, m\u00fcssen wir in der Lage sein, uns im Programm von Zeile zu Zeile zu bewegen. Um dies zu erreichen, m\u00f6chten wir, dass du die folgende Subroutine schreibst:<\/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'>Geh dort hin<\/span><\/div>Definiere eine Funktion <code>findLine(prog, target)<\/code>, die das Folgende machen soll: Nimm an, <code>prog<\/code> sei eine Liste von Strings, die ein BASIC-Programm enthalten, wie der Typ, der von <code>getBASIC()<\/code> erzeugt wird. Nimm weiterhin an, dass <code>target<\/code> ein String ist, der eine Zeilennummer enth\u00e4lt, die das Ziel eines GOTO Statements ist. Die Funktion soll den Index <code>i<\/code> (eine Zahl zwischen <code>0<\/code> und <code>len(prog)-1<\/code>) so zur\u00fcckgeben, dass <code>prog[i]<\/code> die Zeile ist, deren Label gleich <code>target <\/code>ist. <a class=\"hintlink\"  id=\"hintlink5\">Tipp<\/a> <br\/><strong>Muster Ein- \/ Ausgabe:<\/strong> Wenn du folgendes aufrufst:<\/p>\n<pre>findLine(['10 GOTO 20','20 END'], '10')<\/pre>sollte die Ausgabe <code>0<\/code> sein, da der Eintrag 0 der Liste die Zeile mit dem Label 10 ist.<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=\"8c316845bc2d4438b889714c65928444\"\/>\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>Auftrag 3: Geschickt Simuliert<\/h2>\n<p>In den vorhergehenden beiden \u00dcbungen haben wir die Eingaberoutine und den Suchauftrag behandelt. Diese werden uns dabei hilfreich sein, das Hauptprogramm knapper zu schreiben. Trotz all dem bleibt eine wichtige Frage: wie k\u00f6nnen wir das urspr\u00fcngliche Problem l\u00f6sen? Am einfachsten w\u00e4re es, wenn wir einfach das BASIC Programm simulieren w\u00fcrden:<\/p>\n<ul>\n<li>nehmen wir an, dass <code>prog<\/code> das BASIC Programm ist (eine Liste mit Strings)<\/li>\n<li>lassen wir einen Z\u00e4hler (den wir <code>location<\/code> nennen) bei 0 beginnen, da wir mit der ersten Zeile des Programms anfangen<\/li>\n<li>while True,\n<ul>\n<li>wenn <code>prog[location]<\/code> die END-Zeile ist, gib \"success\" ein und beende das Programm.<\/li>\n<li>Lege <code>T<\/code> als die\u00a0 Ziel-Zeichenkette fest, die unter <code>prog[location]<\/code> aufgef\u00fchrt wird<code><\/code><\/li>\n<li>Lege\u00a0<code>findLine(prog, T)<\/code> als den neuen Wert von\u00a0<code>location<\/code> fest<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Dies hat aber eine gro\u00dfe Schwachstelle: dieser Vorgang erlaubt es uns nicht, unendliche Schleifen aufzusp\u00fcren und, wenn das BASIC-Programm eine unendliche Schleife hat, dann wird auch das Python Programm eine unendliche Schleife ausf\u00fchren. Was wir wollten, war, dass das Programm \"unendliche Schleife\" in dieser Situation ausgibt. Wir \u00fcberlassen es Dir, eine L\u00f6sung f\u00fcr dieses Problem zu finden, unten findest du einen Tipp dazu.<\/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'>Smart Simulation<\/span><\/div>Schreibe eine Funktion namens <code>execute(prog)<\/code>, die das Folgende macht: Nimm an, dass <code>prog<\/code> eine Liste von Zeichenketten ist, die das BASIC-Programm enthalten wie vorher. Nun soll dein Programm entweder \"<code>success<\/code>\" oder \"<code>infinite loop<\/code>\" ausgeben, je nachdem ob das Programm terminiert oder eine unendliche Schleife ausf\u00fchrt. <strong>Wichtig<\/strong>: du solltest annehmen, dass <code>findLine(prog, target)<\/code>, das wir in der Unteraufgabe 2 definiert haben, bereits definiert ist, du musst es nicht neu schreiben. <a class=\"hintlink\"  id=\"hintlink7\">Tipp<\/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 \"success\"\n    #get T from prog[location] via str.split\n    location = findLine(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 \\\"success\\\"\\n    #get T from prog[location] via str.split\\n    location = findLine(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=\"8cb015415ecc3a1fb073b9dfce9ec79c\"\/>\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>Alles zusammenf\u00fchren<\/h2>\n<p>Um deinen Code als Komplettl\u00f6sung zu testen, kopiere deine vorherigen L\u00f6sungen in das folgende Muster.<\/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'>BASIC Simulator<\/span><\/div>Stelle Deinen BASIC Simulator zusammen.<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 getBASIC from subtask 1\n\n# def findLine from subtask 2\n\n# def execute from subtask 3\n\nprint(execute(getBASIC()))\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 getBASIC from subtask 1\\n\\n# def findLine from subtask 2\\n\\n# def execute from subtask 3\\n\\nprint(execute(getBASIC()))\\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=\"65fa257da1397c3584f44a84247679b0\"\/>\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> Wenn deine Programmiersprache etwas komplizierter ist, dann ist es unm\u00f6glich, ein Programm zu schreiben, das die Terminierung \u00fcberpr\u00fcft. Das war das fr\u00fcheste Theorem in der Informatik, es wurde von <a href=\"http:\/\/de.wikipedia.org\/wiki\/Alan_Turing\">Alan Turing<\/a> in den 1930er Jahren bewiesen und wenn Leute heute dar\u00fcber reden, dann sagen sie \"das <a href=\"http:\/\/de.wikipedia.org\/wiki\/Halteproblem\">Halteproblem <\/a>ist unl\u00f6sbar\"  <\/span><\/td><\/table><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Die Aufgaben 15A, 15B, und 15C k\u00f6nnen in beliebiger Reihenfolge bearbeitet werden. In dieser \u00dcbung wirst du ein langes und komplexes Problem bearbeiten, das f\u00fcr dich in Einzelteile zerlegt wurde. In dieser \u00dcbung findest du auch str.split(), eine hilfreiche Methode, &hellip; <a href=\"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/15a-de\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2653,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-5530","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages\/5530","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\/2653"}],"replies":[{"embeddable":true,"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/comments?post=5530"}],"version-history":[{"count":31,"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages\/5530\/revisions"}],"predecessor-version":[{"id":15946,"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages\/5530\/revisions\/15946"}],"wp:attachment":[{"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/media?parent=5530"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}