{"id":398,"date":"2019-07-04T22:48:02","date_gmt":"2019-07-04T20:48:02","guid":{"rendered":"http:\/\/disseny-test.uoc.edu\/materials\/programacio\/?page_id=398"},"modified":"2019-09-02T17:18:10","modified_gmt":"2019-09-02T15:18:10","slug":"2-3-1-repeticions","status":"publish","type":"page","link":"http:\/\/disseny-test.uoc.edu\/materials\/programacio\/2-3-1-repeticions\/","title":{"rendered":"2.3.1. Repeticions"},"content":{"rendered":"<p>Els exemples 4-5 i 4-6 del llibre s\u00f3n prou aclaridors. Si fem diverses coses que s\u2019assemblen molt, no cal escriure la mateixa instrucci\u00f3 amb petites variacions moltes vegades, sin\u00f3 que podem fer servir la instrucci\u00f3 <strong><span style=\"font-family: Courier, Arial;\"> for<\/span><\/strong> per a repetir-la sense haver d\u2019escriure-la repetida.<\/p>\n<p>A la instrucci\u00f3 <strong><span style=\"font-family: Courier, Arial;\">for<\/span><\/strong> fem servir una variable (que sovint anomenem <em>i<\/em>) que nom\u00e9s farem servir dins el bloc que conforma la instrucci\u00f3 <strong><span style=\"font-family: Courier, Arial;\">for<\/span><\/strong> i que ens servir\u00e0 per a comptar quants cops repetim les instruccions del bloc.<\/p>\n<p>Com posa al llibre, la instrucci\u00f3 <strong><span style=\"font-family: Courier, Arial;\">for<\/span> <\/strong>t\u00e9 la sintaxi seg\u00fcent:<\/p>\n<pre>for (inici; test; increment) {\r\n\u00a0\u00a0\u00a0\u00a0 bloc d\u2019instruccions\r\n}<\/pre>\n<ul>\n<li>A l\u2019<strong>inici<\/strong> declarem la variable que farem servir per a comptar el nombre de repeticions i li donarem un valor inicial. Pot ser 1, o qualsevol altre.<\/li>\n<li>Al <strong>test<\/strong> comprovarem si ja hem fet totes les repeticions que calia. Per a fer-ho, compararem el valor actual de la variable comptadora amb un valor.<\/li>\n<li>Finalment, a l\u2019<strong>increment<\/strong> indicarem quin nombre hem de sumar a la variable cada cop que fem una volta.<\/li>\n<\/ul>\n<p>Aix\u00ed, en l\u2019exemple 4-6 <span style=\"color: green;\">declarem la variable <em>i<\/em> i la inicialitzem a 20<\/span>, <span style=\"color: red;\">repetirem les instruccions mentre el valor de la variable <em>i<\/em> sigui menor que 400<\/span> i <span style=\"color: #4a86e8;\">a cada volta sumarem 60 al valor que tenim a la variable <em>i<\/em><\/span>.<\/p>\n<pre>for (<span style=\"color: green;\">var i = 20<\/span>; <span style=\"color: red;\">i &lt; 400<\/span>; <span style=\"color: #4a86e8;\">i += 60<\/span>) {<\/pre>\n<p>Al final de l\u2019exemple 4-6 del llibre, tenim la llista de tots els operadors de comparaci\u00f3 que podem fer servir per a posar-los a l\u2019espai de <strong>test<\/strong>. Si us fixeu, per a comprovar si el contingut d\u2019una variable \u00e9s igual a un determinat valor, fem servir el s\u00edmbol ==. D\u2019aquesta manera diferenciem l\u2019assignaci\u00f3 (guardar) de la comparaci\u00f3 (igualtat).<\/p>\n<p>Els exemples 4-7 a 4-13 ens permeten veure usos molt semblants de la repetici\u00f3. Val la pena provar tots els exemples i intentar entendre el que fan.<\/p>\n<p>Vegem un exemple senzill:<\/p>\n<p>Dibuixarem aix\u00f2:<\/p>\n<p><img loading=\"lazy\" class=\"alignnone size-full wp-image-233\" src=\"http:\/\/disseny-test.uoc.edu\/materials\/programacio\/wp-content\/uploads\/sites\/17\/2019\/07\/PID_00258586_2_007.jpg\" alt=\"\" width=\"400\" height=\"401\" srcset=\"http:\/\/disseny-test.uoc.edu\/materials\/programacio\/wp-content\/uploads\/sites\/17\/2019\/07\/PID_00258586_2_007.jpg 400w, http:\/\/disseny-test.uoc.edu\/materials\/programacio\/wp-content\/uploads\/sites\/17\/2019\/07\/PID_00258586_2_007-150x150.jpg 150w, http:\/\/disseny-test.uoc.edu\/materials\/programacio\/wp-content\/uploads\/sites\/17\/2019\/07\/PID_00258586_2_007-300x300.jpg 300w\" sizes=\"(max-width: 400px) 100vw, 400px\" \/><\/p>\n<p>Com?, amb aquest codi:<\/p>\n<pre>function setup() {\r\n  createCanvas(400, 400);\r\n}\r\n\r\nfunction draw() {\r\n  background(220);\r\n  ellipse(50,50,50,50);\r\n  ellipse(100,100,50,50);\r\n  ellipse(150,150,50,50);\r\n  ellipse(200,200,50,50);\r\n  ellipse(250,250,50,50);\r\n  ellipse(300,300,50,50);\r\n  ellipse(350,350,50,50);\r\n}<\/pre>\n<p>Com hem vist, si tenim una instrucci\u00f3 repetida molts cops potser ens va b\u00e9 fer servir un <span style=\"font-family: Courier, Arial;\">for<\/span>. Vegem quines difer\u00e8ncies hi ha entre les diferents crides a la funci\u00f3 <span style=\"font-family: Courier, Arial;\">ellipse()<\/span>.<\/p>\n<p>Si ens fixem, nom\u00e9s varien les posicions. La primera t\u00e9 com a <strong>x<\/strong> 50 i com a <strong>y<\/strong> 50. La segona 100 i 100, la tercera 150 i 150, etc.<\/p>\n<p>Podem dir que la primera <strong>x<\/strong> \u00e9s 50 * 1 (50), la segona 50 * 2 (100), la tercera 50 * 3 (150) i aix\u00ed fins a arribar a la darrera que \u00e9s 50 * 7 (350). Si f\u00e9ssim servir un <span style=\"font-family: Courier, Arial;\">for<\/span>, podr\u00edem tenir un comptador que a cada pas multipliqu\u00e9s la posici\u00f3 inicial dels cercles. Alguna cosa com aix\u00f2:<\/p>\n<pre>ellipse(50*i,50*i,50,50);<\/pre>\n<p>B\u00e9, ho podem provar, aqu\u00ed tenim el codi complet:<\/p>\n<pre>function setup() {\r\n  createCanvas(400, 400);\r\n}\r\n\r\nfunction draw() {\r\n  background(220);\r\n  for (var i = 1; i &lt;= 7; i++){\r\n\tellipse(50*i,50*i,50,50);\r\n  }\r\n}<\/pre>\n<p>Ara els cercles es dibuixen amb el <strong><span style=\"font-family: Courier, Arial;\">for<\/span> <\/strong>que, a cada pas, incrementa en 1 el valor de la variable <em>i<\/em>. El codi ha quedat molt m\u00e9s redu\u00eft i, fins i tot, clar. M\u00e9s endavant veurem exemples m\u00e9s complexos en qu\u00e8 farem m\u00e9s coses, per\u00f2 la idea b\u00e0sica sempre \u00e9s la mateixa, repetir una instrucci\u00f3 amb petits canvis \u00abcontrolats\u00bb per l\u2019\u00edndex.<\/p>\n<div class=\"featured featured-blue\"><p><strong>Nota<\/strong>: Sovint sentireu parlar de <em>bucle<\/em> per a referir-se a un grup d\u2019instruccions que es repeteix. Si busquem la definici\u00f3 de <em>bucle<\/em>, es defineix com un ris (r\u00ednxol) com el dels cabells o com les voltes que fa una molla. La similitud \u00e9s molt gran, ja que en un <em>bucle<\/em> no ens limitem a repetir, tamb\u00e9 anem avan\u00e7ant cap al seu final. La instrucci\u00f3 <strong><span style=\"font-family: Courier, Arial;\">for<\/span> <\/strong>genera un <em>bucle<\/em>. I aquest <em>bucle<\/em> \u00abavan\u00e7a\u00bb perqu\u00e8 la variable <em>i<\/em> va canviant el seu valor, acostant-se cada cop m\u00e9s al valor m\u00e0xim que far\u00e0 que se surti del <em>bucle<\/em>.<\/p>\n<\/div>\n<div class=\"featured featured-grey\"><\/p>\n<p><strong>Un petit exemple en v\u00eddeo<\/strong><\/p>\n<p>Per si encara teniu dubtes de com funciona la instrucci\u00f3 <span style=\"font-family: Courier, Arial;\">for<\/span>, us hem preparat un petit v\u00eddeo que explica, pas a pas, el funcionament de la instrucci\u00f3 <span style=\"font-family: Courier, Arial;\">for<\/span>.<\/p>\n<p><iframe loading=\"lazy\" width=\"640\" height=\"360\" src=\"https:\/\/www.youtube.com\/embed\/grLb_dvatS8?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe><\/p>\n<p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Els exemples 4-5 i 4-6 del llibre s\u00f3n prou aclaridors. Si fem diverses coses que s\u2019assemblen molt, no cal escriure la mateixa instrucci\u00f3 amb petites variacions moltes vegades, sin\u00f3 que podem fer servir la instrucci\u00f3 for per a repetir-la sense haver d\u2019escriure-la repetida. A la instrucci\u00f3 for fem servir una variable (que sovint anomenem i) [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"inline_featured_image":false},"acf":[],"_links":{"self":[{"href":"http:\/\/disseny-test.uoc.edu\/materials\/programacio\/wp-json\/wp\/v2\/pages\/398"}],"collection":[{"href":"http:\/\/disseny-test.uoc.edu\/materials\/programacio\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"http:\/\/disseny-test.uoc.edu\/materials\/programacio\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"http:\/\/disseny-test.uoc.edu\/materials\/programacio\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/disseny-test.uoc.edu\/materials\/programacio\/wp-json\/wp\/v2\/comments?post=398"}],"version-history":[{"count":25,"href":"http:\/\/disseny-test.uoc.edu\/materials\/programacio\/wp-json\/wp\/v2\/pages\/398\/revisions"}],"predecessor-version":[{"id":4185,"href":"http:\/\/disseny-test.uoc.edu\/materials\/programacio\/wp-json\/wp\/v2\/pages\/398\/revisions\/4185"}],"wp:attachment":[{"href":"http:\/\/disseny-test.uoc.edu\/materials\/programacio\/wp-json\/wp\/v2\/media?parent=398"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}