Ir ao conteúdo
  • Cadastre-se
DiogoR00

VisualG Parâmetros e Procedimentos VisualG

Recommended Posts

Olá, recentemente aprendi procedimentos, até que não é difícil, mas tenho as minhas dúvidas.

Eu gostaria de saber qual a diferença do primeiro algoritmo do segundo.

Eu não percebo para que serve os parâmetros visto que sem eles funciona na mesma, como podem ver em negrito.

É que o algoritmo 2 é bem mais simples que o primeiro, pois imaginemos que estou a usar variáveis de tipo inteiro e caractere, teria que criar 2 procedimentos? ou teria que mudar essa variavel do tipo caractere para inteiro?

 

1

algoritmo "FazSomaProcedimento"
var
 X, Y: Inteiro
Procedimento Soma(A, B: Inteiro)
inicio
   EscrevaL("Recebi o valor ",A)
   Escreval("Recebi o valor ",B)
   Escreval("A soma entre os dois e ", A + B )
FimProcedimento
inicio
    X <- 5
    Y <- 3
    Soma(X, Y)
fimalgoritmo

____________________________________

2

algoritmo "FazSomaProcedimento"
var
 X, Y: Inteiro
Procedimento Soma()
inicio
   EscrevaL("Recebi o valor ",X)
   Escreval("Recebi o valor ",Y)
   Escreval("A soma entre os dois e ", X + Y )
FimProcedimento
inicio
    X <- 5
    Y <- 3
    Soma()
fimalgoritmo

 

 

Editado por Simon Viegas
Inserir tag CODE
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá.

 

De um modo geral o primeiro é mais "correto". Nele, o que se precisa do "mundo externo" é enviado por parâmetro. No segundo, está usando variáveis globais... é mais pobre.

adicionado 14 minutos depois

A dica é simples... de um modo geral, tudo que um método precisa ou deve ser criado dentro dele, ou é enviado por parâmetro.. Inclusive, as variáveis do parâmetro são próprias também, poderia ser assim:

 

algoritmo "FazSomaProcedimento"
var
  X, Y: Inteiro
procedimento Soma(X, Y: Inteiro)
   inicio
   escrevaL("Recebi o valor ",X)
   escreval("Recebi o valor ",Y)
   escreval("A soma entre os dois e ",Y + X)
   fimProcedimento
inicio
X <- 5
Y <- 3
Soma(X, Y)
fimAlgoritmo

Ou seja, o X e Y  ali do parâmetro não tem não tem nada a ver com o X e Y  globais (apenas que coincidentemente tem as mesmas nomenclaturas). Essa é uma outra vantagem. Você pode dar as nomenclaturas que quiser... inclusive criar outros métodos com as mesmas... cada método é independente.

 

 

Outro ponto importante sobre parâmetros, é sobre o seu tipo. Ela pode ser POR VALOR ou POR REFERÊNCIA. Quando é por valor, a variável que está no parâmetro recebe apenas uma cópia do valor da variável utilizada... daí, mesmo que você altere o valor da variável local no procedimento, a variável externa continuará intacta. Já se passar por referência, em vez de receber o valor, vai receber a referência da variável em si.. ou seja, "o endereço de memória". Daí, ao alterar a variável local, vai na verdade alterar a variável global, pois essa variável local é uma referência a variável que foi passada ao invocar o método.

 

Para usar como referência, basta usar o var. Ex.:
 

algoritmo "FazSomaProcedimento"
var
  X, Y: Inteiro

procedimento Soma(var X:inteiro; Y: Inteiro)
   inicio
   escrevaL("Recebi o valor ",X)
   escreval("Recebi o valor ",Y)
   X <- X+1
   escreval("Adicionei 1 ao X ",X)
   Y <- Y+1
   escreval("Adicionei 1 ao Y ",Y)
   escreval("A soma entre os dois e ",Y + X)
   fimProcedimento
inicio
X <- 5
Y <- 3
Soma(X, Y)
escreval("Valor atual de X",X)
escreval("Valor atual de Y",Y)
fimAlgoritmo

 

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acabou por responder a outra dúvida que tinha, como coloco mais de um tipo primitivo em um procedimento!

Não sabia que se podia utilizar o ponto e virgula para colocar mais de um parâmetro de outro tipo!

 

1 hora atrás, Simon Viegas disse:

procedimento Soma(var X:inteiro; Y: Inteiro)

Agora vou poder continuar os meus estudos em paz. :thumbsup:

 

Agradeço imenso Simon, abraço.

Editado por DiogoR00

Compartilhar este post


Link para o post
Compartilhar em outros sites

A "," seria para "simplificar"... é análogo a declaração de variáveis lá no var das variáveis globais.

 

Veja que um está por referência, e outro por valor. Se ambos fossem referência, poderia ser assim:

procedimento Soma(var X:inteiro; var Y: Inteiro)

ou no caso, assim:

procedimento Soma(var X,Y: Inteiro)

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×