{"id":431,"date":"2021-08-03T10:43:59","date_gmt":"2021-08-03T13:43:59","guid":{"rendered":"http:\/\/www.galirows.com.br\/meublog\/competir\/?page_id=431"},"modified":"2021-08-03T10:44:45","modified_gmt":"2021-08-03T13:44:45","slug":"importancia-pensar-elementos-for","status":"publish","type":"page","link":"http:\/\/www.galirows.com.br\/meublog\/competir\/solucao-computacional-x-matematica\/importancia-pensar-elementos-for\/","title":{"rendered":"Import\u00e2ncia de pensar os elementos de uma estrutura for"},"content":{"rendered":"\n<p>O la\u00e7o de repeti\u00e7\u00e3o <strong>for <\/strong>\u00e9 muitas vezes escrito de forma autom\u00e1tica conforme a estrutura a seguir.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"c\" class=\"language-c\">for (i = 0; i &lt; n; i++) {\n    \/\/faz algo\n}<\/code><\/pre>\n\n\n\n<p>Embora essa estrutura\u00e7\u00e3o seja v\u00e1lida para muitos problemas, vale a pena avaliar se o valor inicial n\u00e3o pode ser maior, se a condi\u00e7\u00e3o de parada pode ser diferente ou se o incremento tamb\u00e9m n\u00e3o pode ser maior. Essas quest\u00f5es podem economizar processamento.<\/p>\n\n\n\n<p>Por exemplo, imagine um c\u00f3digo para mostrar os n\u00fameros inteiros \u00edmpares no intervalo entre zero e 10. O resultado da execu\u00e7\u00e3o ser\u00e3o os valores: 1 3 5 7 9.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"c\" class=\"language-c\">int main() {\n    int i;\n\n    for (i=0; i &lt;= 10; i++) {\n        if (i % 2 == 1) {\n            printf(\"%d \", i);\n        }\n    }\n\n    return 0;\n}<\/code><\/pre>\n\n\n\n<p>O la\u00e7o de repeti\u00e7\u00e3o do c\u00f3digo acima faz com que a vari\u00e1vel <strong>i<\/strong> assuma cada um dos valores do intervalo entre zero e dez. Ou seja, a vari\u00e1vel <strong>i<\/strong> ir\u00e1 assumir cada um dos 10 valores poss\u00edveis do intervalo e o la\u00e7o de repeti\u00e7\u00e3o ir\u00e1 executar seu bloco 10 vezes.<\/p>\n\n\n\n<p>Veja que, embora o intervalo de valores seja entre zero e dez, o primeiro n\u00famero \u00edmpar \u00e9 o n\u00famero 1, enquanto o \u00faltimo n\u00famero \u00edmpar \u00e9 o 9. Sendo assim, modificando o valor inicial e a condi\u00e7\u00e3o de parada do c\u00f3digo n\u00e3o alterar\u00e3o o resultado do algoritmo e ser\u00e1 poss\u00edvel diminuir o processamento. O c\u00f3digo com a altera\u00e7\u00e3o \u00e9 mostrado a seguir.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"c\" class=\"language-c\">int main() {\n    int i;\n\n    for (i=1; i &lt; 10; i++) {\n        if (i % 2 == 1) {\n            printf(\"%d \", i);\n        }\n    }\n\n    return 0;\n}<\/code><\/pre>\n\n\n\n<p>Com a modifica\u00e7\u00e3o no valor inicial, o algoritmo ir\u00e1 come\u00e7ar a avalia\u00e7\u00e3o diretamente com o primeiro valor \u00edmpar poss\u00edvel do intervalo (pulando o valor zero). Com a modifica\u00e7\u00e3o na condi\u00e7\u00e3o de parada, o algoritmo n\u00e3o ir\u00e1 continuar avaliando valores depois do \u00faltimo valor \u00edmpar poss\u00edvel. Com isso, o la\u00e7o de repeti\u00e7\u00e3o reduziu a quantidade de vezes que o bloco executa para 8 vezes (eram 10 vezes anteriormente).<\/p>\n\n\n\n<p>Veja tamb\u00e9m que os valores \u00edmpares sempre ocorrem com incremento de dois e dois. Com isso, alterando o incremento da vari\u00e1vel de controle do <strong>for<\/strong>, podemos ter mais uma diminui\u00e7\u00e3o do processamento. O c\u00f3digo com a modifica\u00e7\u00e3o no incremento \u00e9 mostrado a seguir, fazendo a vari\u00e1vel <strong>i<\/strong> ser incrementada de duas em duas unidades. <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"c\" class=\"language-c\">int main() {\n    int i;\n\n    for (i=1; i &lt; 10; i=i+2) {\n        if (i % 2 == 1) {\n            printf(\"%d \", i);\n        }\n    }\n\n    return 0;\n}<\/code><\/pre>\n\n\n\n<p>Com essa modifica\u00e7\u00e3o no c\u00f3digo, a vari\u00e1vel <strong>i<\/strong> assumir\u00e1 os valores 1, 3, 5, 7 e 9 durante a execu\u00e7\u00e3o do c\u00f3digo (apenas e exatamente os valores que s\u00e3o \u00edmpares no intervalo entre zero e dez). Com isso, a estrutura de repeti\u00e7\u00e3o ir\u00e1 executar seu bloco apenas 5 vezes (metade do que era executado na primeira vers\u00e3o do c\u00f3digo). <\/p>\n\n\n\n<p>Outra melhoria que agora pode ser feita no c\u00f3digo \u00e9 dispensar o uso do desvio condicional, uma vez que todos os n\u00fameros que a vari\u00e1vel <strong>i<\/strong> pode assumir sempre passar\u00e3o no teste da estrutura <strong>if<\/strong>. O c\u00f3digo final com essa modifica\u00e7\u00e3o \u00e9 mostrado a seguir.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"c\" class=\"language-c\">int main() {\n    int i;\n\n    for (i=1; i &lt; 10; i=i+2) {\n        printf(\"%d \", i);\n    }\n\n    return 0;\n}<\/code><\/pre>\n\n\n\n<p>Com a remo\u00e7\u00e3o do desvio condicional, 5 testes desnecess\u00e1rios deixaram de ser feito, uma vez que o teste sempre seria verdadeiro e o <strong>printf <\/strong>precisaria ser feito.<\/p>\n\n\n\n<p>Veja como \u00e9 importante pensar e repensar seu c\u00f3digo a fim de otimizar sua execu\u00e7\u00e3o. Na primeira vers\u00e3o do c\u00f3digo o la\u00e7o de repeti\u00e7\u00e3o executa 10 vezes e faz 10 testes para mostrar os 5 valores poss\u00edveis do intervalo. Na \u00faltima vers\u00e3o do c\u00f3digo, o la\u00e7o de repeti\u00e7\u00e3o executa 5 vezes e nenhum teste \u00e9 necess\u00e1rio para mostrar exatamente os mesmos 5 valores do intervalo.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>O la\u00e7o de repeti\u00e7\u00e3o for \u00e9 muitas vezes escrito de forma autom\u00e1tica conforme a estrutura a seguir. Embora essa estrutura\u00e7\u00e3o seja v\u00e1lida para muitos problemas, vale a pena avaliar se o valor inicial n\u00e3o pode ser maior, se a condi\u00e7\u00e3o de parada pode ser diferente ou se o incremento tamb\u00e9m n\u00e3o pode ser maior. Essas [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":282,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-431","page","type-page","status-publish","hentry"],"aioseo_notices":[],"amp_enabled":true,"_links":{"self":[{"href":"http:\/\/www.galirows.com.br\/meublog\/competir\/wp-json\/wp\/v2\/pages\/431","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.galirows.com.br\/meublog\/competir\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"http:\/\/www.galirows.com.br\/meublog\/competir\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"http:\/\/www.galirows.com.br\/meublog\/competir\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.galirows.com.br\/meublog\/competir\/wp-json\/wp\/v2\/comments?post=431"}],"version-history":[{"count":4,"href":"http:\/\/www.galirows.com.br\/meublog\/competir\/wp-json\/wp\/v2\/pages\/431\/revisions"}],"predecessor-version":[{"id":435,"href":"http:\/\/www.galirows.com.br\/meublog\/competir\/wp-json\/wp\/v2\/pages\/431\/revisions\/435"}],"up":[{"embeddable":true,"href":"http:\/\/www.galirows.com.br\/meublog\/competir\/wp-json\/wp\/v2\/pages\/282"}],"wp:attachment":[{"href":"http:\/\/www.galirows.com.br\/meublog\/competir\/wp-json\/wp\/v2\/media?parent=431"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}