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:
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:
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-elseEm 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:
-
(a=1, b=1)
- Esperado: Ambos são ímpares, então “Valores nao aceitos”.
- Código Incorreto:
1/2em inteiros é0, então(0 != 0) || (0 != 0)éfalse. Vai para oelsee imprime “Valores nao aceitos” (correto nesse caso).
-
(a=4, b=6)
- Esperado: Ambos são pares, então “Valores aceitos”.
- Código Incorreto:
4/2é2(!= 0) e6/2é3(!= 0), então(2 != 0) || (3 != 0)étrue. Imprime “Valores aceitos” (correto nesse caso).
-
(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 oelsee imprime “Valores nao aceitos” (erro aqui).
-
(a=1, b=10)
- Esperado:
bé par, então “Valores aceitos”. - Código Incorreto:
1/2é0(não != 0) e10/2é5(!= 0), então(0 != 0) || (5 != 0)étrue. Imprime “Valores aceitos” (correto nesse caso).
- Esperado:
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 |