Ir ao conteúdo
  • Cadastre-se

VisualG Parâmetros e Procedimentos VisualG


Posts recomendados

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

 

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

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
Link para o comentário
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.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

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)

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 comunidades 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

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!