Considere os seguintes comandos da linguagem Java:boolean f,...
Considere os seguintes comandos da linguagem Java:
boolean f, g, h;
int b = 1, a = 2, c = 10, d = 5 ;
f = ! ((a + c) ! = (d + d + a)) ;
g = ((a + d) < = (c - d) || (c - d) > (a * d)) ;
h = ! ((c/d-b*a) < (a+d) && (c/a) > (a+b)) ;
Os valores que serão armazenados nas variáveis f, g e h são, respectivamente,
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
A alternativa correta é a C - true, false e false. Vamos entender o porquê dessa alternativa ser a correta através da análise das expressões dadas na linguagem Java. É importante destacar que, para resolver esse tipo de questão, o aluno deve ter uma compreensão sólida sobre operadores lógicos, operadores relacionais e precedência de operadores em Java.
Primeiramente, vamos calcular as expressões atribuídas a cada variável booleana f, g e h, utilizando os valores das variáveis a, b, c e d fornecidos.
1. Cálculo de f:
f = ! ((a + c) != (d + d + a));
Substituindo os valores, temos f = ! ((2 + 10) != (5 + 5 + 2));
, que simplifica para f = ! (12 != 12);
. Como 12 é igual a 12, a expressão dentro dos parênteses é false. O operador lógico de negação !
inverte o valor, então f = !false;
resulta em f = true;
.
2. Cálculo de g:
g = ((a + d) <= (c - d) || (c - d) > (a * d));
Aqui temos duas expressões conectadas pelo operador lógico ||
(OU). Vamos avaliá-las separadamente:
(a + d) <= (c - d)
se torna (2 + 5) <= (10 - 5)
, que simplifica para 7 <= 5
, o que é false.
(c - d) > (a * d)
se torna (10 - 5) > (2 * 5)
, que simplifica para 5 > 10
, o que também é false.
Como ambas as expressões são false, e estamos utilizando o operador lógico OU, g
será false.
3. Cálculo de h:
h = ! ((c/d-b*a) < (a+d) && (c/a) > (a+b));
Aqui temos duas expressões conectadas pelo operador lógico &&
(E). Vamos avaliá-las separadamente:
(c/d-b*a)
se torna (10/5-1*2)
, que simplifica para (2-2)
, resultando em 0
.
(a+d)
se torna (2+5)
, que é 7
. Portanto, 0 < 7
é true.
(c/a)
se torna (10/2)
, que é 5
.
(a+b)
se torna (2+1)
, que é 3
. Portanto, 5 > 3
é true.
Como ambas as expressões são true e estão conectadas pelo operador lógico E, a expressão dentro dos parênteses é true. Aplicando a negação !
, h
será !true
, ou seja, false.
Portanto, a resposta correta para os valores de f, g e h é true, false e false, correspondendo à alternativa C.
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
Pessoal eu coloquei essas expressoes pra rodar e me retornou true true false, façam o teste.
A primeira expressão é:
f = ! ((a + c) ! = (d + d + a)) ;
f = ! ((2+ 10) != (5 + 5 + 2)) => f = ! (12 != 12)) => verdadeiro, é só observar a negação
A segunda expressão é:
g = ((a + d) < = (c - d) || (c - d) > (a * d)) ;
g = ((2 + 5) < = (10 - 5) || (10 - 5) > (2 * 5)) => g = ((7 < = 5) || (5 > 10)) => falso, é só ver que os valores dentro de cada expressão e depois computar o 'ou'
A terceira expressão é:
h = ! ((c/d-b*a) < (a+d) && (c/a) > (a+b)) ;
h = ! ((10/5-1*2) < (2+5) && (10/2) > (2+1)) => h = ! ((2-2) < (7) && (5) > (3)) => h = ! ((0 < 7) && (5 > 3)) => falso, é só ver que os valores dentro de expressão e observar a negação após a resolução interna da expressão
boolean f, g, h;
int b = 1, a = 2, c = 10, d = 5 ;
f = ! ((a + c) != (d + d + a)) ;
g = ((a + d) <= (c - d) || (c - d) > (a * d)) ;
h = ! ((c/d-b*a) < (a+d) && (c/a) > (a+b)) ;
System.out.println("F: "+f);
System.out.println("G: "+g);
System.out.println("H: "+h);
F: true
G: false
H: false
Letra C)
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo