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-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:
-
(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 oelse
e 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 oelse
e 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 |