{"id":9803,"date":"2017-04-26T01:44:44","date_gmt":"2017-04-26T05:44:44","guid":{"rendered":"https:\/\/cscircles.cemc.uwaterloo.ca\/?page_id=9803"},"modified":"2017-05-16T16:39:44","modified_gmt":"2017-05-16T20:39:44","slug":"pl-1-variables","status":"publish","type":"page","link":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/pl-1-variables\/","title":{"rendered":"1: Zmienne"},"content":{"rendered":"<!-- Please retain this notice and add more notes if you create a new version. Original lesson author: David Pritchard, daveagp@gmail.com, http:\/\/cscircles.ca License: http:\/\/creativecommons.org\/licenses\/by-nc-sa\/3.0\/-->\n<p>Zmienne stanowi\u0105 \"miejsce przechowywania\" danych w programie. To jest spos\u00f3b nazywania informacji do p\u00f3\u017aniejszego wykorzystania. Ka\u017cda zmienna ma <em>nazw\u0119<\/em>; na przyk\u0142ad nazw\u0105 zmiennej b\u0119dzie <code>myLuckyNumber<\/code>.  Aby zapisa\u0107 informacj\u0119 w zmiennej, piszemy komend\u0119 u\u017cywaj\u0105c znaku r\u00f3wno\u015bci w nast\u0119puj\u0105cy spos\u00f3b:<\/p>\n<pre>\u00abnazwa zmiennej\u00bb = \u00abwarto\u015b\u0107 jak\u0105 chcesz przechowa\u0107\u00bb<\/pre>(W naszych lekcjach u\u017cywamy \u00abpodw\u00f3jnych nawias\u00f3w k\u0105towych\u00bb, jak powy\u017cej, w celu wskazania specjalnych cz\u0119\u015bci wyra\u017ce\u0144). Przyk\u0142adowa linia w Pythonie<\/p>\n<pre>myLuckyNumber = 13<\/pre>przechowa warto\u015b\u0107 <code>13<\/code> w zmiennej <code>myLuckyNumber<\/code>. Nast\u0119pnie, je\u015bli gdziekolwiek u\u017cyjesz ponownie nazwy zmiennej <code>myLuckyNumber<\/code>, Python przywo\u0142a zapisan\u0105 warto\u015b\u0107. Poni\u017cej znajduje si\u0119 kr\u00f3tki przyk\u0142ad u\u017cycia zmiennych. Ma wi\u0119cej ni\u017c jedn\u0105 lini\u0119 instrukcji: Python wykonuje pierwsz\u0105 lini\u0119, potem drug\u0105 lini\u0119 i tak dalej a\u017c do ostatniej linii. Naci\u015bnij przycisk <strong>Uruchom program<\/strong>, aby zobaczy\u0107, co on robi. <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>Przyk\u0142ad u\u017cycia zmiennych.<div class='pyboxTextwrap pyboxCodewrap RO '  style='height: 136px;'><textarea wrap='off' name='usercode0' id='usercode0'  cols=10 rows=5 readonly='readonly'  style = 'height : 136px;'  class='pyboxCode RO'>\nmyLuckyNumber = 13\nprint(myLuckyNumber + 1)\nprint(myLuckyNumber)\nmyLuckyNumber = 5 + 2\nprint(myLuckyNumber)<\/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=\"5dd6ce21aa2745304a136e350e68828e\"\/>\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 Sp\u00f3jrz na kolejne 5 wierszy programu i na to, co otrzymujemy na wyj\u015bciu. Jak wida\u0107, <code><code>myLuckyNumber<\/code><\/code> zachowuje warto\u015b\u0107 <code>13<\/code> dla pierwszych dw\u00f3ch instrukcji <code>print<\/code>, a nast\u0119pnie jego warto\u015b\u0107 zostaje zmieniona na <code>7<\/code>. Wprowadzili\u015bmy tak\u017ce operator <em>dodawania<\/em> (<code>+<\/code>), kt\u00f3ry dodaje dwie liczby. Podobnie istniej\u0105 operatory odejmowania (<code>-<\/code>), mno\u017cenia (<code>*<\/code>) i dzielenia (<code>\/<\/code>). Wr\u00f3cimy do nich w p\u00f3\u017aniejszej cz\u0119\u015bci lekcji. Mo\u017cna symulowa\u0107 zawarto\u015b\u0107 pami\u0119ci komputera \u015bledz\u0105c i zapisuj\u0105c  warto\u015bci w tabeli na kartce papieru. Oto przyk\u0142ad; pami\u0119taj, \u017ce <code>*<\/code>  oznacza w Pythonie mno\u017cenie.<\/p>\n<div class=\"pybox\"><strong>Cel<\/strong>: okre\u015blenie ostatecznych warto\u015bci wszystkich zmiennych na koniec programu.<\/p>\n<pre>first = 2\r\nsecond = 3\r\nthird = first * second\r\nsecond = third - first\r\nfirst = first + second + third\r\nthird = second * first<\/pre><strong>Idea<\/strong>: U\u017cywamy tabeli, aby \u015bledzi\u0107 kolejne zmiany warto\u015bci. Przewi\u0144 do do\u0142u, aby zobaczy\u0107 ostateczn\u0105 odpowied\u017a.<\/p>\n<table style=\"margin-bottom: 0px; padding-right: 20px;\">\n<colgroup>\n<col width=\"55%\" \/> <\/colgroup>\n<colgroup>\n<col width=\"15%\" \/>\n<col width=\"15%\" \/>\n<col width=\"15%\" \/> <\/colgroup>\n<tbody>\n<tr align=\"center\">\n<th>Instrukcja<\/th>\n<th colspan=\"3\">Warto\u015bci po wykonaniu instrukcji<\/th>\n<\/tr>\n<tr class=\"mono\" align=\"center\">\n<th><\/th>\n<th>first<\/th>\n<th>second<\/th>\n<th>third<\/th>\n<\/tr>\n<\/tbody>\n<\/table>\n<div style=\"margin-top: 0px; overflow-y: scroll; max-height: 100px;\">\n<table class=\"mono\" style=\"margin-bottom: 5px;\">\n<colgroup>\n<col width=\"55%\" \/> <\/colgroup>\n<colgroup>\n<col width=\"15%\" \/>\n<col width=\"15%\" \/>\n<col width=\"15%\" \/> <\/colgroup>\n<tbody>\n<tr>\n<td>first = 2<\/td>\n<td><strong>2<\/strong><\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>second = 3<\/td>\n<td>2<\/td>\n<td><strong>3<\/strong><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>third = first * second<\/td>\n<td>2<\/td>\n<td>3<\/td>\n<td><strong>6<\/strong><\/td>\n<\/tr>\n<tr>\n<td>second = third - first<\/td>\n<td>2<\/td>\n<td><span style=\"text-decoration: line-through;\">3<\/span> <strong>4<\/strong><\/td>\n<td>6<\/td>\n<\/tr>\n<tr>\n<td>first = first + second + third<\/td>\n<td><span style=\"text-decoration: line-through;\">2<\/span> <strong>12<\/strong><\/td>\n<td>4<\/td>\n<td>6<\/td>\n<\/tr>\n<tr>\n<td>third = second * first<\/td>\n<td>12<\/td>\n<td>4<\/td>\n<td><span style=\"text-decoration: line-through;\">6<\/span> <strong>48<\/strong><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Tak wi\u0119c po wykonaniu programu, warto\u015b\u0107 <code>first<\/code> wynosi <code>12<\/code>, warto\u015b\u0107 <code>second<\/code> wynosi <code>4<\/code>, i warto\u015b\u0107 <code>third<\/code> wynosi <code>48<\/code>.<\/p>\n<\/div>\n<\/div>\n<p>Rysowanie na papierze o\u0142\u00f3wkiem tabeli jest zawsze dobrym pomys\u0142em i jest pomocne przy w zrozumieniu lub ustaleniu kodu. Mamy tak\u017ce zautomatyzowane narz\u0119dzie <a href=\"\/visualize\">wizualizacji Pythona 3<\/a>, kt\u00f3re wykonuje takie programy, jak ten krok po kroku (zobacz tak\u017ce link w g\u00f3rnym menu). Zobacz, jak to wygl\u0105da, gdy uruchamiamy ten sam program na wizualizerze. <em>U\u017cyj przycisku <strong>Forward <\/strong> lub naci\u015bnij klawisz strza\u0142ki na klawiaturze, aby przej\u015b\u0107 do przodu (lub back).<\/em> Zauwa\u017c, jak zmienne zmieniaj\u0105 si\u0119 w miar\u0119 wykonywania kolejnej linii. <iframe width='100%' height='480' frameborder='0' scrolling='no' src='https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-content\/plugins\/pybox\/OnlinePythonTutor3-cemc\/iframe-embed.html#code=first+%3D+2%0Asecond+%3D+3%0Athird+%3D+first+%2A+second%0Asecond+%3D+third+-+first%0Afirst+%3D+first+%2B+second+%2B+third%0Athird+%3D+second+%2A+first&cumulative=false&heapPrimitives=false&drawParentPointers=false&textReferences=false&showOnlyOutputs=false&py=3&curInstr=0&resizeContainer=true&highlightLines&width=400&rightStdout=1'><\/iframe> Tutaj jest kr\u00f3tkie \u0107wiczenie na temat zmiennych. <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'>Short Answer Exercise: <\/span><span class='title'>Znajd\u017a <code>x<\/code><\/span><\/div> Jaka jest warto\u015b\u0107 <code>x<\/code> po wykonaniu polece\u0144?<\/p>\n<pre>x = 10\r\nx = x + x\r\nx = x - 5<\/pre><label for=\"pyShortAnswer1\">Your answer (enter a number): <\/label><input type=\"text\" onkeypress=\"{if (event.keyCode==13) pbShortCheck(1)}\" id=\"pyShortAnswer1\"><div class=\"pyboxbuttons\"><input type=\"hidden\" name=\"type\" value=\"number\"\/><input type=\"hidden\" name=\"correct\" value=\"15\"\/><input type=\"hidden\" name=\"slug\" value=\"1.plusminus\"\/><input type=\"hidden\" name=\"lang\" value=\"\"\/><input type='submit' style='margin:5px;' value='Check answer' onClick = 'pbShortCheck(1)'\/><\/div><div class=\"pbresults\" id=\"pyShortResults1\"><\/div><div class=\"epilogue\">Correct!<\/div><\/div>\n<h2>Dwa typowe b\u0142\u0119dy<\/h2>\n<p>Je\u015bli zapytasz Pythona o zmienn\u0105, kt\u00f3ra nie zosta\u0142a zdefiniowana, otrzymasz b\u0142\u0105d. <form class=\"pbform\" action=\"#\" id=\"pbform2\" method=\"POST\">\n<div class='pybox modeNeutral  facultative' id='pybox2'>\n<div class=\"heading\"><span class='type'>Example: <\/span><span class='title'>Niezdefiniowana zmienna<\/span><\/div> <div class='pyboxTextwrap pyboxCodewrap RO '  style='height: 32px;'><textarea wrap='off' name='usercode2' id='usercode2'  cols=10 rows=1 readonly='readonly'  style = 'height : 32px;'  class='pyboxCode RO'>\nprint(trouble)<\/textarea><\/div>\n<div id='pbhistory2' class='flexcontain' style='display:none;'><\/div>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit2' value=' '\/><\/td>\n<td><input type='button' name='consolecopy' value=\"Open in console\" onclick=\"pbConsoleCopy(2)\" ><\/td>\n<td><input type='button' name='visualize' value=\"Visualize\" onclick=\"pbVisualize(2,'N')\" ><\/td>\n<\/tr><\/table><\/div>\n<input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" id=\"inputInUse2\" name=\"inputInUse\" value=\"Y\"\/>\n<input type=\"hidden\" name=\"pyId\" value=\"2\"\/>\n<input type=\"hidden\" name=\"hash\" value=\"006ed09542b9a90b389d9d310e99cc3c\"\/>\n<div id='pbresults2' class='pbresults'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>document.getElementById(\"submit2\").value = \"Run program\";document.getElementById(\"inputInUse2\").value = \"N\";<\/script>\n Jak wida\u0107, otrzymali\u015bmy komunikat informuj\u0105cy o b\u0142\u0119dzie <code>NameError: name 'trouble' is not defined<\/code>. Czasami mo\u017cna uzyska\u0107 takie b\u0142\u0119dy z powodu prostych liter\u00f3wek: je\u015bli zdefiniujesz zmienn\u0105 <code>address=32<\/code> a nast\u0119pnie spr\u00f3bujesz wykona\u0107 <code>print(adress)<\/code>, pojawi si\u0119 ten sam typ b\u0142\u0119du. Inny b\u0142\u0105d ma zwi\u0105zek z przypadkow\u0105 zamian\u0105 stron w instrukcji x <code>=<\/code> wyra\u017cenie. <form class=\"pbform\" action=\"#\" id=\"pbform3\" method=\"POST\">\n<div class='pybox modeNeutral  facultative' id='pybox3'>\n<div class=\"heading\"><span class='type'>Example: <\/span><span class='title'><code>SyntaxError: can't assign to literal<\/code><\/span><\/div> <div class='pyboxTextwrap pyboxCodewrap RO '  style='height: 58px;'><textarea wrap='off' name='usercode3' id='usercode3'  cols=10 rows=2 readonly='readonly'  style = 'height : 58px;'  class='pyboxCode RO'>\nx = 4\n4 = x<\/textarea><\/div>\n<div id='pbhistory3' class='flexcontain' style='display:none;'><\/div>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit3' value=' '\/><\/td>\n<td><input type='button' name='consolecopy' value=\"Open in console\" onclick=\"pbConsoleCopy(3)\" ><\/td>\n<td><input type='button' name='visualize' value=\"Visualize\" onclick=\"pbVisualize(3,'N')\" ><\/td>\n<\/tr><\/table><\/div>\n<input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" id=\"inputInUse3\" name=\"inputInUse\" value=\"Y\"\/>\n<input type=\"hidden\" name=\"pyId\" value=\"3\"\/>\n<input type=\"hidden\" name=\"hash\" value=\"130cb3846431645709a90d52b640f87e\"\/>\n<div id='pbresults3' class='pbresults'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>document.getElementById(\"submit3\").value = \"Run program\";document.getElementById(\"inputInUse3\").value = \"N\";<\/script>\n Pierwsza linia jest w porz\u0105dku, druga linia powoduje b\u0142\u0105d: Python w drugiej linii <code>4 = x<\/code> pr\u00f3buje zmieni\u0107 warto\u015b\u0107 <code>4<\/code>, ale taka zmiana jest tylko dozwolona dla warto\u015bci zmiennych, a <code>4<\/code> nie jest zmienn\u0105. Podczas gdy <code>A = B<\/code> i <code>B = A<\/code> s\u0105 tym samym w matematyce, to w programowaniu to r\u00f3\u017cne zapisy.<\/p>\n<h2>\u0106wiczenie<\/h2>\n<p>To jest rozgrzewka by\u015b m\u00f3g\u0142 zacz\u0105\u0107 zajmowa\u0107 si\u0119 zmiennymi. <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'>G\u0142owy, Ramiona, Kolana i Palce<\/span><\/div> Wpisz <em>fragment kodu<\/em> (kr\u00f3tk\u0105 cz\u0119\u015b\u0107 programu w Pythonie) licz\u0105cy g\u0142owy, ramiona, kolana i palce wszystkich os\u00f3b na imprezie. W automatycznym testerze zosta\u0142a ju\u017c dla ciebie  zdefiniowana zmienna <code>people<\/code> okre\u015blaj\u0105ca liczb\u0119 os\u00f3b na imprezie. Tw\u00f3j kod musi definiowa\u0107 cztery zmienne, jedn\u0105 o nazwie <code>heads<\/code>, jedn\u0105 o nazwie <code>shoulders<\/code>, jedn\u0105 o nazwie <code>knees<\/code>, a jedn\u0105 o nazwie <code>toes<\/code>, r\u00f3wne odpowiednio liczbie g\u0142\u00f3w, ramion, kolan i st\u00f3p wszystkich na imprezie. Tw\u00f3j program nie ma drukowa\u0107 \u017cadnych wynik\u00f3w. <em>Ka\u017cdorazowo, gdy uruchomisz program, nasz automatyczny tester b\u0119dzie generowa\u0107 losow\u0105 warto\u015b\u0107 dla <\/em><code>people<\/code>. <br\/> <a class=\"hintlink\"  id=\"hintlink5\">Kliknij tutaj, je\u015bli chcesz skorzysta\u0107 ze wskaz\u00f3wki.<\/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='usercode4' id='usercode4'  cols=10 rows=20   class='pyboxCode RW'>\n<\/textarea><\/div>\n<div id='pbhistory4' class='flexcontain' style='display:none;'><\/div>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit4' value=' '\/><\/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<td><input type='button' name='history' value=\"History\" onclick=\"historyClick(4,'1.heads')\" ><\/td>\n<\/tr><\/table><select id='pbSelect4' class='selectmore'><option name='more'>More actions...<\/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=\"4b7a71f67b0aacce8b47d20e7f4b84ad\"\/>\n<div id='pbresults4' class='pbresults avoidline'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>jQuery(function(){pbToggleCodeMirror(4);});document.getElementById(\"submit4\").value = \"Run program\";document.getElementById(\"inputInUse4\").value = \"N\";<\/script>\n<\/p>\n<h2>Przestawianie kodu<\/h2>\n<p>Nast\u0119pnym punktem tej lekcji jest nowy typ \u0107wiczenia, w kt\u00f3rym nie trzeba programowa\u0107. Zapewniamy Ci prawid\u0142owy program, ale jego kolejne linie zosta\u0142y pomieszane. Twoim zadaniem jest przeci\u0105ganie i upuszczanie linii, aby je uporz\u0105dkowa\u0107 w odpowiedni program. <form class=\"pbform\" action=\"#\" id=\"pbform6\" method=\"POST\">\n<div class='pybox modeNeutral scramble' 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'>Scramble Exercise: <\/span><span class='title'>Szybki kalkulator<\/span><\/div>Jeste\u015b w wy\u015bcigu rower\u00f3w, kt\u00f3ry jedzie w g\u00f3r\u0119 i w d\u00f3\u0142 wzg\u00f3rza. Nasz automatyczny tester zaplanowa\u0142 wst\u0119pnie cztery zmienne: <code>uphillDistance<\/code> i <code>downhillDistance<\/code>,  kt\u00f3re podaj\u0105 dystans (kilometry) w  obu cz\u0119\u015bciach wy\u015bcigu, a <code>uphillTime<\/code> i <code>downhillTime<\/code> podaj\u0105 czas (minuty), jaki zajmuje Ci wykonanie ka\u017cdej z cz\u0119\u015bci wy\u015bcigu. Napisz program, kt\u00f3ry wydrukuje \u015bredni\u0105 pr\u0119dko\u015b\u0107 (w km\/min) dla ca\u0142ego wy\u015bcigu.<br\/><em>Przeci\u0105gnij i upu\u015b\u0107 za pomoc\u0105 myszy, aby zmieni\u0107 kolejno\u015b\u0107 linii.<br\/><\/em><a class=\"hintlink\"  id=\"hintlink7\">Kliknij, podpowiemy, je\u015bli utkniesz<\/a> <ul class=\"pyscramble\" name=\"pyscramble\" id=\"pyscramble6\">\n <li class=\"pyscramble\">totalDistance = uphillDistance + downhillDistance<\/li>\n <li class=\"pyscramble\">print(averageSpeed)<\/li>\n <li class=\"pyscramble\">averageSpeed = totalDistance \/ totalTime<\/li>\n <li class=\"pyscramble\">totalTime = uphillTime + downhillTime<\/li>\n<\/ul>\n<input type='hidden' id='usercode6' name='usercode6'\/>\n<div id='pbhistory6' class='flexcontain' style='display:none;'><\/div>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit6' value=' '\/><\/td>\n<\/tr><\/table><\/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=\"200dab76192e7c865ff10c18cc70288d\"\/>\n<div id='pbresults6' class='pbresults'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>document.getElementById(\"submit6\").value = \"Run program\";document.getElementById(\"inputInUse6\").value = \"N\";<\/script>\n<\/p>\n<h2>Exchange Program<\/h2>\n<p>To jest ostatnie \u0107wiczenie na tej lekcji. <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'>Program zamiany<\/span><\/div>Napisz program, kt\u00f3ry <strong>zamienia<\/strong> warto\u015bci dw\u00f3ch zmiennych. Zmienne  <code>x<\/code> i <code>y<\/code> s\u0105 ju\u017c w naszym automatycznym testerze zdefiniowane dla Ciebie i zawieraj\u0105 warto\u015bci liczbowe . Musisz napisa\u0107 kod, kt\u00f3ry wymienia ich warto\u015bci: warto\u015b\u0107 <code>x<\/code> po uruchomieniu kodu musi by\u0107 r\u00f3wna warto\u015bci, kt\u00f3r\u0105 <code>y<\/code> mia\u0142o przed uruchomieniem kodu, a warto\u015b\u0107 <code>y<\/code> po uruchomieniu kodu musi r\u00f3wna\u0107 si\u0119 warto\u015bci, jak\u0105 <code>x<\/code> mia\u0142o przed uruchomieniem kodu. Tw\u00f3j program nie musi drukowa\u0107 \u017cadnych danych wyj\u015bciowych. <br\/><em>Najprostsze rozwi\u0105zanie jest kr\u00f3tkie, ale mo\u017ce by\u0107 trudne do znalezienia. Mo\u017cesz klikn\u0105\u0107 na ka\u017cd\u0105 ze wskaz\u00f3wek, je\u015bli chcesz j\u0105 przeczyta\u0107. <\/em> <div class=\"accordion\"> <div class='collapseContain hiding'>\n<div class='collapseHead'><span class='icon'><\/span>\nWskaz\u00f3wka, cz\u0119\u015b\u0107 1\n<\/div>\n<div class='collapseBody'>Aby rozwi\u0105za\u0107 ten problem nie musisz u\u017cywa\u0107 \u017cadnych operator\u00f3w arytmetycznych (<code>+ - * \/<\/code>). Potrzebujesz u\u017cy\u0107 tylko zmiennych i znaku <code>=<\/code>. Mo\u017cesz zdefiniowa\u0107 nowe zmienne pod dowoln\u0105 nazw\u0105, je\u015bli potrzebujesz. <\/div><\/div><div class='collapseContain hiding'>\n<div class='collapseHead'><span class='icon'><\/span>\nWskaz\u00f3wka, cz\u0119\u015b\u0107 2\n<\/div>\n<div class='collapseBody'>Mamy dwa cele: przenie\u015b\u0107 oryginaln\u0105 warto\u015b\u0107 <code>y<\/code> na <code>x<\/code>, a oryginaln\u0105 warto\u015b\u0107 <code>x<\/code> na <code>y<\/code>. Gdyby\u015bmy tylko chcieli zrealizowa\u0107 pierwszy cel (innymi s\u0142owy, gdyby\u015bmy tylko chcieli umie\u015bci\u0107 warto\u015b\u0107 <code>y<\/code> w <code>x<\/code>), mogliby\u015bmy do tego u\u017cy\u0107 tylko jeden wiersz programu:<\/p>\n<pre>x = y<\/pre>Jak mo\u017cemy zrealizowa\u0107 oba cele jednocze\u015bnie? <\/div><\/div><div class='collapseContain hiding'>\n<div class='collapseHead'><span class='icon'><\/span>\nWskaz\u00f3wka, cz\u0119\u015b\u0107 3\n<\/div>\n<div class='collapseBody'>Nast\u0119puj\u0105cy program wydaje si\u0119 by\u0107 obiecuj\u0105cy:<\/p>\n<pre>x = y\r\ny = x<\/pre>Ale jest pewien problem. Za\u0142\u00f3\u017cmy na przyk\u0142ad, \u017ce <code>x<\/code> jest r\u00f3wne 10 a <code>y<\/code> 99. Je\u015bli b\u0119dziemy uruchamia\u0107 powy\u017cszy dwuwierszowy program, po pierwszej linijce <code>x<\/code> i <code>y<\/code> b\u0119d\u0105 r\u00f3wne 99. Druga linia nie przynosi  \u017cadnego efektu. Mo\u017cesz wpisa\u0107 ten program i uruchomi\u0107 go, aby sprawdzi\u0107, co si\u0119 dzieje. Nale\u017cy si\u0119 zastanowi\u0107, jak mo\u017cna zachowa\u0107 gdzie\u015b pierwotn\u0105 warto\u015b\u0107 <code>x<\/code>, aby p\u00f3\u017aniej j\u0105 u\u017cy\u0107? <\/div><\/div><div class='collapseContain hiding'>\n<div class='collapseHead'><span class='icon'><\/span>\nWskaz\u00f3wka, cz\u0119\u015b\u0107 4\n<\/div>\n<div class='collapseBody'>Twoja pierwsza linia mog\u0142aby na przyk\u0142ad wygl\u0105da\u0107 tak  <code>xOriginal = x<\/code>, by m\u00f3c u\u017cy\u0107 p\u00f3\u017aniej oryginaln\u0105 warto\u015b\u0107  <code>x<\/code>. Nast\u0119pnie mo\u017cna zapisa\u0107  <code>x = y<\/code>. Na koniec ustalmy, \u017ce <code>y<\/code> jest r\u00f3wne pierwotnej warto\u015bci <code>x<\/code>.<\/div><\/div><div class='collapseContain hiding'>\n<div class='collapseHead'><span class='icon'><\/span>\nWskaz\u00f3wka, cz\u0119\u015b\u0107 5\n<\/div>\n<div class='collapseBody'> <a href=\"http:\/\/en.wikipedia.org\/wiki\/Swap_(computer_science)#Using_a_temporary_variable\">Kliknij, aby przeczyta\u0107 stron\u0119 Wikipedii<\/a> podaj\u0105c\u0105 pseudokod (w innym j\u0119zyku) zamiany warto\u015bci zmiennych. Oto link do <a href=\"http:\/\/en.wikipedia.org\/wiki\/Swap_by_addition_and_subtraction#Variations\">drugiej metody<\/a>, kt\u00f3ra w ciekawy spos\u00f3b wykorzystuje arytmetyk\u0119, ale b\u0119dzie dzia\u0142a\u0107 tylko na liczbach, a nie na tek\u015bcie.<\/div><\/div><\/div> <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<\/textarea><\/div>\n<div id='pbhistory8' class='flexcontain' style='display:none;'><\/div>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit8' value=' '\/><\/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,'Y')\" ><\/td>\n<td><input type='button' name='history' value=\"History\" onclick=\"historyClick(8,'1.swap')\" ><\/td>\n<\/tr><\/table><select id='pbSelect8' class='selectmore'><option name='more'>More actions...<\/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=\"895eecbb9e96ee2fb849000c5449efaf\"\/>\n<div id='pbresults8' class='pbresults avoidline'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>jQuery(function(){pbToggleCodeMirror(8);});document.getElementById(\"submit8\").value = \"Run program\";document.getElementById(\"inputInUse8\").value = \"N\";<\/script>\n Po prawid\u0142owym wykonaniu tego \u0107wiczenia jeste\u015b gotowy, aby przej\u015b\u0107 do kolejnej lekcji. Kliknij poni\u017cej przycisk <strong>Dalej<\/strong>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Zmienne stanowi\u0105 \"miejsce przechowywania\" danych w programie. To jest spos\u00f3b nazywania informacji do p\u00f3\u017aniejszego wykorzystania. Ka\u017cda zmienna ma nazw\u0119; na przyk\u0142ad nazw\u0105 zmiennej b\u0119dzie myLuckyNumber. Aby zapisa\u0107 informacj\u0119 w zmiennej, piszemy komend\u0119 u\u017cywaj\u0105c znaku r\u00f3wno\u015bci w nast\u0119puj\u0105cy spos\u00f3b: \u00abnazwa zmiennej\u00bb &hellip; <a href=\"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/pl-1-variables\/\">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-9803","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages\/9803","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=9803"}],"version-history":[{"count":24,"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages\/9803\/revisions"}],"predecessor-version":[{"id":9936,"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages\/9803\/revisions\/9936"}],"wp:attachment":[{"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/media?parent=9803"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}