Descreva, de modo geral, como você removeria qualquer comando continue de um loop em um programa e substituiria esse comando por algum equivalente estruturado. Use a técnica que você desenvolveu aqui para remover o comando continue do programa da Figura 4.12.

Passo 1

OK, nem precisa falar: você leu essa questão e pensou:

Como assim eu tenho que criar uma técnica? E ainda por cima usar ela num programa? Assim, sem nem um velório apropriado?

Essa técnica não vai ser nada de novo, eu prometo, todo mundo faz isso. O que os autores do livro esperam é que você consiga desenvolver essa intuição sozinho :) Por isso, vou construir o pensamento junto com você.

Antes de tudo, vamos relembrar o que o continue faz? Quando usamos esse comando dentro de laço, a gente pula a execução atual do laço e vai para a próxima execução. Por exemplo, se eu tiver o seguinte loop:

Basicamente, eu vou imprimir em qual execução do loop eu estou (meu i). Mas, se i valer 3, então eu vou pular o restante dessa execução (ou seja, em vez de eu ir para a linha 5, eu volto para a linha 3 e continuo a execução a partir daí). Por isso, eu vou imprimir apenas 1, 2, 4 e 5. Assim:

OK, entendi o que é continue. Mas o que é o “equivalente estruturado”? Cara, nesse caso, uma forma que tenha o mesmo resultado da imagem acima, mas utilizando programação estruturada. Nesse caso, recomenda-se não usar comandos que quebrem o fluxo sequencial (ou seja, eu vou da linha 1 para 2, da linha 2 para 3, voltando apenas em casos de loops). Quando eu uso comandos como break, continue, ou até mesmo o polêmico goto, eu quebro totalmente esse fluxo de um jeito não muito harmonioso.

Por isso, o enunciado pede que você substituía o comando continue por algum equivalente que não acabe com o fluxo do programa, ok? Vamos ver como fazer isso?

Passo 2

O que eu preciso fazer é que, quando chegue no certo valor que eu usaria o continue para pular, ele vá direto para o próximo, sem continuar a leitura. Então, se eu estivesse na repetição 2 e aplicasse um continue, você concorda que eu teria que ir direto para a 3, sem continuar o restante da execução 2? Bom, um modo geral de substituir o continue é usar um variável++ no lugar dele. Afinal, se eu acrescentasse mais uma unidade, eu já estaria na próxima repetição :0 UOU! Que loucura! Para ver na prática, vamos pegar o código que eu te dei de exemplo. Se eu o refizesse com:

O resultado também seria:

Passo 3

Usando a ideia do passo 2, vamos refazer o código da figura 4.12, que é o abaixo:

Bom, nesse caso, eu tenho um loop que repete 10 vezes e deveria imprimir de 1 até 10. Mas eu quero que pule o 5, e não quero mais usar o continue. Por isso, vou aplicar um x++, assim eu posso ir direto para o 6 e continuar a execução normalmente.

Resposta

De modo geral, posso substituir o continue; por um variável++; e obter o mesmo efeito.

Código da figura 4.12 corrigido: