12  Respostas e comentários para problemas selecionados

\(\newcommand\Id[1]{\mbox{\textit{#1}}}\)
[Resposta para o Problema #0046]
[Comentário sobre o Problema #0047]

 8.2

Caso o  8.1/  12.1 tenha sido resolvido, é possível escrever:

[Resposta para o Problema #0043]

 8.3

Solução mais didática:

Solução prática e comum:

Nesta última solução, é importante notar que não há possibilidade de que a execução chegue ao fim sem nenhum return.

[Resposta para o Problema #0044]

 8.4

Caso o  8.3/  12.2 tenha sido resolvido, a solução abaixo faz sentido:

[Resposta para o Problema #0051]
[Comentário sobre o Problema #0056]

 8.9

Nesta função, é interessante notar que, dado um \(n \in \mathbb{N}\), 1 e \(n\) sempre serão seus divisores. Além disso, não existe nenhum divisor de \(n\) que seja maior que \(n/2\).

Um exercício mental relevante é como incorporar essas informações à solução algorítmica para que sejam evitadas verificações desnecessárias.

[Resposta para o Problema #0050]

 9.1

A combinação em si é o primeiro item que pode ser escrito na forma de função. Dessa forma, é possível escrever uma função com o seguinte cabeçalho:

Os cálculos internos requerem o uso do fatorial e, dado que apenas somas e subtrações estão disponíveis, a implementação de uma função para o fatorial também é interessante.

Assim, a segunda função possível é a fatorial calculada pelas multiplicações sucessivas dos valores.

[Resposta para o Problema #0052]

 9.2

As conversões de conceitos para notas e de notas para conceitos são candidatas perfeitas para serem modularizadas.

Conceito para nota:

Nota para conceito:

Com essas funções, o algoritmo poderia ter as seguintes instruções:

[Resposta para o Problema #0073]

 11.1

A troca requer a passagem por referência.

[Resposta para o Problema #0074]

 11.2

Assumindo  12.7: