SUBPROGRAMAS

 

CONCEITOS

 

·       Subprogramas são frações de código de programa que realizam uma função específica  e podem ser reaproveitados por vários programas ou outros subprogramas.

·       A técnica de subprogramação, utilização de subprogramas, consiste em quebrar um programa grande em um conjunto de subprogramas menores que sejam funcionalmente independentes.

·       Cada subprograma deve possuir suas próprias variáveis (variáveis locais) e receber e/ou retornar valores do/para seu chamador apenas através de parâmetros. As variáveis declaradas no bloco principal (programa principal) são denominadas de variáveis globais e devemos evitar usá-las nos subprogramas.

 

CLASSES DE SUBPROGRAMAS

 

·       Classes de Subprogamas:  FUNÇÕES e  PROCEDIMENTOS.

·       Podem ser predefinidos, tais como: MOD, LENGTH, SQR, SQRT, UPCASE,  e outros; ou podem então ser definidos pelo próprio programador.

·       Apêndice 2 e 3 da apostila contida em materiais adicionais possui uma lista com mais procedimentos predefinidos.

·       O programador deve definir seus próprios subprogramas quando ocorre pelo menos uma das seguintes situações:

-         O código do programa ocupa uma uma página ou mais;

-         Alguma parte do programa desempenha uma tarefa específica ;

-         Algumas linhas de código aparecem repetidas;

-         Algum trecho do programa poderá vir a ser utilizado em um outro programa.

 

·       Quando utilizar uma função ou um procedimento:

-         Função:quando se desejar obter um único valor como resultado da execução do subprograma;

-         Procedimento: nos demais casos.

 

·       Os subprogramas são declarados na parte das declarações dos programas PASCAL. Também pode estar contido (declarado) em outro subprograma.

·       Um subprograma pode ser ativado pelo programa principal e/ou por outro subprograma.

·       A ativação de uma função pode substituir uma variável em uma expressão ou em uma lista de saída de dados.

·       A ativação de um procedimento pode substituir um comando PASCAL.

 

FUNÇÕES (FUNCTION)

 

·       Forma de Declaração:

 

FUNCTION nome_da_função(parâmetro_formal_1:

tipo_do_parâmetro_1,

parâmetro_formal_2:

                        tipo_do_parâmetro_2,

                        . . .

                        parâmetro_formal_n:

                        tipo_do_parâmetro_n):

                        tipo_da_função;

       declarações; /* se necessário */

    BEGIN

       comando;

       . . .

       nome_da_função := valor; /* atribuição do valor a

                            ser retornado */

    END;

 

 

Exemplo:

 

·       Programa que utiliza uma função para cálculo do quadrado de um número real:

 

PROGRAM COM_FUNÇÃO;

VAR

       NUMERO: REAL;

    /* FUNÇÃO PARA CALCULAR O QUADRADO DE UM NUMERO */

/* O NUMERO QUE ENTRA E O QUADRADO SÃO DO TIPO REAL */

FUNCTION QUADRADO(NUMERO_ENT: REAL): REAL;

    BEGIN

       QUADRADO := NUMERO_ENT * NUMERO_ENT

END;

BEGIN /* INICIO DO CORPO DO PROGRAMA PRINCIPAL */

    WRITELN('INFORME UM VALOR REAL P/DETERMINAÇÃO DO ',

        'QUADRADO:');

    READLN(NUMERO);

    WRITELN('O VALOR LIDO FOI', NUMERO: 6: 2,

        'SEU QUADRADO EH', QUADRADO(NUMERO): 10: 4)

END.

 

·       Os parâmetros que aparecem na declaração de um subprograma são denominados de parâmetros formais.

·       Os parâmetros que aparecem na ativação são denominados de parâmetros reais.

·       A ativação de uma função é feita escrevendo-se o nome da função seguido da lista de parâmetros reais

·       A ativação pode ser feita dentro de uma expressão de um comando de atribuição ou num  comando de saída.

·       O retorno do valor calculado pela função é feito através do nome da função - é por esta razão que as funções são declaradas como de algum tipo de dado no seu cabeçalho.

 

PROCEDIMENTOS (PROCEDURE)

 

·       Um procedimento pode retornar qualquer quantidade de valores através dos parâmetros do tipo variáveis (VAR).

·       Forma de declaração:

 

PROCEDURE nome_do_procedimento(parâmetro_formal_1:

       tipo_do_parâmetro_1,

       parâmetro_formal_2:

                               tipo_do_parâmetro_2,

                               . . .

                               parâmetro_formal_n:

                               tipo_do_parâmetro_n);

    declarações; /* se houver */

BEGIN

    /* corpo do procedimento */

    comando;

    . . .

END;

 

·       A ativação de um procedimento é feita escrevendo-se o nome do subprograma seguido da lista de parâmetros reais  em qualquer lugar onde possa ser escrito um comando, no corpo do programa ou de um subprograma.

 

Exemplo:

 

·       Programa que utiliza um procedimento para cálculo do quadrado e do cubo de um número inteiro qualquer:

 

/* CALCULA QUADRADO E CUBO */

PROGRAM QUAD_E_CUBO;

VAR

/* O VALOR QUE SERÁ LIDO */

    VALOR: INTEGER;

    /* OS VALORES QUE SERÃO OBTIDOS QDO O PROCEDIMENTO FOR

   EXECUTADO*/

    QUADRADO, CUBO: INTEGER;

PROCEDURE CALC_QUAD_E_CUBO(NUMERO: INTEGER; VAR QUAD,

                           CUB: INTEGER);

BEGIN

    QUAD := NUMERO * NUMERO;

    CUB := QUAD * NUMERO END; BEGIN

    WRITELN('INFORME UM VALOR INTEIRO:');

    READLN(VALOR);

    /*

   VALOR SERÁ PASSADO PARA O PROCEDIMENTO.

   QUADRADO E CUBO SERÃO RECEBIDOS DOS PARÂMETROS DE

   POSIÇÕES CORRESPONDENTES DO PROCEDIMENTO

*/

    CALC_QUAD_E_CUBO(VALOR, QUADRADO, CUBO);

    WRITELN('VALOR LIDO', VALOR: 5, 'O SEU QUADRADO EH:',

         QUADRADO: 7, ' O SEU CUBO EH:', CUBO: 8)

END.

 

CLASSES DE PARÂMETROS

 

·       Os parâmetros formais  são declarados no cabeçalho dos subprogramas

·       Os parâmetros formais são utilizados com a finalidade de especificar formalmente para os parâmetros reais:

-         quantos são,

-         quais são, seus tipos, e

-         se serão utilizados para trazerem e/ou retornarem valores

 

·       Os parâmetros formais que serão utilizados apenas para introduzir valores nos subprogramas são chamados de parâmetros de valor.  são os únicos permitidos nas funções.

·       Os parâmetros formais que serão utilizados para retornar com valores dos procedimentos são denominados parâmetros de variáveis e devem ser precedidos pela palavra VAR.

·       Ao ativar um procedimento o programador deve observar a correspondência na lista dos parâmetros reais e formais, como também observar quais os parâmetros passados por valor e por variável (VAR).

 

REGRAS DO ESCOPO LÉXICO

 

·       A área de um programa ou subprograma onde um objeto pode ser referenciado é conhecida como escopo léxico.

·       escopo de um objeto (variável, subprograma, tipo) é a rotina inteira onde ele foi declarado, incluindo subprogramas.

·       Ilustração das regras do escopo léxico: veja na tabela, que segue a figura, quais os objetos que estão disponíveis para acesso nos vários locais do programa.


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


Escopo Léxico de Identificadores

 

·       Observe que o nível mais externo contém o cabeçalho do programa (Program ...) e foi identificado como nível zero. Os objetos declarados no nível zero são globais: estão disponíveis no nível zero e em todos os demais níveis.

 

Objetos declarados em:  | Estão acessíveis em:

 

PROGRAM A         | A, B, C, D, E, F, G, H, I

PROCEDURE B       | B, C, D, E, F

PROCEDURE C       | C, D, E

FUNCTION D        | D

PROCEDURE E       | E

PROCEDURE F       | F

FUNCTION G        | G, H, I

PROCEDURE H       | H

PROCEDURE I       | I

TYPE Reg1         | C, D, E

TYPE Reg2         | I