Uma crítica ao comando break e ao comando continue é que eles não são estruturados. Na realidade, comandos break e comandos continue sempre podem ser substituídos por comandos estruturados, embora isso possa ser complicado. Descreva, em geral, como você removeria qualquer comando break de um loop em um programa e substituiria esse comando por algum equivalente estruturado. [Dica: o comando break sai de um loop de dentro do corpo do loop. A outra maneira de sair é falhando no teste de continuação do loop. Considere o uso de um segundo teste no teste de continuação do loop, que indique ‘saída antecipada devido a uma condição de interrupção’.] Use a técnica que você desenvolveu aqui para remover o comando break do programa da Figura 4.11.
Passo 1
Olá, amigo(a) programador(a)! Programação estruturada é tudo, e quanto antes você aprender isso, melhor. Nesse problema, queremos substituir o break por um “equivalente estruturado”. Antes de tudo, vamos relembrar esses conceitos?!
O break é um comando capaz de PARAR um laço. Ou seja, se eu encontro um break; no meio do meu for, por exemplo, ele vai parar ali mesmo e meu programa vai executar o que vier depois desse loop.
Então se eu tiver algo como:
O resultado vai ser esse:
Afinal, na 5ª repetição, meu loop vai ser interrompido! Então eu vou direto da linha 6 para a linha 10.
OK, entendi o que é break. 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 break por algum equivalente que não acabe com o fluxo do programa, ok? Bora pra resolução!
Passo 2
Como eu substituo o break? Bem, o que a gente quer basicamente é parar totalmente o loop quando chegamos a certo valor. Para isso, usaremos uma variável extra. Quando chegarmos na repetição x que queremos que o programa pare, vamos atribuir um valor y para essa variável. Além disso, na condição do loop, vamos colocar que ele só repete enquanto a condição de comparação && variável extra == valor inicial ou então variável extra != y. Lembrando que essa variável extra, capaz de “parar” o loop usando essa técnica, ganha o apelido de flag. O problema é que isso ainda executaria essa repetição até o fim antes de parar. Por isso, nesses casos, podemos acrescentar um else nas demais linhas ou algum recurso do gênero. Basicamente, usando o exemplo que te dei no passo 1, teríamos:
Nossa flag é a variável paraLoop. Obtemos o mesmo resultado!
Passo 3
O código da figura 4.11 é esse aqui:
Utilizando a ideia do passo 2, vamos criar a variável parada, do tipo inteiro, e inicializar com 0. Vamos colocar que o for continua enquanto parada for diferente de 1 e iremos colocar um else antes do printf, beleza?
Resposta
Podemos substituir o break pelo uso de uma flag no loop;
Correção do código 4.11: