Observe a rotina abaixo escrita em pseudocódigo.1. inicio2. ...

Próximas questões
Com base no mesmo assunto
Q287818 Programação
Observe a rotina abaixo escrita em pseudocódigo.

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?

Alternativas

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ão a = a + (b/2) - (b/5) + 14. Como a e b são referências para p, essa modificação afeta diretamente o valor de p.
  • O passo 8 tenta modificar b através da expressão b = (a/b) - 1. No entanto, como a e b referenciam a mesma variável, qualquer mudança continuará afetando p.

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 p ser zerado.
  • B - 1: Incorreto. Não há operação que resulte em p sendo 1 ao final do procedimento.
  • C - 19: Incorreto. O valor de p começ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 p para 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.

  1. Início: é inicializado com o valor 20.
  2. Chamada da função: . Agora, dentro da função, e são referências para .
  3. 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.
  1. 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.
  1. 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