{"id":412,"date":"2021-08-02T16:13:45","date_gmt":"2021-08-02T19:13:45","guid":{"rendered":"http:\/\/www.galirows.com.br\/meublog\/competir\/?page_id=412"},"modified":"2021-08-02T16:15:03","modified_gmt":"2021-08-02T19:15:03","slug":"entrada-varios-conjuntos-teste-ate-zeros","status":"publish","type":"page","link":"http:\/\/www.galirows.com.br\/meublog\/competir\/dicas\/entrada-varios-conjuntos-teste-ate-zeros\/","title":{"rendered":"Entrada de v\u00e1rios conjuntos de teste at\u00e9 zeros [linguagem C]"},"content":{"rendered":"\n<p>Uma forma bastante popular de entrada de dados \u00e9 a leitura indefinida de valores, tendo como crit\u00e9rio de parada dessas entradas a ocorr\u00eancia de valores zero. Esse tipo de entrada pode ser encontrado na quest\u00e3o <a href=\"http:\/\/www.galirows.com.br\/meublog\/competir\/temperatura-lunar-obi-2002\/\" target=\"_blank\" rel=\"noreferrer noopener\">Temperatura Lunar [OBI 2002]<\/a>.<\/p>\n\n\n\n<p>A entrada pode ser simplificada como:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>A entrada \u00e9 composta de v\u00e1rios conjuntos de teste.<\/li><li>A primeira linha de um conjunto de teste cont\u00e9m dois n\u00fameros inteiros positivos <strong>N<\/strong> (0 \u2264 <strong>N<\/strong> \u2264 10000) e <strong>M<\/strong> (1 \u2264 <strong>M<\/strong> \u2264 <strong>N<\/strong>), que indicam respectivamente [\u2026].<\/li><li>As <strong>N<\/strong> linhas seguintes cont\u00eam [\u2026].<\/li><li>O final da entrada \u00e9 indicado quando <strong>N<\/strong> = <strong>M<\/strong> = 0.<\/li><\/ul>\n\n\n\n<p>O c\u00f3digo para essa entrada pode ser facilmente escrito como a seguir.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"c\" class=\"language-c line-numbers\">int main() {\n  int n, m;\n\n  scanf(\"%d %d\", &amp;n, &amp;m);\n  \n  while (n &gt; 0) {\n      \/\/Faz o que \u00e9 necess\u00e1rio\n\n      scanf(\"%d %d\", &amp;n, &amp;m);\n  } \n\n  return 0;\n}<\/code><\/pre>\n\n\n\n<p>Embora a condi\u00e7\u00e3o seja interromper a leitura de entradas quando forem fornecidos os valores zero, veja que na condi\u00e7\u00e3o do <em>while <\/em>eu utilizei <strong>n &gt; 0<\/strong> e n\u00e3o <strong>n != 0<\/strong>. Isso porque o enunciado indicou que somente valores positivos ser\u00e3o informados e escrever o s\u00edmbolo de maior exige apenas um caractere, enquanto o s\u00edmbolo de diferente requer dois caracteres (sem contar que a pressa pode fazer voc\u00ea escrever =! e perder mais um tempo para encontrar esse erro).<\/p>\n\n\n\n<p>Veja tamb\u00e9m que, embora o enunciado diga que a condi\u00e7\u00e3o de parada seja serem fornecidos dois valores zero, eu n\u00e3o utilizei <strong>n &gt; 0 &amp;&amp; m &gt; 0<\/strong>. Como foi dito no enunciado que  <strong>M<\/strong> ser\u00e1 maior ou igual a 1 (<strong>1 \u2264 M<\/strong>), ent\u00e3o quando <strong>m<\/strong> for zero \u00e9 porque \u00e9 para parar (e tanto fazia testar o zero na vari\u00e1vel <strong>n<\/strong> ou <strong>m<\/strong>).<\/p>\n\n\n\n<p>Com isso, o c\u00f3digo pode ser simplificado para:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"c\" class=\"language-c line-numbers\">int main() {\n  int n, m;\n  \n  while (scanf(\"%d %d\", &amp;n, &amp;m) == 2 &amp;&amp; n &gt; 0) {\n      \/\/ Faz o que \u00e9 necess\u00e1rio\n\n  }\n  \n  return 0;\n}<\/code><\/pre>\n\n\n\n<p>Basicamente eu removi as linhas 4 e 9 e fiz o <em>scanf <\/em>dentro do <em>while <\/em>a partir da instru\u00e7\u00e3o <strong>scanf(&#8220;%d %d&#8221;, &amp;n, &amp;m) == 2<\/strong>. O valor de retorno da fun\u00e7\u00e3o scanf \u00e9 o n\u00famero de elementos lidos com sucesso e por isso o teste de igualdade feito. tamb\u00e9m utilizei o operador l\u00f3gico de conjun\u00e7\u00e3o (<strong>&amp;&amp;<\/strong>) para manter a condi\u00e7\u00e3o que j\u00e1 tinha anteriormente. <\/p>\n\n\n\n<p>Foi uma pequena dica, mas ela tamb\u00e9m ajuda a ter um maior dom\u00ednio da fun\u00e7\u00e3o <em>scanf<\/em>. <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Uma forma bastante popular de entrada de dados \u00e9 a leitura indefinida de valores, tendo como crit\u00e9rio de parada dessas entradas a ocorr\u00eancia de valores zero. Esse tipo de entrada pode ser encontrado na quest\u00e3o Temperatura Lunar [OBI 2002]. A entrada pode ser simplificada como: A entrada \u00e9 composta de v\u00e1rios conjuntos de teste. A [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":410,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-412","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\/412","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=412"}],"version-history":[{"count":3,"href":"http:\/\/www.galirows.com.br\/meublog\/competir\/wp-json\/wp\/v2\/pages\/412\/revisions"}],"predecessor-version":[{"id":415,"href":"http:\/\/www.galirows.com.br\/meublog\/competir\/wp-json\/wp\/v2\/pages\/412\/revisions\/415"}],"up":[{"embeddable":true,"href":"http:\/\/www.galirows.com.br\/meublog\/competir\/wp-json\/wp\/v2\/pages\/410"}],"wp:attachment":[{"href":"http:\/\/www.galirows.com.br\/meublog\/competir\/wp-json\/wp\/v2\/media?parent=412"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}