Olá e bem-vindo. Nesta palestra, quero falar sobre loops aninhados e controle de loop.
Loops aninhados, loops dentro de loops, controle de loop tem a ver com
as instruções break e continue.
Então, loops aninhados.
Há momentos em que você deseja colocar um loop dentro de outro.
Faz todo o sentido.
Então, por exemplo, você
pode querer contar o número de ocupantes em cada casa em uma rua.
Portanto, o que você faria é ter um círculo externo onde você pisa de casa em casa.
E então, para cada casa em que você estiver, você contará o número de ocupantes.
Espero que você possa visualizar ou entender como isso poderia ser um loop aninhado.
Novamente, o loop externo para passar por todas as casas.
E então, para cada iteração do loop externo em cada casa que encontrar, você entraria na
casa e teria um loop para contar todas as pessoas.
Portanto, esse é um pequeno caso de uso quando você deseja realmente
utilizar um loop aninhado em c.
Aqui está um exemplo. Parece que você acha que
seria um loop dentro de um loop realmente não muito complicado.
Neste exemplo, estamos usando loops for para.
Os loops são bons porque podemos inicializar a variável de controle do loop,
ter nossa verificação de condição e nossa variável de controle de loop de modificação, tudo em uma linha.
Portanto, este loop externo e chame-o de loop interno externo
O loop externo é exatamente o que implica. É o laço do lado de fora.
E você pode ter muitas, muitas camadas diferentes de aninhamento. Você pode ter muitos
loops internos.
Neste caso, estamos passando por um loop
controlado por contador, estamos começando em um e vamos até o fim para contar.
Não sabemos o que conta aqui, não importa.
No corpo do loop for, estamos dizendo que soma é igual a 0. Estamos inicializando a soma para o loop interno.
E então, dentro do loop interno, vemos outro loop for para ej igual a 1, j é
menor que igual a I e mais mais j. Então dizemos soma mais igual a j.
Estamos calculando a soma dos inteiros de 1 a I.
Então, o que isso está realmente acontecendo é que você está inserindo um número 5.
E para a primeira iteração do loop, você
está somando 1 2 3 4 e 5.
Para a próxima iteração do
loop, você está resumindo 2 3 4 5.
Para a terceira iteração do loop, você está somando 3 4 5 e assim por diante.
Portanto, os loops internos são necessários, especialmente com base no caso de uso, apenas um
loop dentro de um loop perfeitamente.
Você vai ver bastante.
Não se afaste disso. Dependendo do que você precisa fazer e do problema que está
tentando resolver, costuma ser bastante usado.
E nesse ponto, nem sempre é um loop for dentro de um loop for, você pode ter um
loop while dentro de um loop for. Você poderia ter um loop do while dentro de um
loop for, não importa.
Portanto, neste exemplo,
o mesmo exemplo exato, exceto agora dentro do corpo do loop
for, temos um loop aninhado, um loop interno chamado usando a palavra-chave while.
Portanto, ainda estamos calculando alguns números inteiros de 1 a I.
Temos alguma inicialização fora do loop while.
Temos uma condição dentro da verificação while e
temos nossas somas dentro do corpo do loop while onde
somos modificados, essa é a variável de controle do loop que estamos modificando.
Então soma mais igual e então estamos modificando a variável de controle de loop com mais mais j.
Então, se não modificássemos mais mais j, teríamos um loop infinito para o loop while.
Mas está fazendo a mesma saída, está apenas usando um loop while como um loop aninhado em vez do loop for.
Portanto, o aninhamento não é realmente diferente de quando você está aninhando qualquer coisa.
Você aninhava instruções if, instruções if dentro de instruções if, instruções de
loop aninhadas executavam loops dentro de loops.
Para fugir do conceito de
loops aninhados, vamos falar sobre a instrução continue.
Até este ponto, quando falamos sobre loops, sempre
executamos o loop várias vezes com base na condição de saída,
a expressão booleana avaliada como falsa.
No entanto, há momentos em que você deseja especificamente encerrar um loop mais
cedo ou deseja continuar na próxima iteração
do loop sem fazer nada.
No último caso, continuando sem fazer nada, pulando
essencialmente, você pode usar
a instrução continue para fazer isso.
Portanto, a instrução continue no corpo de um loop faz o seguinte.
E antes de mais nada, se você quiser iniciar isso, tudo que você precisa fazer é colocar
a palavra-chave continue seguida por um ponto-e-vírgula no corpo do loop.
Mas o que vai fazer é basicamente
pular essa iteração. Portanto, o continue qualquer coisa
abaixo de continue não será executado se estiver dentro do corpo do loop.
Portanto, continue muitas vezes que queremos estar no topo do loop com
base em alguma condição, geralmente é envolvida em uma instrução if.
Se isso acontecer em uma situação especial, não quero
executar nenhum código no corpo do loop,
apenas pule esta iteração e verifique na próxima.
E, novamente, é um pouco confuso porque você está pulando uma iteração e está pulando, mas
é válido e é uma maneira de fazer várias verificações.
Portanto, mesmo que você tenha sua condição de saída de loop dentro de sua expressão
booleana, você pode ter outra verificação.
E essa verificação não vai pular do loop, mas vai
pular uma iteração.
Portanto, é usado novamente para o caso em que você deseja pular a iteração. A vantagem disso é que
você pode usar continue e isso eliminará muitos aninhamentos.
Isso também eliminará muitas instruções if adicionais dentro do seu bloco de loops.
Portanto, pode melhorar a legibilidade quando
as instruções são muito longas ou você tem aninhamento profundo.
Então, se você achar que está fazendo muitos aninhamentos.
você pode querer dizer "huh, talvez eu possa usar um continue".
Ou se você descobrir que tem muitas instruções
if que estão fazendo certas coisas dentro do corpo do loop, talvez você queira continuar.
Não use continue se isso complicar em vez de simplificar o código.
Não use o continue se não souber o que está fazendo.
Aqui está um exemplo de continuar.
Neste exemplo, estamos criando um novo enum do tipo day
e dizendo que os valores válidos são Segunda Terça, Quarta, Quinta, Sexta, Sábado, Domingo.
E então temos um loop for em que inicializamos nosso enum
para segunda-feira e dizemos que, desde
que o dia seja menor que domingo, essa é uma
condição para sair e, então, estamos dizendo mais mais dia.
Você pode se perguntar como estamos incrementando um enum?
Bem, lembre-se de que um enum nos bastidores é um número inteiro.
Então você pode dizer mais mais dia em um enum e isso vai apenas incrementá-lo para o próximo.
Lembre-se, segunda-feira é igual a 0, terça-feira é igual a 1, quarta-feira
é igual a 2, está tudo na ordem da lista.
Tão perfeitamente bem para incrementar enums.
Neste loop for, se for quarta-feira,
queremos pular. Não queremos fazer nada. Não queremos imprimir.
Portanto, dizemos continuar. Se o dia for igual
a quarta-feira, continue. Vai pular a linha de impressão. Ele vai voltar ao topo
do loop e vai executar a próxima iteração.
E então será quinta-feira.
Não vai ser igual a quarta-feira, então não vai pular.
Vai cair e imprimir não é quarta-feira.
Portanto, este é um caso de uso comum, exemplo comum de uso de continue, sintaxe muito fácil de usar,
apenas uma palavra-chave simples seguida de ponto-e-vírgula.
O outro caso em que você pode querer fazer algo estranho no loop
é se quiser sair mais cedo.
Portanto, normalmente, depois que o corpo do loop for
inserido, um programa executará todas as instruções no corpo do loop e para
cada iteração e, em seguida, fará a verificação e saltará para fora.
E sabemos como funciona o continue, que está fazendo um salto um pouco diferente.
Existe outra instrução que pode alterar a execução de todas as instruções no loop,
é chamada de quebra.
E isso deve ser familiar, porque usamos a palavra-chave break quando falamos sobre
a instrução switch.
Lembre-se, quando tínhamos nossos casos, sairíamos dos casos dessa maneira.
Bem, você também pode usar a palavra-chave break dentro de um loop.
E o que isso fará é simplesmente saltar para fora do loop.
Portanto, a instrução break fará com que o programa saia imediatamente do loop, ele está em execução.
As instruções no loop são ignoradas e a execução do loop é encerrada.
Então você está apenas pulando fora do circuito.
Você está executando cedo. Se a instrução break estiver dentro de loops aninhados, ela afetará
apenas o loop mais interno que o contém. Você só vai pular do loop em que está.
E para fazer isso, você usa a palavra-chave quebra seguida por um ponto e vírgula.
Freqüentemente, o intervalo é usado para deixar um loop quando há 2 motivos distintos para sair.
Portanto, antes mencionei que você pode ter outro motivo pelo qual deseja pular uma iteração,
mas se houver 2 motivos, 2 condições pelas quais você deseja pular de um loop, você pode
usar uma pausa.
Se você tiver apenas
uma condição, será apenas a condição, dentro do próprio loop, dentro dos parênteses do
while ou antes do segundo ponto e vírgula no loop for.
Break também é usado em instruções switch, como mencionei.
Então, eu só queria lembrá-lo disso. Não os confunda.
No entanto, eles essencialmente fazem as mesmas coisas. Eles saltam do código.
Quebrar uma instrução switch irá pular totalmente
dessa instrução switch, quebrar um loop irá pular para fora desse loop.
Bem, aqui está um exemplo. Temos um loop while.
Estamos imprimindo alguns números inteiros.
Estamos lendo alguns números inteiros. Temos um loop while aninhado.
Dentro do loop while aninhado, verificamos o
que foi inserido. E se for maior que
100, queremos pular para fora desse loop interno. Então nós fazemos.
Então, no loop externo, temos que fazer outra verificação. Se for maior que 100, saímos
desse loop externo.
Se você não tivesse o segundo intervalo, você nunca saltaria do segundo loop externo.
Então, neste caso, isso me lembra de um lugar onde você poderia ir.
Imagine se você tivesse 5 aninhamento, 5 camadas de aninhamento, loop while dentro de um loop
while dentro de loop while dentro de loop while dentro de loop while.
Se você apenas usasse break para tentar pular de
loops, você teria todas essas instruções if em cada loop para pular.
Em vez de fazer todas aquelas instruções
if, você pode tentar. O go to saltaria de todos os loops de estado do loop em um único comando.
Então, esse é um caso de uso para ir. Mas, neste caso, estamos apenas demonstrando
quebras e temos certeza de que você entendeu que está apenas
saindo daquele loop em que está por dentro.
E, neste caso, estamos quebrando 2 loops.
Portanto, estes são os 2 exemplos, as 2 palavras-chave onde você essencialmente não pode repetir o
código do que você espera.
Portanto, se você vir uma quebra ou continuar no loop, certifique-se de
entender o que está acontecendo, porque
você pode não estar executando determinado código que acha que será executado.
Novamente, geralmente envolto em uma condição if. Portanto, você pode ver
as coisas dessa maneira, mas também deseja fornecer bons comentários quando usar break ou continue.
Espero que isto ajude. Na próxima aula, faremos um
desafio em que seremos capazes de utilizar esses
loops e isso demonstrará e ajudará você a aprender tudo sobre os loops while for e
break e continue. Obrigada.