Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sr.Hozuki

Passagem de parametro por valor e referencia

Recommended Posts

É o seguinte, eu fiz um algoritmo bem básico só para testar esses tipos de passagens, eu sei o básico sobre cada uma. Foi feito pelo VisualG

var
C, N1, PAR, IMPAR : inteiro
procedimento parouimpar(X, Y, Z : inteiro)
var

inicio

  se (X%2 = 0 ) entao
    Y <- Y + 1
  senao
    Z <- Z + 1
  FimSe
 Limpatela
 Escreval (" Foram totalizados ", Y , " numeros pares ")
 Escreval (" Foram totalizados ", Z , " numeros impares ")

fimprocedimento
inicio
PAR <- 0
IMPAR <- 0
 Para C <- 1 ate 10 faca
   Escreva (" Digite um numero : ")
   Leia (N1)
   parouimpar (N1,PAR,IMPAR)
 Fimpara
fimalgoritmo

Eu sei que quando coloca-se o " var " na frente do procedimento significa que a passagem vai ser por referencia, assim, os valores vão ser jogados nas váriaveis do programa principal. A minha duvida é : Porque quando eu removo o " var " e deixando as passagens apenas por valores o algoritmo não funciona direito, ou seja, ele não acumula os valores pares e impares nos parametros Y e Z? Quando eu coloco por referencia funciona tudo certinho, acumula os valores e joga tudo nas variaveis " PAR " e " IMPAR ", mas quando eu coloco coloco as passagens por valores não funciona, é como se os parametros " Y " e " Z " recebessem sempre o valor 0 quando o procedimento e rodado dentro do contador. Não sei se expliquei bem, agradeceria muito se alguem me ajudasse. E uma duvida simples, porem, eu gosto de saber perfeitamente o porque das coisas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Passagem de parâmetro por valor ou referência funciona da seguinte maneira:

 

Por valor:

Quando você passa um parâmetro por valor, significa que apenas o valor dele vai ser passado para o método, ou seja, se você possui uma variável chamada "foo" e ela tem valor 4, quando você passar para um método, digamos, bar(var param) isso significa que você estará criando uma outra variável chamada "param" que terá o mesmo valor de foo. Em essência é dizer isso:

foo <- 4
param <- foo

Por referência:

No mesmo exemplo de antes, se você passar por referência, isso significa que você estará passando a própria instancia da variável para o método bar(var param), ou seja, você vai estar passando a referência que a variável foo tem na memória para a variável param, então qualquer alteração em "param" vai refletir inteiramente em "foo", desta forma o valor da variável "foo" vai ser alterado no final da execução do método.

foo <- 4

procedimento bar(param : real) var
inicio

param <- param + 1

fimprocedimento

bar(foo)

Resultará em foo = 5.

 

No seu algoritmo, você está usando um acumulador, ou seja, você precisa somar valores dentro destas variáveis a fim de completar a execução, quando você faz isso por referência, a própria variável se altera, mas quando você passa apenas o valor, ele sempre vai ser enviado como parâmetro igual, em outras palavras, você vai sempre mandar o mesmo valor para o método.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.