Observe a rotina abaixo escrita em pseudocódigo.1. inicio2. ...
1. inicio
2. p : inteiro = 20
3. misturar(p,p)
4. imprimir p
5. fim
6. procedimento misturar(a:inteiro, b:inteiro)
7. a=a+(b/2)–(b/5)+14;
8. b=(a/b)-1;
9. fim da função
Considerando-se a linha 1 como o ponto de entrada, e que os parâmetros "a" e "b" da sub-rotina são passados por referência, qual será o valor impresso na linha 4?
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
A alternativa correta é: A - 0
Vamos entender o tema central da questão: trata-se da passagem de parâmetros por referência em procedimentos ou funções. Este conceito é fundamental na programação, especialmente ao lidar com linguagens que permitem a manipulação direta de variáveis fora do escopo da função.
Quando um parâmetro é passado por referência, a função ou procedimento pode modificar o valor da variável original. Isso ocorre porque, em vez de criar uma cópia do valor, é fornecido um "endereço" que o procedimento utiliza para acessar e modificar a variável diretamente.
No pseudocódigo apresentado, a rotina é composta por um procedimento chamado misturar, que altera os valores dos parâmetros a e b. Observando a linha 3, a chamada misturar(p, p) implica que ambos os parâmetros, a e b, estão referenciando a mesma variável p.
Dentro do procedimento misturar:
- No passo 7,
aé alterado por meio da expressãoa = a + (b/2) - (b/5) + 14. Comoaebsão referências parap, essa modificação afeta diretamente o valor dep. - O passo 8 tenta modificar
batravés da expressãob = (a/b) - 1. No entanto, comoaebreferenciam a mesma variável, qualquer mudança continuará afetandop.
Após executar a rotina em misturar, a variável p se torna 0 devido às operações realizadas na expressão do passo 8, já que estamos dividindo a por ele próprio, que foi previamente modificado.
Agora, vamos analisar as alternativas:
- A - 0: Correto. Como explicado, as operações dentro do procedimento misturar resultam em
pser zerado. - B - 1: Incorreto. Não há operação que resulte em
psendo 1 ao final do procedimento. - C - 19: Incorreto. O valor de
pcomeça como 20 e é modificado dentro do procedimento. - D - 20: Incorreto. Este seria o valor inicial de
p; no entanto, ele é alterado pela chamada de misturar. - E - 40: Incorreto. Não há operação que dobre o valor de
ppara 40.
Para resolver questões deste tipo, é crucial compreender como a passagem de parâmetros por referência pode modificar variáveis originais e, ao analisar o código, prestar atenção em como os valores são manipulados dentro de sub-rotinas.
Gostou do comentário? Deixe sua avaliação aqui embaixo!
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
A resposta correta é B. o Resultado de b, no procedimento misturar, é igual a 1. Existem 2 formas de passagem de parâmetros: Passagem por referência: alteração no valor dos parâmetros formais durante a execução da função será refletida no valor de seus parâmetros reais correspondentes, na questão, nosso P sofrerá alteração, e receberá o valor da função misturar. Passagem por valor: o valor dos parâmetros formais sendo alterado durante a execução da função não acarretará em nenhuma modificação no valor dos parâmetros reais (variáveis da função chamadora).
GABARITO: A; p= 0
Valor inicial: p = 20
Roda o procedimento misturar, onde a=20 e b=20, no qual ambos referenciam a variável p: a=a+(b/2)–(b/5)+14;
a=40 e o valor de p será atualizado para 40. Como b referencia a p, seu valor será alterado para 40 também. Continuando: b=(a/b)-1; //b=(40/40)-1
b valerá 0 e p também. Ao imprimir p, o resultado será igual a 0.
- Início: é inicializado com o valor 20.
- Chamada da função: . Agora, dentro da função, e são referências para .
- Linha 7 ($a = a + (b/2) - (b/5) + 14$):
- Como $a$ e $b$ valem 20:
- $a = 20 + (20/2) - (20/5) + 14$
- $a = 20 + 10 - 4 + 14$
- $a = 40$
- Como é por referência, p agora vale 40.
- Linha 8 ($b = (a/b) - 1$):
- Aqui está o "pulo do gato": como ambos referenciam , tanto quanto agora valem 40.
- $b = (40 / 40) - 1$
- $b = 1 - 1$
- $b = 0$
- Como é por referência, p agora vale 0.
- Linha 4: O comando exibirá o valor final.
Resposta Correta:
A) 0
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo