• Nenhum resultado encontrado

Argumentos de subpro gramas

No documento Logica Programação (páginas 60-62)

Um subprograma definido de forma a aceitar parâmetros, cria cópias das variáveis passadas como argumentos pelo programa que invocou o subprograma em questão. Mas o que isso represen- ta? Significa que os parâmetros definidos para um subprogra- ma vão funcionar como variá- veis locais desse subprograma. É por esse motivo que não existe qualquer conflito em invocar um subprograma cujos argumentos são variáveis com nomes iguais aos parâmetros definidos para o subprograma. Internamente, o computador irá reservar áreas de memória diferentes para os seus parâmetros. Acompanhe o se- guinte procedimento. procedimento SOMA_UM (varX) inicio varX ← varX + 1 escreva (varX) fimprocedimento

Como você pode perceber, esse procedimento limita-se apenas a aceitar um valor inteiro, somar o valor 1 ao valor recebido e escre- ver o resultado. Se esse procedi- mento for chamado em conjunto com as instruções que você verá a

algoritmo “SOMA” procedimento SOMA_UM (varX) inicio varX ← varX + 1 escreva (varX) fimprocedimento var varX : real inicio varX ← 3 SOMA_UM (varX) escreva (varX) fimalgoritmo

Conforme o exemplo anterior, o procedimento SOMA_UM não alterou o valor da variável varX que continuou a ter o valor 3 após a chamada do procedimento. O valor 4 corresponde ao valor da variável varX no procedimento SOMA_UM.

Mas fique atento! Esse mecanis- mo de cópia dos argumentos para variáveis locais no subprograma não é desejável em todas as situ- ações. Existem muitos casos em que se pretende que as alterações exercidas sobre as variáveis cor- respondentes aos parâmetros do subprograma sejam reconhecidas no programa ou subprograma de nível superior.

Um exemplo típico consiste na definição de um subprograma que permita proceder à troca dos valores de duas variáveis. Veja a seguir um procedimento capaz de executar essa tarefa.

Uma variável local só é reco- nhecida no subprograma em que se encontra declarada, não podendo ser invocada por outros subprogramas. O uso de variáveis locais dimi- nui o espaço na memória do computador requerido por um programa, uma vez que apenas possuem uma área de memória reservada durante a execução do bloco do pro- grama no qual se encontram definidas.

Existem, no entanto, muitas situ- ações em que é importante que uma determinada variável seja reconhecida em qualquer ponto do programa. Isso significa que, independentemente da função ou procedimento que utilizar a vari- ável, esta estará sempre associada à mesma posição de memória, não sendo destruída depois de ser utilizada por um subprograma. A variável existirá, permanecendo reservado o espaço de memória respectivo, até que o programa termine a sua execução.

Assim, é possível considerar a existência de variáveis com ca- racterísticas distintas: as variáveis locais ou automáticas, que apenas têm existência dentro do subpro- grama em que se encontram de- claradas, e as variáveis globais ou estáticas, que existem enquanto o programa não terminar, sendo

60 CURSOS TÉCNICOS SENAI

procedimento TROCA (varA, varB) var varC : inteiro inicio varC ← varA varA ← varB varB ← varC fimprocedimento

Com esse procedimento, pretende-se atribuir à variável varA ao con- teúdo da variável varB e a esta, o conteúdo de varA recorrendo a uma variável auxiliar varC. Caso esse procedimento fosse utilizado, seria feito da seguinte maneira. Saiba mais!

algoritmo “TROCA”

procedimento TROCA (varA, varB) var varC : inteiro inicio varC ← varA varA ← varB varB ← varC fimprocedimento var

varX, varY : real inicio

varX ← 5 varY ← 6

TROCA (varX, varY)

escreva (“X = ”, varX, “, Y = ”, varY) fimalgoritmo

E sabe qual o resultado para essa operação? O resultado obtido se- ria “X = 5, Y = 6, ou seja, não houve qualquer troca dos valores das variáveis. Para que você enten- da melhor, a explicação é simples. Ao ser invocado, o procedimento TROCA criou cópias dos argu- mentos que recebeu, trocou esses valores entre si e, ao terminar, li- bertou o espaço reservado para os parâmetros que continham o va- lor dos argumentos. Isso significa que o procedimento funcionou, mas apenas em relação às cópias dos argumentos que recebeu. Para resolver o problema, ao in- vés de passar como argumentos os valores das variáveis, deve-se indicar ao procedimento TROCA as posições de memória (endere- ços) ocupadas por essas variáveis. Na prática, isso significa que os parâmetros do procedimento são substituídos pelos argumentos que são passados, fazendo com que as alterações efetuadas den- tro do procedimento sejam reco- nhecidas no programa que o in- vocou. Nesse caso, diz-se que os argumentos foram passados por referência. A situação inicial cor- responde a passar os argumentos por valor.

Mas como será possível distinguir essas duas situações? Para isso, é feita a colocação do caractere var

antes do nome do argumento que é passado por referência na ins- trução correspondente à chamada do procedimento. A palavra var

permite aceder ao endereço da variável e não ao seu conteúdo. A troca correta de valores das duas variáveis precisa ser efetuada indicando o endereço dos argu- mentos do procedimento TRO- CA. Confira!

algoritmo “TROCA”

procedimento TROCA (var varA, var varB) var varC : inteiro inicio varC ← varA varA ← varB varB ← varC fimprocedimento var

varX, varY : real inicio

varX ← 5 varY ← 6

TROCA (varX, varY)

escreva (“X = ”, varX, “, Y = ”, varY) fimalgoritmo

O resultado obtido seria “X = 6, Y = 5”, ou seja, houve troca dos valo- res das variáveis.

Nesse caso, as alterações efetuadas no procedimento foram reconheci- das no programa que o invocou. Em relação a essa questão, é importante destacar que esses problemas podem ser resolvidos de outra maneira. Para tal, basta que as variáveis envolvidas sejam definidas como variáveis globais, sendo reconhecidas em todo o programa. Assim, não seria ne- cessário fazer a passagem de argumentos por referência. Aliás, não seria necessário passar essas variáveis como argumentos aos subprogramas que atuassem sobre elas, pois todos os subprogramas são capazes de reconhecer variáveis globais.

Mas esse processo não é muito aconselhável. Sabe por quê? Porque ele limita as potencialidades de utilização dos subprogramas, que passam a ter um caractere muito restrito.

As linguagens de programação apresentam formas diversas de efetuar a distinção entre a passagem de argumentos por valor ou por referência.

Seção 8

No documento Logica Programação (páginas 60-62)

Documentos relacionados