{"id":1232,"date":"2021-11-03T15:17:48","date_gmt":"2021-11-03T18:17:48","guid":{"rendered":"http:\/\/www.galirows.com.br\/meublog\/programacao\/?p=1232"},"modified":"2021-11-03T15:22:16","modified_gmt":"2021-11-03T18:22:16","slug":"solicitacao-algoritmo-9-verificar-ordenacao","status":"publish","type":"post","link":"http:\/\/www.galirows.com.br\/meublog\/programacao\/solicitacao-algoritmo-9-verificar-ordenacao\/","title":{"rendered":"Solicita\u00e7\u00e3o de algoritmo 9 &#8211; verificar ordena\u00e7\u00e3o de valores"},"content":{"rendered":"\n<p>Nessa solicita\u00e7\u00e3o de algoritmo foi solicitado para verificar se uma sequ\u00eancia num\u00e9rica est\u00e1 em ordem crescente. Segue o enunciado.<\/p>\n\n\n\n<p>Enunciado: Elabore um algoritmo para determinar se uma sequ\u00eancia de valores est\u00e1 ou n\u00e3o em ordem crescente. A entrada \u00e9 um n\u00famero <em>n<\/em>, que indica quantos valores constituem a sequ\u00eancia a ser verificada. A sequ\u00eancia ser\u00e1 dada a seguir, com n\u00fameros separados por espa\u00e7o (n\u00e3o usar vetores).<\/p>\n\n\n\n<p>Essa quest\u00e3o foi enviada como solicita\u00e7\u00e3o de algoritmo pelo Jean. Ele tinha uma pequena d\u00favida em rela\u00e7\u00e3o \u00e0 entrada dos dados (ter que ler a sequ\u00eancia dos valores separados por um espa\u00e7o). O algoritmo enviado por ele parecia correto, mas encontrei um pequeno erro. Segue o algoritmo que ele me enviou.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"c\" class=\"language-c line-numbers\">#include &lt;stdio.h&gt;\n\nint main(void) {\n    int qtdNumeros=0, numeroAtual =0, numeroAnterior=0, i=0, status=0;\n    printf(\"Digite quantos numeros ser\u00e3o inseridos: \");\n    scanf(\"%d\", &amp;qtdNumeros);\n\n    printf(\"Digite os numeros: \");\n    scanf(\"%d\", &amp;numeroAnterior);\n\n    for (i=0; i&lt;(qtdNumeros - 1); i++){\n        scanf(\"%d\", &amp;numeroAtual);\n        if (numeroAtual &gt;= numeroAnterior) {\n            status = 1;\n        } else {\n            status = 0;\n            break;\n        }\n    }\n\n    if (status == 1) {\n        printf(\"SIM\");\n    } else {\n        printf(\"NAO\");\n    }\n\n    return 0;\n}<\/code><\/pre>\n\n\n\n<p>Na entrada tradicional para um algoritmo, o usu\u00e1rio costuma indicar os valores e pressionar o <em>enter<\/em>. No prompt de comando, n\u00e3o existe uma diferen\u00e7a na entrada de valores num\u00e9ricos separados por <em>enter<\/em> ou espa\u00e7o. Ou seja, o algoritmo ir\u00e1 funcionar tanto se o usu\u00e1rio informar os valores dando um <em>enter <\/em>a cada valor, ou simplesmente colocando espa\u00e7os entre os valores. At\u00e9 \u00e9 poss\u00edvel fazer com que isso n\u00e3o aconte\u00e7a (n\u00e3o aceitar o espa\u00e7o como separador), mas o padr\u00e3o \u00e9 aceitar.<\/p>\n\n\n\n<p>A solu\u00e7\u00e3o enviada pelo Jean pode parece correta. Isso porque em diversos testes o algoritmo vai funcionar. Considerando o seguintes conjuntos de sequ\u00eancia, os valores informados obter\u00e3o a resposta esperada:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">0 1 2 3\n\n5 4 3\n\n0 50 3 10<\/pre>\n\n\n\n<p>O utiliza\u00e7\u00e3o de entradas como as indicadas gerar\u00e1 a ilus\u00e3o de que o algoritmo est\u00e1 correto, mas n\u00e3o est\u00e1. Por isso a import\u00e2ncia de pensar bem o conjunto de entrada, n\u00e3o apenas colocando entradas ordenadas e desordenadas, mas tamb\u00e9m modificando a ordem dos valores de entrada.<\/p>\n\n\n\n<p>Observe que, com a entrada da sequ\u00eancia <strong>3 8 5 9<\/strong>, que deveria resultar em <strong>NAO<\/strong> (pois os valores n\u00e3o est\u00e3o em ordem), a sa\u00edda do algoritmo ser\u00e1 um <strong>SIM<\/strong>. \u00c9 f\u00e1cil de perceber o motivo fazendo um r\u00e1pido teste de mesa, onde ser\u00e1 percebido que os testes do <em>if<\/em> dentro do <em>for<\/em> s\u00e3o realizados apenas comparando o valor atual com o primeiro valor informado e n\u00e3o com o valor anterior, como deveria ser feito.<\/p>\n\n\n\n<p>Para resolver isso, basta atualizar o valor anterior com o novo valor, fazendo isso logo depois da estrutura condicional. O c\u00f3digo abaixo adiciona essa instru\u00e7\u00e3o, que pode ser vista na linha 19.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"c\" class=\"language-c line-numbers\">#include &lt;stdio.h&gt;\n\nint main(void) {\n    int qtdNumeros=0, numeroAtual =0, numeroAnterior=0, i=0, status=0;\n    printf(\"Digite quantos numeros ser\u00e3o inseridos: \");\n    scanf(\"%d\", &amp;qtdNumeros);\n\n    printf(\"Digite os numeros: \");\n    scanf(\"%d\", &amp;numeroAnterior);\n\n    for (i=0; i&lt;(qtdNumeros - 1); i++){\n        scanf(\"%d\", &amp;numeroAtual);\n        if (numeroAtual &gt;= numeroAnterior) {\n            status = 1;\n        } else {\n            status = 0;\n            break;\n        }\n        numeroAnterior = numeroAtual;\n    }\n\n    if (status == 1) {\n        printf(\"SIM\");\n    } else {\n        printf(\"NAO\");\n    }\n\n    return 0;\n}<\/code><\/pre>\n\n\n\n<p>Uma \u00faltima considera\u00e7\u00e3o: como a solu\u00e7\u00e3o pede para fazer a leitura de um conjunto de valores, \u00e9 comum pensar no uso de vetores para resolver esse problema (para alunos que j\u00e1 conhecem essa estrutura). Embora uma solu\u00e7\u00e3o utilizando vetores seja poss\u00edvel, ela \u00e9 totalmente desnecess\u00e1ria, sendo que ela tamb\u00e9m ocuparia mais mem\u00f3ria e mais processamento para alcan\u00e7ar o mesmo resultado. <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nessa solicita\u00e7\u00e3o de algoritmo foi solicitado para verificar se uma sequ\u00eancia num\u00e9rica est\u00e1 em ordem crescente. Segue o enunciado. Enunciado: Elabore um algoritmo para determinar se uma sequ\u00eancia de valores est\u00e1 ou n\u00e3o em ordem crescente. A entrada \u00e9 um n\u00famero n, que indica quantos valores constituem a sequ\u00eancia a ser verificada. A sequ\u00eancia ser\u00e1 [&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":[36,52],"class_list":["post-1232","post","type-post","status-publish","format-standard","hentry","category-c","tag-for","tag-solicitacao-de-algoritmo"],"aioseo_notices":[],"amp_enabled":true,"_links":{"self":[{"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/posts\/1232","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=1232"}],"version-history":[{"count":3,"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/posts\/1232\/revisions"}],"predecessor-version":[{"id":1236,"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/posts\/1232\/revisions\/1236"}],"wp:attachment":[{"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/media?parent=1232"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/categories?post=1232"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/tags?post=1232"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}