{"id":1156,"date":"2021-08-27T19:16:59","date_gmt":"2021-08-27T22:16:59","guid":{"rendered":"http:\/\/www.galirows.com.br\/meublog\/programacao\/?p=1156"},"modified":"2021-08-30T11:20:18","modified_gmt":"2021-08-30T14:20:18","slug":"ordem-instrucoes-if-altera-velocidade","status":"publish","type":"post","link":"http:\/\/www.galirows.com.br\/meublog\/programacao\/ordem-instrucoes-if-altera-velocidade\/","title":{"rendered":"A ordem das instru\u00e7\u00f5es if altera a velocidade do c\u00f3digo?"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Imagine que voc\u00ea precisa determinar, de um conjunto de dados, quantos valores s\u00e3o pares, \u00edmpares e neutros. Existem diversas formas de elaborar os desvio condicionais, mas basicamente, \u00e9 melhor primeiro testar se o valor \u00e9 par ou \u00edmpar. Existe alguma diferen\u00e7a em rela\u00e7\u00e3o ao tempo de processamento na ordem que os testes forem realizados.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No v\u00eddeo abaixo eu discuto essa quest\u00e3o \u00e9 mostro situa\u00e7\u00f5es onde os testes realizados, e sua ordem de execu\u00e7\u00e3o, alteram a velocidade do c\u00f3digo. <\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"ifs teste\" width=\"685\" height=\"385\" src=\"https:\/\/www.youtube.com\/embed\/VIcl8psbXaY?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">No v\u00eddeo eu recomendo ver tamb\u00e9m um outro v\u00eddeo que gravei e que explica o uso da fun\u00e7\u00e3o clock(), segue o v\u00eddeo: <a href=\"http:\/\/www.galirows.com.br\/meublog\/programacao\/oque-mais-rapido-laco-while-for\/\">O que \u00e9 mais r\u00e1pido: um la\u00e7o while ou um la\u00e7o for?<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O c\u00f3digo que elaborei para determinar o tempo de execu\u00e7\u00e3o \u00e9 disponibilizado a seguir:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"c\" class=\"language-c\">#include &lt;stdio.h&gt;\n#include &lt;time.h&gt;\n#define TAM 100000000\nint main(void) {\n    int i, vezes, contP=0, contI=0, contN=0;\n    int vet[16] = {0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,0};\n    \/\/int vet[16] = {0,1,1,1,2,3,3,3,4,5,5,5,6,7,7,7};\n    \/\/int vet[16] = {0,1,2,2,2,3,4,4,4,5,6,6,6,7,8,8};\n    \/\/int vet[16] = {0,0,0,0,0,0,0,0,4,5,0,0,0,0,0,0};\n    clock_t start, end;\n    float tempo,total1=0,total2=0,total3=0;\n\n    for(int x=0;x&lt;5;x++) {\n        contP = contI = contN = 0;\n        for(vezes=0; vezes &lt; TAM; vezes++) {\n            start = clock();\n            i = 0;\n            while (i &lt; 16) {\n                if (vet[i] % 2 == 0) {\n                    if (vet[i] == 0) {\n                        contN++;\n                    } else {\n                        contP++;\n                    }\n                } else {\n                    contI++;\n                }\n                i++;\n            }\n            end = clock();\n            tempo = (double)(end - start)\/CLOCKS_PER_SEC;\n            total1+=tempo;\n            \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\n            start = clock();\n            i = 0;\n            while (i &lt; 16) {\n                if (vet[i] % 2 == 1) {\n                    contI++;\n                } else if (vet[i] % 2 == 0) {\n                    if (vet[i] == 0) {\n                        contN++;\n                    } else {\n                        contP++;\n                    }\n                }\n                i++;\n            }\n            end = clock();\n            tempo = (double)(end - start)\/CLOCKS_PER_SEC;\n            total2+=tempo;\n            \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\n            start = clock();\n            i = 0;\n            while (i &lt; 16) {\n                if (vet[i] == 0) {\n                    contN++;\n                } else if (vet[i] % 2 == 0) {\n                    contP++;\n                } else {\n                    contI++;\n                }\n                i++;\n            }\n            end = clock();\n            tempo = (double)(end - start)\/CLOCKS_PER_SEC;\n            total3+=tempo;\n        }\n        printf(\"\\n%.3f\\n%.3f\\n%.3f\\n\", total1, total2, total3);\n        total1 = total2 = total3 = 0;\n    }\n    return 0;\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Vers\u00e3o do c\u00f3digo para avalia\u00e7\u00e3o na linguagem Python.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"python\" class=\"language-python\">import timeit\n\nTAM = 1_000_000\nvet = [0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,0]\n#vet = [0,1,1,1,2,3,3,3,4,5,5,5,6,7,7,7]\n#vet = [0,1,2,2,2,3,4,4,4,5,6,6,6,7,8,8]\n#vet = [0,0,0,0,0,0,0,0,4,5,0,0,0,0,0,0]\n\ndef trecho1():\n    contP = contI = contN = 0\n    for x in range(TAM):\n        for i in range(16):\n            if vet[i] % 2 == 0:\n                if vet[i] == 0:\n                    contN+=1\n                else:\n                    contP+=1\n            else:\n                contI+=1\n\ndef trecho2():\n    contP = contI = contN = 0\n    for x in range(TAM):\n        for i in range(16):\n            if vet[i] % 2 == 1:\n                contI+=1\n            else:\n                if vet[i] == 0:\n                    contN+=1\n                else:\n                    contP+=1\n\ndef trecho3():\n    contP = contI = contN = 0\n    for x in range(TAM):\n        for i in range(16):\n            if vet[i] == 0:\n                contN+=1\n            elif vet[i] % 2 == 0:\n                contP+=1\n            else:\n                contI+=1\n\nfor testes in range(5):\n    print('Trecho 1\\t\\t', timeit.timeit(trecho1, number=1))\n    print('Trecho 2\\t\\t', timeit.timeit(trecho2, number=1))\n    print('Trecho 3\\t\\t', timeit.timeit(trecho3, number=1))\n    print()\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Imagine que voc\u00ea precisa determinar, de um conjunto de dados, quantos valores s\u00e3o pares, \u00edmpares e neutros. Existem diversas formas de elaborar os desvio condicionais, mas basicamente, \u00e9 melhor primeiro testar se o valor \u00e9 par ou \u00edmpar. Existe alguma diferen\u00e7a em rela\u00e7\u00e3o ao tempo de processamento na ordem que os testes forem realizados. No [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[3,4],"tags":[64,63],"class_list":["post-1156","post","type-post","status-publish","format-standard","hentry","category-c","category-videos","tag-desempenho","tag-dicas"],"aioseo_notices":[],"amp_enabled":true,"_links":{"self":[{"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/posts\/1156","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/comments?post=1156"}],"version-history":[{"count":5,"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/posts\/1156\/revisions"}],"predecessor-version":[{"id":1161,"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/posts\/1156\/revisions\/1161"}],"wp:attachment":[{"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/media?parent=1156"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/categories?post=1156"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/tags?post=1156"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}