paulo1205
(usa Ubuntu)
Enviado em 03/05/2019 - 19:32h
Nerdiarretado escreveu:
Eu agradeço a todos os comentários, mas tenho uma filosofia de tentar resolver os algortimos sempre com o for, caso seja inviável para mim tento com os outros laços.
Cuidado com essa “filosofia”, pois ela está em algum lugar entre o simplista demais para ser séria e o contraproducente inútil.
O comando
for do C é bastante versátil. Para entender por que, eis duas construções equivalentes.
for(expressão_1; expressão_2; expressão_3)
comando
{
expressão_1;
if(expressão_2)
do
comando
while((expressão_3), (expressão_2))
}
Nos exemplos acima, “
comando” pode ser um comando simples (inclusive um comando vazio), terminado por um ponto-e-vírgula, ou um bloco de comandos, colocados entre chaves. Adicionalmente, quando se usa
for, qualquer uma das três expressões pode ser uma expressão vazia; com a segunda construção equivalente, a
expressão_2 não pode ser vazia (mas pode-se conseguir efeito semelhante trocando-a por um valor não-nulo, como
1 ou
true), e uma
expressão_3 vazia implicaria remover a vírgula da expressão entre parênteses do
while (ou manter a vírgula, mas trocar a expressão por uma expressão inócua qualquer).
Mesmo assim, nem sempre vale a pena usar
for. O principal caso é quando você quer que o
comando (e possivelmente também a
expressão_3) seja executado pelo menos uma vez antes de avaliar a
expressão_2, caso esse em que se costuma preferir a construção “
do comando while(expressão);”. Para conseguir o mesmo resultado com
for, você teria de repetir o
comando uma vez antes do laço de repetição, o que é deselegante e particularmente inconveniente quando se trata de um comando composto.
Outro caso em que não vale a pena usar
for é quando você não tem de avaliar algo que seria a
expressão_1 e também quer executar a
expressão_3 (ou parte dela) apenas em determinados casos, não ao final de cada iteração.
Outra razão para não usar sempre
for, que nos traz de volta ao campo de “filosofia”, é que é conveniente que você use construções semelhantes ao que outros programadores usariam, de modo que seja mais fácil para que eles compreendam seu código, e você, os deles. Um certo paper de teor humorístico (se não me engano, intitulado “
Real Programmers Don't use Pascal”) dizia que “um Programador de Verdade determinado consegue escrever programas em FORTRAN usando qualquer linguagem”. É óbvio que é uma piada. Você não quer ser o cara que quer escrever um programa com uma cara diferente da que se espera de programas escritos naquela linguagem, e eu garanto que, se você realmente enveredar pela área, não vai gostar de encontrar código feitos por terceiros que pareçam muito diferentes do que você esperaria encontrar. Assim como acontece com as linguagens naturais, a comunicação é melhor quando as pessoas falam a mesma língua e usam as mesmas expressões com os mesmos sentidos. É em geral, portanto, uma boa filosofia falar a mesma língua dos seus pares.
Outra boa filosofia, diretamente aplicável (mas não aplicada) no seu programa, é a de sempre verificar o valor informado pelo usuário, antes de fazer operações diretas com ele. Para entender por que, pense no que aconteceria com o programa se o usuário digitasse 1000000 (ou mesmo apenas 10, ou um valor negativo) como valor na entrada.
... “Principium sapientiae timor Domini, et scientia sanctorum prudentia.” (Proverbia 9:10)