{"id":618,"date":"2016-12-06T11:16:47","date_gmt":"2016-12-06T13:16:47","guid":{"rendered":"http:\/\/www.galirows.com.br\/meublog\/programacao\/?p=618"},"modified":"2021-06-18T15:21:51","modified_gmt":"2021-06-18T18:21:51","slug":"proposta-exercicio-utilizando-biblioteca","status":"publish","type":"post","link":"http:\/\/www.galirows.com.br\/meublog\/programacao\/proposta-exercicio-utilizando-biblioteca\/","title":{"rendered":"Proposta de exerc\u00edcio utilizando biblioteca com fun\u00e7\u00f5es prontas"},"content":{"rendered":"\n<p>O seguinte exerc\u00edcio \u00e9 uma proposta a ser aplicada utilizando o Laborat\u00f3rio Virtual de Programa\u00e7\u00e3o (LVP) do Moodle. Nesse exerc\u00edcio \u00e9 disponibilizada uma biblioteca j\u00e1 com algumas fun\u00e7\u00f5es prontas. A ideia \u00e9 que o aluno avalie essas fun\u00e7\u00f5es para saber como utiliz\u00e1-la. Isso permitir\u00e1 ao aluno perceber benef\u00edcios da modulariza\u00e7\u00e3o e que uma fun\u00e7\u00e3o \u00e9 algo abstrato ao problema. Algumas fun\u00e7\u00f5es n\u00e3o funcionar\u00e3o para resolver o problema e precisar\u00e3o ser alteradas, ou utilizadas para basear a cria\u00e7\u00e3o de outra fun\u00e7\u00e3o. Esse exerc\u00edcio foi preparado apenas a linguagem de programa\u00e7\u00e3o C. Vamos a quest\u00e3o.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p><strong>Enunciado:<\/strong> Tendo uma matriz 5&#215;5, elabore um algoritmo que recebe um valor que corresponde a uma linha da matriz e (1) mostra esses valores ordenados em ordem decrescente. Mostre os valores em uma \u00fanica linha, separados por um espa\u00e7o.<\/p>\n\n\n\n<p>Gere tamb\u00e9m uma nova matriz que s\u00e3o os valores da primeira divididos pelo menor valor positivo da matriz. Dessa matriz (2) mostre o fatorial do maior valor. Em seguida, (3) mostre quantos valores est\u00e3o acima da m\u00e9dia. Finalize (4) mostrando o somat\u00f3rio da diagonal secund\u00e1ria da matriz. Mostre os valores na ordem, em uma nova e \u00fanica linha e separados por um espa\u00e7o.<\/p>\n\n\n\n<p>Existe uma biblioteca com diversas fun\u00e7\u00f5es que podem ser \u00fateis. As fun\u00e7\u00f5es dela podem ser utilizadas.<\/p>\n\n\n\n<p><strong>Biblioteca com fun\u00e7\u00f5es prontas para disponibilizar<\/strong><\/p>\n\n\n\n<p>A biblioteca possui uma s\u00e9rie de fun\u00e7\u00f5es para o exerc\u00edcio, mas algumas das fun\u00e7\u00f5es n\u00e3o tem utilidade no exerc\u00edcio e outras precisar\u00e3o ser ajustadas para poderem ser utilizadas.<\/p>\n\n\n\n<pre class=\"wp-block-code lang:c decode:true\"><code lang=\"c\" class=\"language-c\">#include &lt;stdlib.h&gt;\n#include &lt;time.h&gt;\n\n\/\/retorna o menor valor de uma matriz\nint menorDaMatriz(int tam, int mat[tam][tam]) {\n    int i, j, menor = mat[0][0];\n    for (i = 0; i &lt; tam; i++) {\n        for (j = 0; j &lt;  tam; j++) {\n            if (mat[i][j] &lt; menor) {\n                menor = mat[i][j];\n            }\n        }\n    }\n    return menor;\n}\n\n\/\/retorna o maior valor de uma matriz\nint maiorDaMatriz(int tam, int mat[tam][tam]) {\n    int i, j;\n    int maior = mat[0][0];\n    for (i = 0; i &lt; tam; i++) {\n        for (j = 0; j &lt;  tam; j++) {\n            if (mat[i][j] &gt; maior) {\n                maior = mat[i][j];\n            }\n        }\n    }\n    return maior;\n}\n\n\/\/retorna a soma dos valores de uma matriz\nint somaMatriz(int tam, int mat[tam][tam]) {\n    int i, j;\n    int soma = 0;\n    for (i = 0; i &lt; tam; i++) {\n        for (j = 0; j &lt;  tam; j++) {\n            soma+=mat[i][j];\n        }\n    }\n    return soma;\n}\n\n\/\/retorna a media dos valores de uma matriz\nfloat mediaMatriz(int tam, int mat[tam][tam]) {\n    return somaMatriz(tam, mat)\/((float)(tam*tam));\n}\n\n\/\/retorna quandos valores iguais ao informados existem na matriz\nint contaValorMatriz(int tam, int mat[tam][tam], int valor) {\n    int i, j, cont = 0;\n    for (i = 0; i &lt; tam; i++) {\n        for (j = 0; j &lt;  tam; j++) {\n            if (mat[i][j] == valor) {\n                cont++;\n            }\n        }\n    }\n    return cont;\n}\n\n\n\/\/calcula o fatorial de um n\u00famero\nint fatorial(int n) {\n\tif (n) {\n  \t  return n * fatorial(n-1);\n\t} else {\n\t    return 1;\n\t}\n}\n\n\/\/preenche uma matriz com n\u00fameros aleat\u00f3rios entre 0 e 9\nvoid preencheMatriz(int tam, int mat[tam][tam]) {\n    srand(time(NULL));\n    int i, j;\n    for (i = 0; i &lt; tam; i++) {\n        for (j = 0; j &lt;  tam; j++) {\n            mat[i][j] = rand()%10;\n        }\n    }\n}\n\n\/\/mostra os valores de uma matriz de inteiros\nvoid mostraMatrizInt(int tam, int mat[tam][tam]) {\n    int i, j;\n    for (i = 0; i &lt; tam; i++) {\n        for (j = 0; j &lt;  tam; j++) {\n            printf(\"%i \", mat[i][j]);\n        }\n        printf(\"\\n\");\n    }\n}\n\n\/\/mostra os valores de uma matriz de floats\nvoid mostraMatrizFloat(int tam, float mat[tam][tam]) {\n    int i, j;\n    for (i = 0; i &lt; tam; i++) {\n        for (j = 0; j &lt;  tam; j++) {\n            printf(\"%f \", mat[i][j]);\n        }\n        printf(\"\\n\");\n    }\n}\n\n\/\/mostra os valores de um vetor\nvoid mostraVetor(int tam, float vet[]) {\n    int i;\n    for (i = 0; i &lt; tam; i++) {\n        printf(\"%i \", vet[i]);\n    } \n}\n\n\/\/implementa\u00e7\u00e3o do m\u00e9todo bolha que ordena um vetor\nvoid bubble(int v[], int qtd) {\n  int i;\n  int j;\n  int aux;\n  int k = qtd - 1 ;\n\n  for(i = 0; i &lt; qtd; i++) {\n     for(j = 0; j &lt; k; j++) {\n        if(v[j] &gt; v[j+1]) {\n            aux = v[j];\n            v[j] = v[j+1];\n            v[j+1]=aux;\n        }\n     }\n     k--;\n  }\n}\n\n\/\/mostra os valores de um vetor\nvoid mostraVetor(int tam, float vet[]) {\n    int i;\n    for (i = 0; i &lt; tam; i++) {\n        printf(\"%f \", vet[i]);\n    } \n}<\/code><\/pre>\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 = 8 6 3 4 5\n6 7 8 20 10\n9 -5 -4 6 8\n-5 -4 -3 4 24\n10 5 4 5 6\n2\noutput= 9 8 6 -4 -5\n40320 1.826667 13 1.666667 6.666667 -1.333333 -1.333333 3.333333\n\ncase = teste2\ninput = 8 6 3 4 5\n6 7 8 20 10\n9 -5 -4 6 8\n-5 -4 -3 4 21\n10 5 4 5 6\n0\noutput= 8 6 5 4 3\n5040 1.786667 13 1.666667 6.666667 -1.333333 -1.333333 3.333333<\/pre>\n\n\n\n<p><strong>Solu\u00e7\u00e3o em linguagem C<\/strong><\/p>\n\n\n\n<p>A solu\u00e7\u00e3o \u00e9 apresentada com o c\u00f3digo da fun\u00e7\u00e3o principal e as fun\u00e7\u00f5es adicionadas e modificadas na biblioteca.<\/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#include \"funcoesUteis.h\" \/\/considerando que a biblioteca tem esse nome\n\nvoid main() {\n    int mat[5][5];\n    int linha, i, j, vet[5];\n    \n    for (i=0; i&lt;5;i++) {\n        for(j=0;j&lt;5;j++) {\n            scanf(\"%i\", &amp;mat[i][j]);\n        }\n    }\n    \n    scanf(\"%i\", &amp;linha);\n    for (i = 0; i &lt; 5; i++) {\n        vet[i] = mat[linha][i];\n    }\n    bubble(vet, 5);\n    for (i = 0; i &lt; 5; i++) {\n        printf(\"%i \", vet[i]);\n    }\n    \n    float mat2[5][5];\n    for (i = 0; i &lt; 5; i++) {\n        for (j = 0; j &lt; 5; j++) {\n            mat2[i][j] = mat[i][j] \/ (float) menorDaMatrizPositivo(5, mat);\n        }\n    }\n    \/\/mostraMatrizInt(5,mat);\n    \/\/mostraMatrizFloat(5,mat2);\n    \/\/printf(\"\\n Maior %f\", maiorDaMatriz(5,mat2));\n    printf(\"\\n%i \", fatorial(maiorDaMatriz(5,mat2)));\n    printf(\"%f \", mediaMatriz(5,mat2));\n    printf(\"%i \", acimaValorMatriz(5,mat2,mediaMatriz(5,mat2)));\n    \n    float vet2[5];\n    for (i = 0; i &lt; 5; i++) {\n        vet2[i] = mat2[i][4-i];\n    }\n    mostraVetor(5, vet2);\n}<\/code><\/pre>\n\n\n\n<p><em>Fun\u00e7\u00f5es diferentes da biblioteca<\/em><\/p>\n\n\n\n<pre class=\"wp-block-code lang:c decode:true\"><code lang=\"c\" class=\"language-c\">\/\/fun\u00e7\u00e3o foi criada baseada na menorDaMatriz(), com uma condi\u00e7\u00e3o a mais\nint menorDaMatrizPositivo(int tam, int mat[tam][tam]) {\n    int i, j, menor = mat[0][0];\n    for (i = 0; i &lt; tam; i++) {\n        for (j = 0; j &lt;  tam; j++) {\n            if (mat[i][j] &lt; menor &amp;&amp; mat[i][j] &gt; 0) {\n                menor = mat[i][j];\n            }\n        }\n    }\n    return menor;\n}\n\n\/\/fun\u00e7\u00e3o adicionada baseada na contaValorMatriz() com apenas uma mudan\u00e7a no if\nint acimaValorMatriz(int tam, float mat[tam][tam], float valor) {\n    int i, j, cont = 0;\n    for (i = 0; i &lt; tam; i++) {\n        for (j = 0; j &lt;  tam; j++) {\n            if (mat[i][j] &gt; valor) {\n                cont++;\n            }\n        }\n    }\n    return cont;\n}\n\n\/\/Fun\u00e7\u00e3o buble() alterada para ordem decrescente. A altera\u00e7\u00e3o foi no if\nvoid bubble(int v[], int qtd) {\n  int i;\n  int j;\n  int aux;\n  int k = qtd - 1 ;\n\n  for(i = 0; i &lt; qtd; i++) {\n     for(j = 0; j &lt; k; j++) {\n        if(v[j] &lt; v[j+1]) {\n            aux = v[j];\n            v[j] = v[j+1];\n            v[j+1]=aux;\n        }\n     }\n     k--;\n  }\n}\n<\/code><\/pre>\n\n\n\n<p>Utilizando a avalia\u00e7\u00e3o mais simples do LVP (apenas a compara\u00e7\u00e3o da entrada com a sa\u00edda esperada), essa foi a melhor forma que encontrei para utilizar fun\u00e7\u00f5es em biblioteca e as vantagens da modulariza\u00e7\u00e3o.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>O seguinte exerc\u00edcio \u00e9 uma proposta a ser aplicada utilizando o Laborat\u00f3rio Virtual de Programa\u00e7\u00e3o (LVP) do Moodle. Nesse exerc\u00edcio \u00e9 disponibilizada uma biblioteca j\u00e1 com algumas fun\u00e7\u00f5es prontas. A ideia \u00e9 que o aluno avalie essas fun\u00e7\u00f5es para saber como utiliz\u00e1-la. Isso permitir\u00e1 ao aluno perceber benef\u00edcios da modulariza\u00e7\u00e3o e que uma fun\u00e7\u00e3o \u00e9 [&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":[38,12,33,13,34],"class_list":["post-618","post","type-post","status-publish","format-standard","hentry","category-c","tag-biblioteca","tag-funcao","tag-lvp","tag-matriz","tag-vpl"],"aioseo_notices":[],"amp_enabled":true,"_links":{"self":[{"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/posts\/618","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=618"}],"version-history":[{"count":4,"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/posts\/618\/revisions"}],"predecessor-version":[{"id":1066,"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/posts\/618\/revisions\/1066"}],"wp:attachment":[{"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/media?parent=618"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/categories?post=618"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/tags?post=618"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}