apresentam ainda uma caracte- rística importante e que consiste na possibilidade de se chamarem a si próprios, ou seja, um subpro- grama é invocado recursivamente pelo mesmo subprograma. Agora que você já sabe mais sobre os subprogramas, siga para a pró- xima seção!
Seção 3
Argumentos e parâme-
tros
Muitas vezes é necessário indicar explicitamente ao subprograma as condições sob as quais a sua execução vai ser realizada. Por essas razões, um subprograma poderá aceitar argumentos que determinam essas condições. Os argumentos poderão ser variáveis, constantes ou expressões. Na des- crição do subprograma, devem estar definidos os parâmetros que correspondem aos argumentos que o programa do nível acima determinou. Essas considerações são válidas para subprogramas definidos pelos programadores e para subprogramas predefinidos. Vamos entender melhor! Consi- dere, por exemplo, um subpro- grama, designado por AREA, para calcular a área de um retân- gulo, dados os comprimentos dos lados. Esse subprograma irá devolver o valor da área do re- tângulo. O subprograma seria invocado recorrendo a uma ins- trução do tipo “varA = AREA (varComprimento,varLargura)”.
A variável A seria de um tipo com- patível com o valor de retorno do subprograma. Já o comprimento e a largura seriam variáveis usadas como argumentos. O subprogra- ma seria definido da seguinte ma- neira. Observe!
funcao AREA (varX, varY : real) : real
var
varAux : real inicio
varAux ← varX * varY retorne varAux fimfuncao
No subprograma AREA estão definidos os parâmetros varX e varY do tipo real. Os parâmetros declaram-se imediatamente antes da chaveta que marca o início do conjunto de instruções que cons- tituem a função ou procedimento. Existe uma relação direta entre os argumentos usados na chamada de um subprograma e os parâme- tros definidos para esse subpro- grama. A esses parâmetros irão ser atribuídos os valores dos argu- mentos. Se o subprograma fosse invocado como “varA = AREA (10,5)”, os parâmetros varX e varY passariam a conter os valo- res 10 e 5, respectivamente. Note que não precisa existir nenhuma correspondência entre os nomes das variáveis definidas como pa- râmetros de um subprograma e os nomes de eventuais variáveis usadas como argumentos na cha- mada desse subprograma. Aliás, no exemplo anterior, o subpro- grama foi invocado com valores constantes.
Outra possibilidade é a utilização de expressões com significado dentro do programa a partir do qual o subprograma é executado. Por exemplo: “varA = AREA( varX * 2, varLargura / 10 )”.
Nesse caso, a variável varX usada na expressão correspondente ao pri- meiro argumento tem um significado diferente do parâmetro varX usa- do na definição do subprograma, embora os nomes sejam iguais. Lem- bre-se de que é muito importante ter bem clara a distinção entre essas situações. Vamos em frente!
Seção 4
Funções
Na seção anterior você conheceu uma característica importante: o sub- programa AREA possui um valor de retorno. Ou seja, devolve um valor determinado que pode ser utilizado pelo programa que o invocou. Os subprogramas que apresentam essa característica designam-se por fun- ções. As funções podem ser definidas com ou sem parâmetros.
algoritmo “QUADRADO”
funcao QUADRADO (varX : real) : real var
varAux : real inicio
varAux <- varX * varX retorne varAux fimfuncao var
varNumero, varResultado : real varFim : logico
inicio
enquanto varFim = falso faca leia (varNumero)
se varNumero = 0 entao varFim = verdadeiro senão
varResultado ← QUADRADO (varNumero)
escreva (“Quadrado de ”, varNumero, “ é ”, varResultado) fimse
fimenquanto fimalgoritmo
As funções incluem sempre a pa- lavra retorne, seguida do valor a de-
volver ou de uma expressão que defina esse valor. Nas funções é também necessário indicar o tipo do valor de retorno. A linha “fun- cao QUADRADO (varX : real) : real” indica uma função designa- da por QUADRADO que aceita um parâmetro varX e retorna um valor real.
Genericamente, a sintaxe para definição de uma função é a que você verá a seguir.
funcao <nome-de-função> [(<seqüência-de-declarações- -de-parâmetros>)]:
<tipo-de-dado>
// Seção de Declarações In- ternas
inicio
// Seção de Comandos fimfuncao
Mas lembre-se de que a lista de parâmetros e declarações respec- tivas são opcionais.
58 CURSOS TÉCNICOS SENAI
Seção 5
Procedimentos
Os procedimentos são subprogramas que se distinguem das funções pelo fato de não apresentarem qualquer valor de retorno. Os procedimentos, tal como as funções, podem apresentar ou não uma lista de parâmetros que definem a forma como o procedimento irá ser executado. Tal como nas funções, é necessário declarar os parâmetros do procedimento, caso existam. Por exemplo, considere-se o programa que permite o cálculo da área de um retângulo, escrevendo o valor calculado. Nesse programa foram definidos dois subprogramas: a função AREA, que permite o cálculo da área do retângulo, e o procedimento ESCREVE_AREA, que apresenta o resultado calculado. O programa termina se for introduzido um valor negativo para o comprimento de um lado do retângulo.
algoritmo “AREA”
funcao AREA (varX, varY : real) : real var
varAux : real inicio
varAux ß varX * varY retorne varAux fimfuncao
procedimento ESCREVE_AREA (varX : real) inicio
escreva (“O valor da área é ”, varX) fimfuncao
var
varX, varY, varA : real varFim : logico inicio
repita leia (varX) leia (varY)
se varX < 0 ou varY < 0 entao varFim = verdadeiro senão
varA ← AREA (varX, varY) ESCREVE_AREA(varA) fimse
ate varFim = falso fimalgoritmo
Note que as funções e procedi- mentos que eventualmente pos- sam existir em um programa são sempre definidos antes do proce- dimento especial “inicio”. Portan- to, fique atento!
Genericamente, a sintaxe para de- finição de um procedimento é a seguinte, veja: procedimento <nome-de- -procedimento> [(<seqüên- cia-de-declarações-de-parâ- metros>)]
// Seção de Declarações In- ternas
inicio
// Seção de Comandos fimprocedimento
Tal como no caso das funções, a lista de parâmetros e declarações respectivas são opcionais.