7  Respostas e comentários para problemas selecionados

\(\newcommand\Id[1]{\mbox{\textit{#1}}}\)
[Resposta para o Problema #0011]

 3.1

A sequência de entrada especificada contém os valores e um sentinela. O processamento requer uma repetição que use enquanto ou repita.

O uso do para, considerando que requeira a especificação do intervalo, não é possível, já que não há possibilidade de antever o número de repetições.

[Resposta para o Problema #0012]

 3.2

A quantidade de valores na sequência de entrada é fixo. Uma repetição com para é a alternativa mais apropriada.

A opção por enquanto ou repita sempre é possível, porém o uso do para torna a repetição mais clara na solução elaborada.

[Resposta para o Problema #0013]

 3.3

Como a quantidade de repetições não pode ser antevista, descarta-se a repetição com para.

Do ponto de vista do funcionário que faz a pesagem, seu trabalho segue até que a fila de animais termine. Para o que faz a anotação, seu trabalho se encerra ao receber o “acabou”, caracterizando um sentinela.

De ambos os pontos de vista, repetições indeterminadas com enquanto ou repita são as que atendem ao problema.

[Resposta para o Problema #0014]

 3.4

Neste caso, a pesquisa de opinião já ocorreu e os dados estão disponíveis. Não é trabalho do algoritmo lidar como foi a coleta das respostas.

O problema não indica a disponibilidade da quantidade de respostas que precisam ser processadas, de forma que a sequência deve ser avaliada item a item, até que se encerre.

Não há também um valor sentinela explicitado.

Neste caso, a repetição com enquanto ou repita se mostra como adequada ao processamento:

[Resposta para o Problema #0017]

 3.7

O número de repetições neste problema é definido. Sabendo-se o mês, que é dado de entrada, é possível determinar o número de dias para a repetição. Mesmo para o mês de fevereiro, que pode variar entre 28 ou 29 dias, sabe-se qual a quantidade, visto que o ano também é um valor conhecido e, a partir dele, determinar se se trata ou não de um ano bissexto.

[Resposta para o Problema #0021]

 4.1

Como soluções para este problema são apresentados dois algoritmos.

O primeiro algoritmo considera o fato de que as possíveis alturas dos participantes da equipe são, necessariamente, maiores que zero. Desta forma, inicia a verificação iniciando uma variável \(h_\Id{máx}\) com zero. Inevitavelmente, ao verificar a primeira altura da sequência, ela será maior que esse valor inicial e \(h_\Id{máx}\) será atualizado.

O algoritmo seguinte usa a mesma estrutura geral. Porém, ao invés de “forçar” a primeira troca, obtém a primeira altura e a atribui a \(h_\Id{máx}\). A partir daí, verifica as demais alturas, substituindo o valor máximo apenas se necessário.

[Resposta para o Problema #0022]

 4.2

São propostas duas soluções para o problema.

A especificação deixa em aberto quais valores existem na sequência, os quais podem ser tão pequenos ou tão grandes quanto possível. Desta forma, a versão seguinte opta por iniciar a variável \(\Id{valor\_mínimo}\) com \(+\infty\), forçando a primeira substituição logo no primeiro valor da sequência.

[Resposta para o Problema #0030]

 4.4

Nesta solução, sempre que o valor máximo é atualizado, também é o número da CNH. O primeiro motorista da lista sempre será considerado, iniciando o processo.

[Resposta para o Problema #0023]
[Resposta para o Problema #0024]
[Resposta para o Problema #0004]

 4.7

A solução apresentada não funciona porque as verificações de “menor que 6,0” e “igual a 0” não são mutuamente exclusivas. Uma nota igual a zero tem que contar nas duas categorias. Ainda assim, o código somente faz a comparação de notas nulas caso a verificação de “menor que 6,0” tenha falhado, pois é usado um senão se na estruturação.

Como as duas condições devem ser verificadas separadamente, uma solução é o uso de uma estrutura se independente para cada uma, o que leva à soução que segue.

Desta forma uma nota igual a zero provocaria o incremento dos dois contadores.

[Resposta para o Problema #0026]
[Comentário sobre o Problema #0029]

Pense a respeito: sua solução, para que seja entendida por outra pessoa, requer comentários específicos? Seria bom incluí-los ou não?

[Comentário sobre o Problema #0035]

 5.5

Neste exercício é importante notar que, não havendo nenhuma pessoa em uma das classes, a média não existe, não podendo nem ser calculada.

[Resposta para o Problema #0036]

 5.6

Em algoritmos computacionais é comum o uso do operador \(\bmod\) para indicar o o resto da divisão. Dessa forma, \({a \bmod b}\) (\(a\) e \(b\) inteiros) é o resto da divisão inteira \(a/b\). Como exemplos, \({10 \bmod 3 = 1}\), \({20 \bmod 3 = 2}\) e \({3291 \bmod 3 = 0}\).

Quando \(a \bmod b = 0\), \(b\) é um divisor de \(a\).

[Comentário sobre o Problema #0036]

 5.6

Além da notação \(a \bmod b\) para o resto da divisão, são também comuns as representações \(\mbox{mod}(a, b)\) e \(a\,\%\,b\).

Em algoritmos, também pode ser escrito “se \(b\) é divisor de \(a\) então” se o nível de abstração exigido for mais alto.

[Comentário sobre o Problema #0037]

 5.7

Teste a lógica do algoritmo com as seguintes sequências:

  • 18 5 10 2 -1
  • 27 24 18 1 25 -1
[Resposta para o Problema #0042]
[Resposta para o Problema #0040]
[Comentário sobre o Problema #0040]

 6.1

Naturalmente, a opção seguinte seria muito mais eficiente, porém não atenderia o enunciado do problema.

[Resposta para o Problema #0041]

 6.2

É interessante notar que no algoritmo, o valor \(n = 0\) faz com que o laço para não seja repetido nenhuma vez, resultando em \(\Id{fatorial}\) igual a um. O mesmo ocorre para \(n = 1\).

[Comentário sobre o Problema #0068]

 6.3

Nesta soma, quanto maior o número de termos somados, mais o valor de \(s\) se aproxima de \(e^x\). \[e^x = x^0 + \frac{x^1}{1!} + \frac{x^2}{2!} + \frac{x^3}{3!} + \ldots\]