Sr.Hozuki 3 Denunciar post Postado Fevereiro 9, 2016 É 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
KhaosDoctor 242 Denunciar post Postado Fevereiro 11, 2016 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