Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Exercício todos os números entre 30 a 40, exceto 33 e 37!

Minha dúvida é em relação a lógica utilizada "E" (&&):

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

Quando fiz o código na primeira vez utilizei uma lógica diferente por entender que a comparação dentro do if daria "falso", pois eu teria que ter o número 33 e 37 em uma mesma comparação,

Mas quando vi a solução e testei, realmente funciona, não mostra o número 33 nem o 37,

Para mim, a lógica correta seria "OU", pois assim, geraria "true" ou para 33 ou para 37,

Não entendi essa associação dentro do if dando true para uma ou outra situação, ele se comporta dessa maneira mesmo quando utilizamos a lógica "E"?

2 respostas
solução!

Olá meu aluno. Em lógica booleana, quando usamos OU, basta uma condição ser true para que tudo seja true. Com E, só será true se todas as condições forem true. Basta uma false para tudo dar false.

Aplicando essa regra simplificada da lógica booleana consegue entender já por que usar OU não resolve?

No aguardo meu aluno.

Olá... obrigado pela dúvida, vou tentar colocar aqui o passo a passo para ver se entendo bem, vou simplificar de 32 , 33 ... 36 e 37:

32 é diferente de 33 = sim 32 é diferente de 37 = sim if (true && true) ==> if (true) = mostra("ok")

33 é diferente de 33 = não 33 é diferente de 37 = sim if (false && true) ==> if (false) = não mostra . . . 36 é diferente de 33 = sim 36 é diferente de 37 = sim if (true && true) ==> if (true) = mostra("ok")

37 é diferente de 33 = sim 37 é diferente de 37 = não if (true && false) ==> if (false) = não mostra

Ah perfeito, fazendo assim entendi... o valor da certo porque estamos usando a comparação negando a igualdade do valor "!=", com isso não sendo igual as duas situações ele gera "true". Para usar "OU" eu teria que inverter o resultado do if.

Estava dando um nó aqui na cabeça... agradeço o apoio!