O fragmento de código a seguir deveria imprimir a mensagem Valores aceitos, caso os valores de pelo menos uma das variáveis a e b seja par. Caso contrário, o código deveria imprimir a mensagem Valores nao aceitos. Porém, o código apresenta erros e não está imprimindo as saídas corretas para todos os casos.
if ((a/2 != 0) || (b/2 != 0)){
}
cout << Valores aceitos;
else{
}
cout << Valores nao accitos;
Com base nesse código, responda os itens a seguir.
Qual a saída esperada (correta) e a saída do código acima (incorreto) para os seguintes valores de a e b: (a=1, b=1),(a=4, b=6),(a=0, b=0),(a=1, b=10)

Passo 1

Beleza, vamos lá! Você me mostrou um código que deveria imprimir “Valores aceitos” se pelo menos um dos números, a ou b, for par. Se nenhum for par, deveria imprimir “Valores nao aceitos”. Mas o código tem umas manias que tão fazendo ele errar. Vamos entender qual é o problema e ver o que ele tá fazendo de errado para cada par de números que você mencionou.

Passo 2

Primeiro, vamos dar uma olhada no trecho de código que você forneceu:
if ((a/2 != 0) || (b/2 != 0)){
}
cout << "Valores aceitos";
else{
}
cout << "Valores nao accitos";
Aqui, a intenção é verificar se a ou b são pares. Mas tem umas bugs na lógica e na sintaxe. Vamos destrinchar isso.

Passo 3

Erro 1: Uso da divisão ao invés do módulo
Para verificar se um número é par, usamos o operador módulo (%), que dá o resto da divisão. Se a % 2 == 0, significa que a é par. No código, está usando a/2 != 0, que na verdade está verificando se a divisão de a por 2 não é igual a zero, o que não é a melhor maneira de checar paridade.
Erro 2: Sintaxe do if-else
Em C++, a estrutura do if-else precisa ter o else diretamente após o fechamento do bloco do if. No código, os cout estão fora dos blocos {}, e o else está separado, o que causa erro de sintaxe.

Passo 4

Vamos corrigir a condição para usar o operador módulo e ajustar a sintaxe:
if ((a % 2 == 0) || (b % 2 == 0)) {
    cout << "Valores aceitos";
} else {
    cout << "Valores nao aceitos";
}
Agora, esse código verifica corretamente se pelo menos um dos números é par e imprime a mensagem adequada.

Passo 5

Agora, vamos analisar o que o código original faz incorretamente para cada par de valores:
  1. (a=1, b=1)
    • Esperado: Ambos são ímpares, então “Valores nao aceitos”.
    • Código Incorreto: 1/2 em inteiros é 0, então (0 != 0) || (0 != 0) é false. Vai para o else e imprime “Valores nao aceitos” (correto nesse caso).
  2. (a=4, b=6)
    • Esperado: Ambos são pares, então “Valores aceitos”.
    • Código Incorreto: 4/2 é 2 (!= 0) e 6/2 é 3 (!= 0), então (2 != 0) || (3 != 0) é true. Imprime “Valores aceitos” (correto nesse caso).
  3. (a=0, b=0)
    • Esperado: Ambos são pares (0 é par), então “Valores aceitos”.
    • Código Incorreto: 0/2 é 0 (não != 0), então (0 != 0) || (0 != 0) é false. Vai para o else e imprime “Valores nao aceitos” (erro aqui).
  4. (a=1, b=10)
    • Esperado: b é par, então “Valores aceitos”.
    • Código Incorreto: 1/2 é 0 (não != 0) e 10/2 é 5 (!= 0), então (0 != 0) || (5 != 0) é true. Imprime “Valores aceitos” (correto nesse caso).

Resposta

Valores de a e b Saída Esperada Saída do Código Incorreto
(a=1, b=1) Valores nao aceitos Valores nao aceitos
(a=4, b=6) Valores aceitos Valores aceitos
(a=0, b=0) Valores aceitos Valores nao aceitos
(a=1, b=10) Valores aceitos Valores aceitos

Exercícios relacionados