1
resposta

Todos os números entre 30 a 40, exceto 33 e 37! - Solução / Compreensão - Dúvida

Após quebrar a cabeça um pouquinho mais, creio que consegui fazer e entender esse exercicio.

O código seria esse:

var contador = 30
while(contador <= 40){
    if (contador == 33) {
        contador = contador + 1 
    }
    if (contador == 37){
        contador = contador + 1
    }else {
        mostra(contador)
        contador = contador + 1 
    }
}
mostra("FIM");

Gostaria de saber se compreendi de maneira certa pois quando o contador recebia o valor 33 ou 37 entrava nas condições if e dentro dessas condições é feita a somatória porém não estava conseguindo entender por que dentro dessas condições ifs já não chamava a função mostra() com o valor do contador atual, depois de quebrar a cabeça um pouquinho e usar o caderno para literalmente escrever o código creio que cheguei a um entendimento e gostaria de saber se está correto:

Quando o contador recebe o valor 33 irá entrar no primeiro if(contador ==33) como é verdadeiro essa condição, será feita a soma desse valor com +1 que irá retornar 34 porém com esse novo valor irá entrar novamente na condição while, ou seja, agora irá verificar se:

while(34<=40){ // bloco de código }

Como essa condição irá retornar verdadeira irá ser verificado a primeira condição if(contador ==33) como nesse caso irá retornar falso pois 34 não é igual a 33,será verificado no segundo if(contador ==37) que também irá retornar falso e como os dois ifs o retorno foi falso,vai entrar no else onde está sendo chamado a função mostra() tendo como parametro a variavel contador e logo em seguida a soma do contador. então quando sair de algum dos ifs com o resultado da soma,não irá entrar logo em seguida no condição else para ser mostrado na tela mas sim irá retornar novamente para a condição while para ser verificado se é verdadeiro ou se é falso, caso seja verdadeiro o bloco de código dentro do while será executado e quando for falso vai direto para o final,onde tem a função mostra com o parametro "FIM".

Seria mais ou menos assim a lógica nesse caso? Ou compreendi de forma errada?.

1 resposta

Olá, Marcella, tudo bem?

Antes de tudo, vejo que você está contribuindo muito para o fórum com suas soluções e explicações bem detalhadas!! Ficamos muito felizes de ver seu progresso e sua disposição em compartilhar conosco!!

Agora respondendo a sua pergunta: seu raciocínio está quase totalmente certo! Só preciso fazer algumas observações.

Assim que a variável contador chega no valor 33, ela atende a condição do primeiro if e o valor de contador é somado mais 1, ficando com 34. Assim que isso acontece, o fluxo do código continua normalmente, seguindo para o próximo bloco if. Será feita então a verificação if (contador == 37), e como contador é igual a 34 agora, o fluxo do código pula para o bloco else, executando mostra(contador) (mostrando 34) e depoiscontador = contador + 1, ficando com valor 35.

Apenas agora o fluxo do código retorna para a verificação do while, verificando se 35 é menor ou igual a 40, e assim por diante.

Estou fazendo essa observação porque houve um momento que você disse que assim que assim que o valor de contador é 34, retorna para a verificação do while, mas na verdade isso não acontece, o fluxo do código avançará para a verificação do segundo if e entrará no else, como mencionei anteriormente. Mas curiosamente, sua lógica trouxe o mesmo resultado do que o que realmente estava acontecendo!

Espero que não tenha ficado confuso! É um pequeno detalhe, mas é importante que entenda exatamente como o fluxo do código funciona, para que você não tenha dificuldades no futuro. Adicionalmente, o código desse exercício também traz o mesmo resultado se for escrito dessa forma:

  var contador = 30;

  while (contador <= 40) {

    if (contador == 33) {
      contador = contador + 1;
    }
    if (contador == 37) {
      contador = contador + 1;
    }

    mostra(contador);
    contador = contador + 1;
  }

  mostra("FIM");

Eu basicamente tirei o else, pois realmente não precisamos dele. No geral, o que o código faz é: mostre o valor de contador e some mais 1, mas se contador for igual a 33 ou 37, some mais 1 antes de mostrar seu novo valor (que será 34 ou 38). Assim, impedimos que o código mostre os valores 33 e 37.

Espero que tenha te ajudado! Se restar dúvidas, pode nos falar. Mais uma vez, parabéns pela dedicação! Continue assim e bons estudos :)