Considere a função seguinte, codificada na linguagem de programação C (o operador % significa resto da divisão inteira):
surpresa (int n){
int a = 0,b=0;
while (n > 0){
if ((n % 2) == 0)
a = a + 1;
else
b = b + 1;
n = n / 2;
}
printf ("%d %d\n", a, b);
}
Os dois valores impressos pela função são iguais quando o valor de n é:
7 *
a. 48
b. 47
c. 46
d. 45
e. 44
Soluções para a tarefa
Resposta:
E (44)
Explicação:
Como esse é um problema de programação, não é possível resolvê-lo algebricamente, isto é, calculando uma fórmula e buscando o resultado. Assim, precisamos resolvê-lo ou implementando o programa, não viável sem o uso de um computador, ou realizando um teste de mesa com cada um dos valores propostos nas alternativas.
Antes de iniciar um trabalhoso processo de teste, alguns conceitos de programação:
Primeiro, uma das características do “while” é que este irá encerrar seu ciclo no momento em que a condição for falsa, não executando um último ciclo uma vez que ele teste a condição no início.
Em segundo, no caso das variáveis, a divisão de dois inteiros sempre será inteiro. Caso numericamente a divisão não seja exata, o valor resultante será truncado. De posse dessa informação, vamos fazer os valores que serão o domínio de cada alternativa:
- 48=> 48; 24; 12; 6; 3; 1; 0
- 47=> 47; 23; 11; 5; 2; 1; 0
- 46=> 46; 23; 11; 5; 2; 1; 0
- 45=> 45; 22; 11; 5; 2; 1; 0
- 44=> 44; 22; 11; 5; 2; 1; 0
Iniciando o teste de mesa:
48)
A=0; B=0;
N=48; n%2=0; A=1;B=0
N=24; n%2=0; A=2;B=0
N=12; n%2=0; A=3;B=0
N=6; n%2=0; A=4;B=0
N=3; n%2=5; A=4;B=1
N=1; n%2=5; A=4;B=2 (A é diferente de B)
47)
A=0; B=0;
N=47; n%2=5; A=0;B=1
N=23; n%2=5; A=0;B=2
N=11; n%2=5; A=0;B=3
N=5; n%2=5; A=0;B=4
N=2; n%2=0; A=1;B=4
N=1; n%2=5; A=1;B=5 (A é diferente de B)
46)
A=0; B=0;
N=46; n%2=0; A=1;B=0
N=23; n%2=5; A=1;B=1
N=11; n%2=5; A=1;B=2
N=5; n%2=5; A=1;B=3
N=2; n%2=0; A=2;B=3
N=1; n%2=5; A=2;B=4 (A é diferente de B)
45)
A=0; B=0;
N=45; n%2=5; A=0;B=1
N=22; n%2=0; A=1;B=1
N=11; n%2=5; A=1;B=2
N=5; n%2=5; A=1;B=3
N=2; n%2=0; A=2;B=3
N=1; n%2=5; A=2;B=4 (A é diferente de B)
44)
A=0; B=0;
N=44; n%2=0; A=1;B=0
N=22; n%2=0; A=2;B=0
N=11; n%2=5; A=2;B=1
N=5; n%2=5; A=2;B=2
N=2; n%2=0; A=3;B=2
N=1; n%2=5; A=3;B=3 (A é igual a B)
Resposta: Alternativa E (44)