Analise o trecho de pseudocódigo a seguir. Em algumas lingua...
Analise o trecho de pseudocódigo a seguir.
Em algumas linguagens de programação é possível fazer a passagem de parâmetros como byref ou byvalue, e assim podemos supor que a função ƒ acima poderia ser reescrita especificando, para cada parâmetro, uma das duas formas citadas.
Supondo-se que o primeiro e o segundo parâmetro da função tenham sido passados como byref e o terceiro, como byvalue, os quatro valores exibidos pelo comando print seriam, respectivamente,
Comentários
Veja os comentários dos nossos alunos
Vou tentar explicar.
A primeira coisa que você saber é a diferença entre byref e byvalue.
byref: "Por referência. Um argumento definido como sendo ByRef, altera o valor da variável que foi passada como parâmetro para o procedimento."
byvalue: "Por valor. Um argumento definido como sendo ByVal, não altera o valor da variável que foi passada como parâmetro para o procedimento."
O enunciado nos diz que "x" e "y" serão passados por byref e "z", por byvalue. Aqui, já deveríamos ter em mente que, se a função atribuir outros valores para "x" e "y" eles irão ser alterados "fora da função" também.
Pois bem, indo para a função, temos o seguinte:
a = 10 (ou seja, o valor de "x")
b = 2 (ou seja, o valor de "y")
c = 3 (ou seja, o valor de "z")
No laço de repetição, temos: "b" é menor ou igual a "c" (2 <= 3)? Sim. Então:
- a = b + c (a = 2 + 3), logo: a = 5 //aqui vai uma observação importante: como "x" foi passado por referência (byref) e "a" representa "x", então, fora da função, "x" agora tem o valor de 5.
- y = b + 1 (y = 2 + 1), logo: y = 3 //mesma ideia do comentário anterior. "b" faz referência a "y" e vice-versa. Então, se "y" foi alterado, "b" também será alterado. Daí temos, agora, que b = 3.
Dentro da função, estamos assim:
a = 5
b = 3
c = 3
Fora da função, estamos assim:
x = 5
y = 3
z = 3
Continuando para o próximo e último laço de repetição:
b <= c? 3 <= 3? Sim! Então, vamos entrar para o laço:
- a = b + c (a = 3 + 3), logo: a = 6 //mesmos comentários anteriores.
- y = b + a (y = 3 + 1), logo: y = 4 //mesmos comentários anteriores.
Agora, dentro da função estamos assim:
a = 6
b = 4
c = 3
Fora da função:
x = 6
y = 4
c = 3
Passando para o laço, temos: b <= c? 4 <= 3? Não! Então, não vamos mais executar esse laço.
Assim, retornamos a + b + c, ou seja, 6 + 4 + 3 = 13.
O print vai mostrar:
f(x, y, z) = 13
x = 6
y = 4
z = 3
(13, 6, 4, 3), alternativa letra "B".
Fonte: https://sites.google.com/site/programacaoonline/family-blog/vb-net/-byval-e-byref-em-vb-net
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo