{"id":586,"date":"2016-10-25T18:44:34","date_gmt":"2016-10-25T20:44:34","guid":{"rendered":"http:\/\/www.galirows.com.br\/meublog\/programacao\/?p=586"},"modified":"2021-06-18T15:24:31","modified_gmt":"2021-06-18T18:24:31","slug":"quadrado-magico","status":"publish","type":"post","link":"http:\/\/www.galirows.com.br\/meublog\/programacao\/quadrado-magico\/","title":{"rendered":"Quadrado m\u00e1gico"},"content":{"rendered":"\n<p>Uma matriz quadrada inteira \u00e9 um <i>quadrado m\u00e1gico<\/i> se a soma dos elementos de cada linha, a soma dos elementos de cada coluna e a soma dos elementos das diagonais principal e secund\u00e1ria s\u00e3o todas iguais.<\/p>\n\n\n\n<p>Por exemplo, a matriz abaixo \u00e9 um quadrado m\u00e1gico:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"168\" height=\"169\" src=\"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-content\/uploads\/sites\/2\/2016\/10\/quadradoMagico.png\" alt=\"quadradomagico\" class=\"wp-image-589\" srcset=\"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-content\/uploads\/sites\/2\/2016\/10\/quadradoMagico.png 168w, http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-content\/uploads\/sites\/2\/2016\/10\/quadradoMagico-150x150.png 150w\" sizes=\"auto, (max-width: 168px) 100vw, 168px\" \/><\/figure><\/div>\n\n\n\n<p>Fa\u00e7a um algoritmo que recebe uma dimens\u00e3o N de uma matriz <i>A<sub>nxn<\/sub><\/i>, seguido dos respectivos valores da matriz (preenchendo a matriz de cima para baixo, da esquerda para a direta), verificar se <i>A<\/i> \u00e9 um quadrado m\u00e1gico (escrevendo &#8220;quadrado magico&#8221; caso seja e &#8220;quadrado nao magico&#8221; caso n\u00e3o seja).<\/p>\n\n\n\n<p><strong>Solu\u00e7\u00e3o em linguagem C<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code lang:c decode:true\"><code lang=\"c\" class=\"language-c\">#include &lt;stdio.h&gt;\n\nint main(void) {\n\tint n, i, j;\n\tscanf(\"%i\", &amp;n);\n\t\n\tint mat[n][n];\n\t\n\tfor (i = 0; i &lt; n; i++) {\n\t\tfor (j = 0; j &lt; n; j++) {\n\t\t\tscanf(\"%i\", &amp;mat[i][j]);\n\t\t}\n\t}\n\t\n\tfor (i = 0; i &lt; n; i++) {\n\t\tfor (j = 0; j &lt; n; j++) {\n\t\t\tprintf(\"%i \", mat[i][j]);\n\t\t}\n\t\tprintf(\"\\n\");\n\t}\n\n\tint somaDP = 0, somaDS = 0;\n\t\n\t\/\/soma diagonal principal\n\tfor (i = 0; i &lt; n; i++) {\n\t\tsomaDP += mat[i][i];\n\t}\n\t\n\t\/\/soma diagonal secund\u00e1ria\n\tfor (i = 0; i &lt; n; i++) {\n\t\tsomaDS += mat[i][n-i-1];\n\t}\n\t\n\t\/\/soma linhas\n\tprintf(\"\\nSoma das linhas: \");\n\tint vetL[n];\n\tfor (i = 0; i &lt; n; i++) {\n\t\tvetL[i] = 0;\n\t\tfor (j = 0; j &lt; n; j++) {\n\t\t\tvetL[i] += mat[i][j];\n\t\t}\n\t}\n\tfor (i = 0; i &lt; n; i++) {\n\t\tprintf(\"%i \", vetL[i]);\n\t}\n\n\t\/\/soma colunas\n\tprintf(\"\\nSoma das colunas: \");\n\tint vetC[n];\n\tfor (j = 0; j &lt; n; j++) {\n\t\tvetC[j] = 0;\n\t\tfor (i = 0; i &lt; n; i++) {\n\t\t\tvetC[j] += mat[i][j];\n\t\t}\n\t}\n\tfor (i = 0; i &lt; n; i++) {\n\t\tprintf(\"%i \", vetC[i]);\n\t}\n\t\n\tprintf(\"\\nSoma diagonal principal %i e secund\u00e1ria %i\\n\", somaDP, somaDS);\n\n\tint testaL = 1, testaC = 1;\n\tfor (i = 1; i &lt;  n; i++) {\n\t\tif (vetL[i] != vetL[i-1]) {\n\t\t\ttestaL = 0;\n\t\t\tbreak;\n\t\t} else if (vetC[i] != vetC[i-1]) {\n\t\t\ttestaC = 0;\n\t\t\tbreak;\n\t\t}\n\t}\n\t\n\tif (testaL &amp;&amp; testaC &amp;&amp; somaDP == somaDS &amp;&amp; somaDP == vetL[0]) {\n\t\tprintf(\"Quadrado magico\");\n\t} else {\n\t\tprintf(\"Quadrado nao magico\");\n\t}\n\n\treturn 0;\n}\n<\/code><\/pre>\n\n\n\n<p><strong>Link:<\/strong> <a href=\"http:\/\/ideone.com\/5mdOha\" target=\"_blank\" rel=\"noopener\">http:\/\/ideone.com\/5mdOha<\/a><\/p>\n\n\n\n<p><strong>Solu\u00e7\u00e3o em C utilizando fun\u00e7\u00f5es<br><\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code show-title:false expand:true lang:default mark:75-112 decode:true\"><code lang=\"c\" class=\"language-c\">#include &lt;stdio.h&gt;\n\nvoid lerMatriz(int tam, int mat[tam][tam]) {\n\tint i, j;\n\tfor (i = 0; i &lt; tam; i++) {\n\t\tfor (j = 0; j &lt; tam; j++) {\n\t\t\tscanf(\"%i\", &amp;mat[i][j]);\n\t\t}\n\t}\n}\n\nvoid mostraMatriz(int tam, int mat[tam][tam]) {\n\tint i, j;\n\tfor (i = 0; i &lt; tam; i++) {\n\t\tfor (j = 0; j &lt; tam; j++) {\n\t\t\tprintf(\"%i \", mat[i][j]);\n\t\t}\n\t\tprintf(\"\\n\");\n\t}\n}\n\nint somaDiagonalPrincipal(int tam, int mat[tam][tam]) {\n\tint i, soma = 0;\n\tfor (i = 0; i &lt; tam; i++) {\n\t\tsoma += mat[i][i];\n\t}\n\treturn soma;\n}\n\nint somaDiagonalSecundaria(int tam, int mat[tam][tam]) {\n\tint i, soma = 0;\n\tfor (i = 0; i &lt; tam; i++) {\n\t\tsoma += mat[i][tam-i-1];\n\t}\n\treturn soma;\n}\n\nvoid mostraVetor(int vet[], int tam) {\n\tint i;\n\tfor (i = 0; i &lt; tam; i++) {\n\t\tprintf(\"%i \", vet[i]);\n\t}\n}\n\nvoid somaLinhas(int tam, int mat[tam][tam], int vet[]) {\n\tint i, j;\n\tfor (i = 0; i &lt; tam; i++) {\n\t\tvet[i] = 0;\n\t\tfor (j = 0; j &lt; tam; j++) {\n\t\t\tvet[i] += mat[i][j];\n\t\t}\n\t}\n}\n\nvoid somaColunas(int tam, int mat[tam][tam], int vet[]) {\n\tint i, j;\n\tfor (j = 0; j &lt; tam; j++) {\n\t\tvet[j] = 0;\n\t\tfor (i = 0; i &lt; tam; i++) {\n\t\t\tvet[j] += mat[i][j];\n\t\t}\n\t}\n}\n\nint testaIgualidadeVetor(int vet[], int tam) {\n\tint i;\n\tfor (i = 1; i &lt;  tam; i++) {\n\t\tif (vet[i] != vet[i-1]) {\n\t\t\treturn 0;\n\t\t}\n\t}\n\treturn 1;\n}\n\nint main(void) {\n\tint n;\n\tscanf(\"%i\", &amp;n);\n\tint mat[n][n];\n\t\n\tlerMatriz(n, mat);\n\tmostraMatriz(n, mat);\n\t\n\tint somaDP = 0, somaDS = 0;\n\tsomaDP = somaDiagonalPrincipal(n,mat);  \/\/soma da diagonal principal\n\tsomaDS = somaDiagonalSecundaria(n,mat); \/\/soma da diagonal secundaria\n\n\t\/\/soma linhas\n\tint vetL[n];\n\tsomaLinhas(n, mat, vetL);\n\tprintf(\"\\nSoma das linhas: \");\n\tmostraVetor(vetL, n);\n\n\t\/\/soma colunas\n\tint vetC[n];\n\tsomaColunas(n, mat, vetC);\n\tprintf(\"\\nSoma das colunas: \");\n\tmostraVetor(vetC, n);\n\t\n\tprintf(\"\\nSoma diagonal principal %i e secundaria %i\\n\", somaDP, somaDS);\n\n\tint testaL, testaC;\n\ttestaL = testaIgualidadeVetor(vetL, n);\n\ttestaC = testaIgualidadeVetor(vetC, n);\n\n\tif (testaL &amp;&amp; testaC &amp;&amp; somaDP == somaDS &amp;&amp; somaDP == vetL[0]) {\n\t\tprintf(\"Quadrado magico\");\n\t} else {\n\t\tprintf(\"Quadrado nao magico\");\n\t}\n\n\treturn 0;\n}\n<\/code><\/pre>\n\n\n\n<p><strong>Link:<\/strong> <a href=\"http:\/\/ideone.com\/PNwlnY\" target=\"_blank\" rel=\"noopener\">http:\/\/ideone.com\/PNwlnY<\/a><\/p>\n\n\n\n<p><strong>Casos de teste para o Laborat\u00f3rio Virtual de Programa\u00e7\u00e3o<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted font-size:8 height-set:true height:150 lang:tex decode:true\">case = teste1\ninput = 3\n8 0 7\n4 5 6\n3 10 2\noutput = Quadrado magico\n\ncase = teste2\ninput = 3\n8 0 7\n4 5 6\n3 10 3\noutput = Quadrado nao magico\n\ncase = teste3\ninput = 3\n2 9 4\n7 5 3\n6 1 8\noutput = Quadrado magico\n\ncase = teste4\ninput = 4\n1 14 15 4\n12 7 6 9\n8 11 10 5\n13 2 3 16\noutput = Quadrado magico\n\ncase = teste5\ninput = 4\n0 14 15 4\n12 6 6 9\n8 11 1 5\n13 2 3 1\noutput = Quadrado nao magico\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Uma matriz quadrada inteira \u00e9 um quadrado m\u00e1gico se a soma dos elementos de cada linha, a soma dos elementos de cada coluna e a soma dos elementos das diagonais principal e secund\u00e1ria s\u00e3o todas iguais. Por exemplo, a matriz abaixo \u00e9 um quadrado m\u00e1gico: Fa\u00e7a um algoritmo que recebe uma dimens\u00e3o N de uma [&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],"tags":[32,33,34],"class_list":["post-586","post","type-post","status-publish","format-standard","hentry","category-c","tag-laboratorio-virtual-de-programacao","tag-lvp","tag-vpl"],"aioseo_notices":[],"amp_enabled":true,"_links":{"self":[{"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/posts\/586","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=586"}],"version-history":[{"count":6,"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/posts\/586\/revisions"}],"predecessor-version":[{"id":1069,"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/posts\/586\/revisions\/1069"}],"wp:attachment":[{"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/media?parent=586"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/categories?post=586"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/tags?post=586"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}