Como construir uma função em Cobol?

Funções são semelhantes a subprogramas e têm por objetivo aumentar o reuso de código. Em alguns casos, o uso de funções no lugar de subprogramas pode deixar o programa chamador mais limpo.

Além de contar com dezenas de funções intrínsecas o Cobol permite também a codificação de nossas próprias funções, chamadas de user defined function.

Neste artigo vamos ver um exemplo bem simples de construção de função para calcular o valor futuro a partir de um valor presente, uma taxa de juros e um período de tempo informados pelo usuário.

A fórmula do valor futuro é:

Onde:

VF = Valor Futuro
VP = Valor Presente
i = taxa de juros
n = períodos

A função recebe VP, i e n como parâmetros e retorna o valor futuro depois de aplicar a fórmula. A função completa está codificada nas linhas abaixo:

identification division.
function-id. VF.
data division.
linkage section.
01 lk-vp pic 9(013)v9(002).
01 lk-i pic 9(003)v9(003).
01 lk-n pic 9(003).
01 lk-vf pic 9(013)v9(003).
procedure division using by reference lk-vp, lk-i, lk-n returning lk-vf.
principal.
    compute lk-vf = lk-vp * ((1 + (lk-i / 100)) ** lk-n) 
    goback.
end function VF.

Uma função deve ser codificada com FUNCTION-ID ao invés de PROGRAM-ID. Tanto os argumentos quanto a variável de retorno (resultado da funcão) devem ser declaradas na LINKAGE-SECTION. Os argumentos são recebidos pelo programa através da cláusula USING da PROCEDURE DIVISION, e a variável de retorno é exportada através da opção RETURNING.

Para chamar essa função devemos declará-la no parágrafo REPOSITORY da ENVIRONMENT DIVISION e em seguida usar um comando de atribuição para mover o resultado da função a uma variável do programa, como podemos ver no código abaixo:

identification division.
program-id. gtc005.
environment division.
configuration section.
special-names.
    decimal-point is comma.
repository.
    function VF.
data division.
working-storage section.
01 wt-vp pic 9(013)v9(002) value zeros.
01 wt-i pic 9(003)v9(003) value zeros.
01 wt-n pic 9(003) value zeros.
01 wt-vf pic zzz.zzz.zzz.zz9,99 value zeros.

procedure division.
inicio.
    display "Informe o valor presente: "
    accept wt-vp from console
    display "Informe a taxa de juros: " 
    accept wt-i from console 
    display "Informe o numero de periodos: " 
    accept wt-n from console 

    move VF(wt-vp, wt-i, wt-n) to wt-vf 

    display "Valor Futuro sera' " wt-vf 
    stop run.

Ao executar esse programa…

[aeisxpad ~/cbl]$ gtc005
Informe o valor presente:
80000
Informe a taxa de juros:
5
Informe o numero de periodos:
10
Valor Futuro sera' 130.311,57

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *